Some Expressions do not resolve

Custom node does not resolve expressions in collection fields

The node works in general, and top level fields accept expressions properly.
But collection fields do not resolve expression but pass them as string.

The UI resolves the expression properly
The UI resolves the expression properly

Error Message:

Bad request - please check your parameters

Invalid value ‘={{ $first().json.content[0].id }}’ for ‘address.contactId’. Value of type UUID expected.


Expressions are not resolved for collections fields

{
		displayName: 'Address',
		name: 'address',
		type: 'collection',
		default: {},
		required: true,
		noDataExpression: false,
		displayOptions: { show: showOnlyFoCreate },
		options: [
			{ displayName: 'Customer-UUID', name: 'contactId', type: 'string', default: '', description: 'ID of person', noDataExpression: false },
			{ displayName: 'Name', name: 'name', type: 'string', default: '', noDataExpression: false },
			{ displayName: 'Street', name: 'street', type: 'string', default: '', noDataExpression: false },
			{ displayName: 'City', name: 'city', type: 'string', default: '', noDataExpression: false },
			{ displayName: 'ZIP', name: 'zip', type: 'string', default: '', noDataExpression: false },
			{ displayName: 'Country Code', name: 'countryCode', type: 'string', default: 'US', noDataExpression: false },
		],
	},

Information on your n8n setup

  • n8n version: 2.0.3
  • Database: SQLite
  • n8n EXECUTIONS_PROCESS setting: default
  • Running n8n via: CLI n8n-node dev
  • Operating system: MacOS 15.5

Hey, quick question, is your node built with declarative style (using routing) or programmatic style (with execute method)?

I’ve seen a similar issue before where expressions inside collection fields don’t get evaluated in declarative nodes. The UI shows the correct value but when executing it just passes the raw expression string to the API.

There was another thread about this: https://community.n8n.io/t/expressions-in-collection-fields-not-evaluating-need-workaround-or-best-practice/189191

The guy there ended up rewriting his node in programmatic style and that fixed it. Not ideal but it worked.

Would be interesting to know which style you’re using.

I am using the declarative approcach.

I am aware of the thread you mentioned (already did a huge amount of webresarch on the topic):
But as I am in the declarative setup - solutions using programmative are no aid to me.

What do I need to change to have expressions woking inside declarative collapse fields/collections.