Payload
What a wake delivery carries, and why dedupe on the signed idempotency key is mandatory.
reason is why the card arrived — created, advanced, rejected, claim_released, claim_expired, unpaused or subflow_entered. stationName and stationInstructions are omitted rather than sent null when the station could not be read, so read them against each other: a named station with no instructions carries none. Answer 2xx to accept; anything else is retried.
Delivery is at-least-once. Dedupe you must — key your store on event.idempotencyKey from the verified body and make the handler safe to run twice.
{
"id": "5f1c…",
"type": "card.arrived_at_station",
"occurredAt": "2026-09-12T10:00:00.000Z",
"tenantId": "…",
"boardId": "…",
"phaseId": "…",
"stationId": "…",
"cardId": "…",
"reason": "advanced",
"idempotencyKey": "…:webhook:actor:…",
"stationName": "Implement",
"stationInstructions": "Open a PR and attach it as the pr artifact."
}