Webhook payloads
QACrow delivers events to your endpoint via POST with a JSON body.
Request
POST /your/endpoint HTTP/1.1
Content-Type: application/json
QACrow-Signature: t=1713350000,v1=8f4c2e...
QACrow-Event: run.completed
QACrow-Delivery: dlv_01H...
{
"id": "evt_01H...",
"type": "run.completed",
"createdAt": "2026-04-18T12:34:56Z",
"data": {
"run": { /* Run object — see API reference */ }
}
}
Signature verification
The QACrow-Signature header contains a timestamp t and one or more v1 HMAC-SHA256 hex digests of t + "." + body keyed with your webhook signing secret. Reject requests where the timestamp is older than 5 minutes or the digest doesn't match.
Event types
| Event | When it fires |
|---|---|
run.started |
A run transitions to running. |
run.completed |
A run reaches a terminal state. |
run.failed |
A run ends with failed, blocked, or timed_out. |
issue.created |
A new issue is recorded for a run. |
issue.critical |
A critical severity issue is recorded. |
schedule.triggered |
A scheduled run has been queued. |
credits.low |
Workspace balance fell below the auto-top-up threshold. |
Delivery
Endpoints have 10 seconds to respond. Any non-2xx response (or a timeout) triggers an exponential-backoff retry up to 6 times over ~24 hours.