Batch Completion Webhook
batch.completed event to a URL you control via HTTP POST — no polling required. Configure it in Developers → Webhooks(it's optional).Request Parameters
| Name | Type | Description |
|---|---|---|
eventRequired | string | Always "batch.completed". |
batch_idRequired | string | The batch that finished. |
job_idRequired | string | The job the batch belongs to. |
statusRequired | string | One of completed, failed, or partial. |
total_candidatesRequired | integer | Candidates in the batch. |
successRequired | integer | Successfully scored candidates. |
failedRequired | integer | Candidates that failed scoring. |
resumes_scoredRequired | integer | Resumes scored (equals success). |
timestampRequired | string | ISO-8601 delivery time. |
The three status levels
The payload is the same shape every time — only the status field and the success / failed counts change. Branch on status for a quick decision, and read success, failed and total_candidates for the exact breakdown.
success === total_candidates · failed === 0Every candidate in the batch was scored successfully.
Next: Fetch the full ranking — GET /v1/batch/{batch_id}/rank.
failed > 0 · the rest are in successThe batch finished, but one or more candidates could not be scored (e.g. an unreadable resume). This is also what you receive when every candidate failed but the batch ran to the end.
Next: Read the scored candidates from /rank; use success / failed to see how many were dropped.
success === 0The batch produced no scores at all — it timed out before a single candidate reached a terminal state.
Next: Nothing to rank — check your inputs (resume URLs / parsing) and re-submit the batch.
Verify the signature
Recompute the HMAC-SHA256 of the raw request body with your signing secret (your EVAL_WEBHOOK_SECRET) and compare it (constant-time) to the X-EVAL-Signature header.
Delivery & retries
- Respond with any 2xx status to acknowledge. Non-2xx (or a timeout) is retried a few times with backoff.
- Each request times out after ~10 seconds — return quickly and process asynchronously.
- Delivery is not guaranteed exactly-once; de-duplicate on batch_id if needed.
- If the secret leaks, regenerate it in Developers → Webhooks — the old one stops working immediately.
Pro Tip
Every delivery is signed with X-EVAL-Signature: sha256=… — an HMAC of the raw body using your signing secret. Verify it before trusting the event (see the snippets below).