approval callback example
n8n approval callback payload example
An example approval callback payload for n8n workflows that wait for customer, manager, or technician approval before fulfillment.
Direct answer
An n8n approval callback payload should include the approval ID, submission ID, organization context, decision, approver identity, comments, and any row-level decisions. n8n should branch on the structured decision, not parse an email thread.
Example approval callback payload
{
"approvalId": "appr_01JZ8Q1G4F8Y2M7R9N0P6T5V3A",
"submissionId": "sub_01JZ8P9Q4S0R8W7K6M5N4B3A2C",
"organizationId": "org_acme",
"decision": "approved",
"approver": {
"name": "Morgan Patel",
"email": "morgan@example.com"
},
"comment": "Approved for Friday evening.",
"rows": [
{
"deviceId": "fw_1001",
"label": "HQ firewall",
"decision": "approved",
"maintenanceWindow": "2026-05-22T23:00:00Z"
},
{
"deviceId": "fw_1002",
"label": "Warehouse firewall",
"decision": "rejected",
"reason": "Warehouse is open late."
}
]
}Notes
- Use structured decisions such as approved, rejected, or needs_changes instead of free-text status strings.
- Include row-level decisions when a customer approves some items but rejects others.
- Keep the original submission ID so n8n can update the right ticket, task, or workflow execution record.
- Send approver comments as context, not as the only source of truth.
Common questions
What should n8n do with an approval callback?
n8n should branch on the structured approval decision, update the related ticket or request, and only run fulfillment steps for approved items.
Do approval callbacks need the original submission ID?
Yes. The submission ID links the decision back to the request that created it and helps n8n avoid updating the wrong workflow record.