{
"id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"type": "job.awaiting_confirm",
"data": {
"job": {
"id": "<string>",
"namespace": "<string>",
"spend_usd": 1,
"progress": {
"documents_done": 1
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"judgment": "<string>",
"estimate": {
"documents": 1,
"tokens": 1,
"judgment_units": 1,
"cost_usd": 1,
"duration_s": 1
},
"estimated_completion_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"attribute": "<string>",
"referenced": {
"relation": "<string>",
"document_id": "<string>",
"revision": 1
},
"version": 2,
"report": {
"documents": 1,
"current": {
"mean": 123,
"histogram": [
{
"lower": 123,
"upper": 123,
"count": 1
}
]
},
"candidate": {
"mean": 123,
"histogram": [
{
"lower": 123,
"upper": 123,
"count": 1
}
]
},
"threshold_flips": {},
"recompute": {
"documents": 1,
"tokens": 1,
"judgment_units": 1,
"cost_usd": 1,
"duration_s": 1
}
}
},
"url": "<string>"
},
"test": true
}Jobawaiting confirm
A job waits for POST /jobs/{id}/confirm, with its estimate, such as a fan-out or a shadow report ready to review.
{
"id": "<string>",
"timestamp": "2023-11-07T05:31:56Z",
"type": "job.awaiting_confirm",
"data": {
"job": {
"id": "<string>",
"namespace": "<string>",
"spend_usd": 1,
"progress": {
"documents_done": 1
},
"created_at": "2023-11-07T05:31:56Z",
"updated_at": "2023-11-07T05:31:56Z",
"judgment": "<string>",
"estimate": {
"documents": 1,
"tokens": 1,
"judgment_units": 1,
"cost_usd": 1,
"duration_s": 1
},
"estimated_completion_at": "2023-11-07T05:31:56Z",
"error": "<string>",
"attribute": "<string>",
"referenced": {
"relation": "<string>",
"document_id": "<string>",
"revision": 1
},
"version": 2,
"report": {
"documents": 1,
"current": {
"mean": 123,
"histogram": [
{
"lower": 123,
"upper": 123,
"count": 1
}
]
},
"candidate": {
"mean": 123,
"histogram": [
{
"lower": 123,
"upper": 123,
"count": 1
}
]
},
"threshold_flips": {},
"recompute": {
"documents": 1,
"tokens": 1,
"judgment_units": 1,
"cost_usd": 1,
"duration_s": 1
}
}
},
"url": "<string>"
},
"test": true
}Authorizations
An organization API key. Keys carry a role (read_write or
read_only) and may be restricted to a namespace prefix such as
acme/*, or to one namespace such as acme/prod/tenant_1. A prefix
matches on a / boundary: acme/prod/tenant_1* covers
acme/prod/tenant_1 and everything under acme/prod/tenant_1/,
never acme/prod/tenant_12.
Headers
The event's id. A retry, a redelivery or a replay repeats it, so dedupe on it.
Also the webhook-id header.
^evt_[0-9a-z]{26}$When this attempt was sent, in Unix seconds. Reject a request more than 5 minutes off your clock.
Space-separated signatures, each v1, and the base64 HMAC-SHA256 of
{webhook-id}.{webhook-timestamp}.{body}, keyed by the endpoint's
secret: the part after whsec_, base64-decoded. While a rotated
secret is still valid there is one signature per secret; accept the
request if any of them matches.
Body
Also the webhook-id header.
^evt_[0-9a-z]{26}$When the event was recorded.
Show child attributes
Show child attributes
True on every event a test send sends, webhook.test or a sample of a named type. Absent otherwise, and never in the feed.
Response
Received. Anything else, or no answer within 15 seconds, is retried.