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.
Field setup in FormNode
- Add a Dropdown or Multi-Select field.
- Enable Dynamic data.
- 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.
- Set
valueKeyandlabelKeywhen your response does not usevalueandlabel. - Use Depends on when a parent field should filter this dropdown.
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-0a1b2c3d4e5fThe 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.