Send Batch
customer_io.send_batch
ActionCRM & salesconnection required
Calls the Customer.io API with the connection's credentials.
Send many Track v2 entity operations in one request. Customer.io accepts the valid entries and reports the rest, so a partial failure is a normal outcome here rather than an error.
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
1 field, 1 required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.
| Field | Type | Required | Default | Constraints | Example |
|---|---|---|---|---|---|
batch The operations to send, as a JSON array. Each entry is one Track v2 entity payload, carrying its own 'type', 'action' and 'identifiers'. At least one operation is required. | array | Yes | — | ≥ 1 characters; array of object | [{"action":"identify","attributes":{"plan":"pro"},"identifiers":{"id":"42"},"type":"person"}] |
Example configuration
Every value below is the contract’s own example or default — nothing invented.
{
"batch": [
{
"action": "identify",
"attributes": {
"plan": "pro"
},
"identifiers": {
"id": "42"
},
"type": "person"
}
]
}Output
One shape.
result
| Field | Type | Example |
|---|---|---|
submitted How many operations the request carried. | number | — |
accepted How many Customer.io accepted. | number | — |
failed How many Customer.io rejected. | number | — |
partial True when some entries were rejected and the rest went through, which Customer.io answers as a 207. | boolean | — |
errors One object per rejected entry. | array | — |
errors[].batch_index The zero-based position of the rejected entry in the batch. | number | — |
errors[].reason Why the entry was rejected. | string | — |
errors[].field The field that carried the problem. | string | — |
errors[].message The detailed message for that field. | string | — |
{
"accepted": 0,
"errors": [
{
"batch_index": 0,
"field": "",
"message": "",
"reason": ""
}
],
"failed": 0,
"partial": false,
"submitted": 0
}Notes
- A 207 is a partial success, not a failure: the accepted entries are already queued. Retry only the indexes named in 'errors'.
See Send Batch 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.