API ReferencePartner API

Events & webhooks

GET
/v1/events

Lists the events emitted for this API client, newest first. Event list and detail responses return the exact JSON envelope delivered to webhook endpoints, so the two views always round-trip. Events are retained for 30 days.

Authorization

bearerAuth
AuthorizationBearer <token>

Partner API key, sent as Authorization: Bearer <api key>.

In: header

Query Parameters

limit?integer

Maximum number of items to return. Values above 100 are clamped to 100.

Range1 <= value <= 100
Default50
cursor?string

Opaque pagination cursor from the previous page's next_cursor.

type?string

Return only events of this type (e.g. file.ready).

Value in

  • "file.ready"
  • "file.failed"
  • "evaluation.started"
  • "evaluation.progress"
  • "evaluation.completed"
  • "evaluation.failed"
  • "evaluation.canceled"
  • "document_slot.updated"
submission_id?string

Return only events belonging to this submission.

Formatuuid

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/events"
{  "data": [    {      "id": "evt_2f0d9c62-6f6e-4a7e-8f8e-2d5c7a1b0c3d",      "type": "file.ready",      "created_at": "2019-08-24T14:15:22Z",      "api_client_id": "b88c5716-2ef6-47d7-b7e7-040a47fb6966",      "data": {        "upload": {          "id": "7d9f2b7e-1f6e-4a3b-9a5d-0c1e2f3a4b5c",          "external_file_id": "payslip-2026-04",          "upload_status": "ready",          "file_id": "8a0cfb4f-ddc9-436d-91bb-75133e01d0dc",          "document_slot_id": "942421c5-3e28-44c2-9b31-6f0f23d5aa11",          "filename": "payslip-april.pdf",          "content_type": "application/pdf",          "failure": null,          "created_at": "2026-04-03T09:21:11Z",          "submission_id": "945dfedc-ad7f-4af7-b20c-06082ffa3cb3",          "external_submission_id": "loan-2026-000451"        }      }    }  ],  "next_cursor": "string"}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
GET
/v1/events/{event_id}

Returns one event — the same envelope delivered over webhooks — plus the per-endpoint delivery timeline (attempt history, retry state) that the wire delivery cannot carry.

Authorization

bearerAuth
AuthorizationBearer <token>

Partner API key, sent as Authorization: Bearer <api key>.

In: header

Path Parameters

event_id*string

The event id, including the evt_ prefix.

Match^evt_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/v1/events/evt_2f0d9c62-6f6e-4a7e-8f8e-2d5c7a1b0c3d"
{  "id": "evt_2f0d9c62-6f6e-4a7e-8f8e-2d5c7a1b0c3d",  "type": "file.ready",  "created_at": "2019-08-24T14:15:22Z",  "api_client_id": "b88c5716-2ef6-47d7-b7e7-040a47fb6966",  "data": {    "upload": {      "id": "7d9f2b7e-1f6e-4a3b-9a5d-0c1e2f3a4b5c",      "external_file_id": "payslip-2026-04",      "upload_status": "ready",      "file_id": "8a0cfb4f-ddc9-436d-91bb-75133e01d0dc",      "document_slot_id": "942421c5-3e28-44c2-9b31-6f0f23d5aa11",      "filename": "payslip-april.pdf",      "content_type": "application/pdf",      "failure": null,      "created_at": "2026-04-03T09:21:11Z",      "submission_id": "945dfedc-ad7f-4af7-b20c-06082ffa3cb3",      "external_submission_id": "loan-2026-000451"    }  },  "deliveries": [    {      "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",      "endpoint_url": "http://example.com",      "delivery_status": "pending",      "attempt_count": 0,      "next_retry_at": "2019-08-24T14:15:22Z",      "last_attempted_at": "2019-08-24T14:15:22Z",      "attempts": [        {          "attempt_number": 1,          "attempted_at": "2019-08-24T14:15:22Z",          "outcome": "pending",          "response_status": 0,          "transport_error": "string",          "response_time_ms": 0        }      ]    }  ]}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
POST
/v1/events/{event_id}/redeliver

Requeues the event for delivery. Without a body, every non-succeeded delivery (failed_retryable, failed_permanent, abandoned) is requeued; pass endpoint_id to requeue only that endpoint's delivery, regardless of its state. Redelivery does not reset the attempt history — new attempts append to it. Fails with 422 invalid_field when the event has no matching delivery to requeue.

Authorization

bearerAuth
AuthorizationBearer <token>

Partner API key, sent as Authorization: Bearer <api key>.

In: header

Path Parameters

event_id*string

The event id, including the evt_ prefix.

Match^evt_[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$

Request Body

application/json

Optional target selection.

TypeScript Definitions

Use the request body type in TypeScript.

Optional target selection for a redelivery.

Response Body

application/json

application/json

application/json

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/v1/events/evt_2f0d9c62-6f6e-4a7e-8f8e-2d5c7a1b0c3d/redeliver" \  -H "Content-Type: application/json" \  -d '{}'
{  "id": "evt_2f0d9c62-6f6e-4a7e-8f8e-2d5c7a1b0c3d",  "type": "file.ready",  "created_at": "2019-08-24T14:15:22Z",  "api_client_id": "b88c5716-2ef6-47d7-b7e7-040a47fb6966",  "data": {    "upload": {      "id": "7d9f2b7e-1f6e-4a3b-9a5d-0c1e2f3a4b5c",      "external_file_id": "payslip-2026-04",      "upload_status": "ready",      "file_id": "8a0cfb4f-ddc9-436d-91bb-75133e01d0dc",      "document_slot_id": "942421c5-3e28-44c2-9b31-6f0f23d5aa11",      "filename": "payslip-april.pdf",      "content_type": "application/pdf",      "failure": null,      "created_at": "2026-04-03T09:21:11Z",      "submission_id": "945dfedc-ad7f-4af7-b20c-06082ffa3cb3",      "external_submission_id": "loan-2026-000451"    }  },  "deliveries": [    {      "endpoint_id": "e9ce0d4f-d433-423d-9497-4c000544106c",      "endpoint_url": "http://example.com",      "delivery_status": "pending",      "attempt_count": 0,      "next_retry_at": "2019-08-24T14:15:22Z",      "last_attempted_at": "2019-08-24T14:15:22Z",      "attempts": [        {          "attempt_number": 1,          "attempted_at": "2019-08-24T14:15:22Z",          "outcome": "pending",          "response_status": 0,          "transport_error": "string",          "response_time_ms": 0        }      ]    }  ]}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}
{  "error": {    "code": "invalid_field",    "message": "external_submission_id must not be empty",    "param": "external_submission_id",    "request_id": "req_9b2cf1f4-6f6e-4a7e-8f8e-2d5c7a1b0c3d"  }}

Sent when an uploaded file finished processing successfully. See the Event schema description for the delivery contract (signature header, timeout, retries).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/file.ready

Sent when an uploaded file failed processing; data.upload.failure carries the reason.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/file.failed

Sent when a queued evaluation begins processing.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/evaluation.started

Progress events are throttled server-side; not every internal step emits one.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/evaluation.progress

data.evaluation.result carries the summary (outcome, recommendation, risk band).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/evaluation.completed

data.evaluation.failure carries the reason.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/evaluation.failed

Sent when a queued or running evaluation was canceled, e.g. because the submission was canceled or deleted.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/evaluation.canceled

Sent when a document slot's review status changes — including advisor decisions (accepted, rejected, needs_review) that no API call of the partner triggered. Subscribe to this event to drive re-upload flows instead of polling get_submission.

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

Example Requests

POST/document_slot.updated