n8n dynamic dropdown forms

An n8n dynamic dropdown form uses FormNode for the field UI and n8n for live option lookup. The dropdown calls a read-only n8n webhook while the user fills out the form, then stores the selected value in the final FormNode submission payload.

Direct answerUse FormNode dynamic fields when an n8n form needs live customer, site, user, license, asset, ticket, or device options. Keep these n8n webhooks read-only and separate from the final submission workflow.

Field setup in FormNode

  1. Add a Dropdown or Multi-Select field.
  2. Enable Dynamic data.
  3. Choose the n8n workflow/webhook from the picker, or use Custom URL and paste the HTTPS URL for a self-hosted n8n webhook that returns options.
  4. Set valueKey and labelKey when your response does not use value and label.
  5. Use Depends on when a parent field should filter this dropdown.
Keep option webhooks read-onlyA dropdown webhook should return choices. It should not create tickets, update users, assign licenses, or write to the PSA/RMM. Put those actions behind the final submission webhook instead.

Preferred response shape

The simplest response is an options array. Use stable IDs as value and human-readable text as label.

{
  "options": [
    { "value": "site_1001", "label": "Acme HQ" },
    { "value": "site_1002", "label": "Acme Warehouse" }
  ]
}

Alternate response shape

If your n8n workflow returns plain arrays, set valueKey andlabelKey in FormNode. For the response below, use valueKey=id and labelKey=name.

[
  { "id": "SPB", "name": "Microsoft 365 Business Premium" },
  { "id": "SPE_E3", "name": "Microsoft 365 E3" }
]

Cascading dropdowns

A cascading dropdown reloads when a parent field changes. The common n8n form pattern is customer first, then customer-specific sites, users, devices, tickets, or licenses.

GET /webhook/formnode-sites?company_id=192837&organizationId=9c1d2e3f-4a5b-6c7d-8e9f-0a1b2c3d4e5f

The n8n webhook should validate the parent value, query the source system, and return only options that belong to that customer or tenant. Do not rely on client-provided values for security-sensitive scoping.

Organization mappings

When the current FormNode organization already stores a source-system ID, use organization context instead of asking the submitter to choose it. Typical mappings include cw.companyId, cipp.tenantId, ninja.orgId, and hudu.companyId.

FormNode resolves organization mappings after validating the form, workspace, organization, and allowlist. The browser should not supply a trusted mapping value.

What FormNode stores

FormNode stores the selected option value in the submission payload. If the dropdown returns { "value": "site_1001", "label": "Acme HQ" }, n8n should treat site_1001 as the durable ID and Acme HQ as display text. Do not depend on labels for automation decisions.

Performance guidance

  • Keep option webhooks fast. Aim for simple lookup and transform logic.
  • Cache slow source-system reads inside n8n when the data does not change often.
  • Split slow fields onto later form pages instead of blocking the first page.
  • Return an empty options array for valid empty states instead of throwing.

Troubleshooting

Dropdown is empty

Check the n8n webhook execution, the HTTP status, and the response shape. A valid empty array means no options. A non-2xx response means the lookup failed.

Wrong tenant options appear

Move the tenant lookup server-side. The webhook should validate the organization mapping or parent value before returning options.

The selected label is right but n8n cannot act on it

Your value is probably a display label instead of a source-system ID. Use the ID as the option value and the display name as the label.