Identify Person

customer_io.identify_customer
ActionCRM & salesconnection required

Calls the Customer.io API with the connection's credentials.

Create or update a person through the Track API, setting whichever attributes the request carries and leaving the rest untouched.

Connection

Required
Yes — the node will not save without one
Auth type
API key
Providers
Customer.io
Secret shape
{"site_id": "…", "api_key": "…", "app_api_key": "…"} — the Site ID and Track API key for the Track nodes, the App API key for the rest
Config it needs
region, workspace_id
Resolved by
config.connection_id, else node.connection_id

Configuration

3 fields, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
identifier
How this person is addressed in the Track API: their id, their email address, or their Customer.io id prefixed with 'cio_'. A phone number is read as an id here, so it will not match.
stringYes——ada@example.com
attributes
The attributes to set, as a JSON object. Customer.io reads 'id', 'email', 'created_at', 'unsubscribed' and '_timestamp' specially; every other key becomes a custom attribute.
objectNo———
update_only
Send '_update: true' so a request that does not match an existing person fails instead of creating a second profile.
booleanNofalse——

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "identifier": "ada@example.com",
  "update_only": false
}

Output

One shape.

result

FieldTypeExample
accepted
True when Customer.io queued the write. Track writes are applied asynchronously, so this reports acceptance, not that the change is live.
boolean—
identifier
The identifier the person was addressed by.
string—
attributes
The attribute names the request carried.
array—
{
  "accepted": false,
  "attributes": [],
  "identifier": ""
}

Notes

  • Track writes return an empty 200: Customer.io queues them and applies them asynchronously, so read the profile back with customer_io.get_customer_attributes if you need to confirm one.

See Identify Person run in a workflow.

In a technical demo we add the Customer.io connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.