Productsup
Dev PortalConnector Setup

Individual config

Define form fields that end-users fill in when using your connector.

Individual configuration defines the form fields that end-users see when they add your connector to a site. Each field becomes an environment variable or CLI flag at runtime — this is how end-users customize connector behavior without touching code.

For example, if your connector imports products from an API, you might define fields for the API key, base URL, and batch size.

Individual configuration in the Dev Portal

The fields you define here are displayed to end-users as a form on the Productsup platform once the connector is synced.

Field properties

Each field has the following properties:

PropertyRequiredDescription
Command optionYesThe key used to pass the value to your connector at runtime. Must start with a letter and can contain letters, numbers, dashes, and underscores.
Field typeYesThe type of form control shown to end-users. See field types below.
Field nameYesThe label displayed to end-users.
RequiredNoWhether the field must be filled in. Defaults to false.
PlaceholderNoHint text shown inside the input when empty.
DescriptionNoHelp text displayed below the field.
Default valueNoA pre-filled value. For checkboxes, must be 0 or 1. For selects, must match one of the defined options.
Field configSelect types onlyA JSON object defining the available options. Required for select and select_multiple types.
OrderNoThe position of the field in the form. Fields are displayed in ascending order.

Field types

Common types (all connector types)

TypeDescription
inputSingle-line text input. Use for short values like API keys, URLs, account IDs.
textareaMulti-line text input. Use for longer content like templates or JSON payloads.
passwordMasked text input. Use for sensitive values.
checkboxA boolean toggle. Default value must be 0 (unchecked) or 1 (checked).
selectDropdown with predefined options. Requires field config with a JSON object of key-label pairs.
select_multipleMulti-select dropdown. Same config format as select.
hiddenA hidden field not visible to end-users. Use for internal defaults.

Type-specific fields

Some field types are only available for specific connector types:

TypeAvailable forDescription
dateData source, Data serviceA date picker.
integerData serviceNumeric input (integers only).
numberData serviceNumeric input (decimals allowed).
export_headersExport, Export deltaExport header selection.
feed_headersExport, Export deltaFeed header selection.
stage_columns_dropdownData serviceColumn selection dropdown.
stage_columns_dropdown_multipleData serviceMulti-select column selection.

Select field config

For select and select_multiple fields, the field config property must contain a JSON object mapping option keys to display labels:

{
  "us": "United States",
  "de": "Germany",
  "uk": "United Kingdom"
}

The keys are the values passed to your connector at runtime. The labels are what end-users see in the dropdown. If you set a default value, it must match one of the keys.

How values reach your connector

The command option property determines how the value is passed to your connector, based on the execution mode:

The command option is converted to an uppercase environment variable. Dashes are replaced with underscores.

Command optionEnvironment variable
api_keyAPI_KEY
base-urlBASE_URL
batchSizeBATCHSIZE

Command options mode

The command option is used as a CLI flag prefixed with --.

Command optionCLI flag
api_key--api_key='value'
base-url--base-url='value'

If you're using environment variable mode, avoid dashes in command options — use underscores instead. Dashes are converted to underscores in env var names, which can be confusing.

Accessing values in your code

Here's a complete example: define two fields in the Dev Portal (api_key and batch_size), then access them in a Symfony service.

In the Dev Portal, create two individual config fields:

Command optionField nameField typeRequired
api_keyAPI KeyinputYes
batch_sizeBatch SizeinputNo

In config/services.yaml, bind the environment variables to service parameters:

config/services.yaml
services:
    _defaults:
        autowire: true
        autoconfigure: true
        bind:
            $apiKey: '%env(API_KEY)%'
            $batchSize: '%env(int:BATCH_SIZE)%'

In your service, receive them as typed constructor parameters:

src/Service/ImportService.php
readonly class ImportService
{
    public function __construct(
        private ContainerApiInterface $containerApi,
        private string $apiKey,
        private int $batchSize,
    ) {}

    public function run(): void
    {
        $client = new \GuzzleHttp\Client();
        $response = $client->get('https://api.example.com/products', [
            'headers' => ['Authorization' => 'Bearer ' . $this->apiKey],
            'query' => ['limit' => $this->batchSize],
        ]);

        // Process response...
    }
}

Symfony's %env()% syntax supports type casting: int:, bool:, json:, and plain strings. This keeps your configuration strongly typed and your dependencies explicit.

Ordering

Fields are displayed to end-users in the order you define. You can reorder fields by changing their order value in the Dev Portal. When you insert a field at a specific position, surrounding fields are automatically reordered.

How is this guide?

On this page