Webhook events · contacts
contact.import.completed/1
Contact import finished. A bulk import finished, with its totals.
Payload
We POST this JSON to your endpoint. Answer any 2xx within 30 seconds. The same id arrives again on a retry — skip ones you have handled.
| Field | Type | What it is |
|---|---|---|
| idrequired | string | Event id. The same on every retry: use it to skip duplicates.pattern ^evt_[0-9A-HJKMNP-TV-Z]{26}$ |
| typerequired | string | Event type.always contact.import.completed |
| versionrequired | string | Payload version.always 1 |
| api_versionrequired | string | The endpoint's API version. |
| occurred_atrequired | string | When it happened.date-time |
| company_idrequired | integer | Your workspace id. |
| datarequired | object | |
| batch_id | string or null | Import id. |
| file_name | string or null | File name, for file imports. |
| totalsrequired | object | |
| createdrequired | integer | Created. |
| failedrequired | integer | Failed. |
| processedrequired | integer | Processed. |
| updatedrequired | integer | Updated. |
| started_at | string or null | ISO 8601. |
| finished_at | string or null | ISO 8601. |
Example
{
"id": "evt_01J8Z7BZQ4F6G8J2K5N7Q9S1VC",
"type": "contact.import.completed",
"version": "1",
"api_version": "2026-10-01",
"occurred_at": "2026-09-24T09:20:00Z",
"company_id": 1001,
"data": {
"batch_id": "imp_2211",
"file_name": null,
"totals": {
"created": 820,
"failed": 3,
"processed": 1000,
"updated": 177
},
"started_at": "2026-09-23T01:00:00Z",
"finished_at": "2026-09-23T01:01:12Z"
}
}Headers
Webhook-Signature:t=…,v1=…— how to check itWebhook-Id(alsoWebhook-Event-Id): the event id, the same on every retry — skip ones you have handledWebhook-Delivery-Id: this delivery attempt, new on every try