> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.emtelligent.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.emtelligent.com/_mcp/server.

# Job finished

POST 

POSTed to the job's `callback_url` when it reaches `succeeded`, `failed` or `canceled`. Carries no document or results: fetch them with `GET /v1/jobs/{id}/result`. Verify the `Formfill-Signature: t=<unix>,v1=<hex>` header: HMAC-SHA256 of `"<t>.<raw body>"` with your organization's signing secret; reject timestamps older than 5 minutes. Respond 2xx; otherwise delivery is retried with backoff for up to 12 hours.

Reference: https://docs.emtelligent.com/formfill/api/webhooks/job-finishedjob-finished-post

## Request

### Payload

- `event` ("job.finished", required)
- `id` (string, required)
- `type` (enum, required)
  - Allowed values: `questionnaire`, `questions`
- `status` (enum, required)
  - Allowed values: `succeeded`, `failed`, `canceled`
- `completed_at` (string, required, nullable)
- `expires_at` (string, required)