Base URL and response format
- Production base URL:
https://usechatting.com/api/zapier - Authentication header:
X-API-Key: <your-api-key> - Success shape:
{ "ok": true, ... } - Error shape:
{ "ok": false, "error": "<code>" }
HTTP
GET /api/zapier/me
X-API-Key: <your-api-key>
200 OK
{
"ok": true,
"workspace_id": "owner_123",
"team_name": "Acme Team",
"owner_email": "owner@example.com"
}
401 Unauthorized
{
"ok": false,
"error": "api-key-missing"
}Authentication and idempotency
- Required auth header:
X-API-Key: <your-api-key> - Auth check endpoint:
GET /api/zapier/me - Missing key error:
api-key-missing - Invalid or revoked key error:
api-key-invalid
Create-style actions also accept Idempotency-Key or X-Idempotency-Key. Reusing the same key with a different payload returns idempotency-key-conflict.
HTTP
X-API-Key: chatting_live_...
Idempotency-Key: 0b0e6a45-92b4-4da0-b0a9-6e612a8d02faReady to talk to your visitors?
Stop losing customers to slow responses. Start with Chatting today, free.
Try Chatting freeTrigger subscriptions and sample endpoints
- Supported events:
conversation.created,conversation.resolved,contact.created,tag.added - Subscription endpoint:
POST /api/zapier/webhooks/subscribe - Unsubscribe endpoint:
DELETE /api/zapier/webhooks/{id} - Sample endpoints return recent records for Zapier editor mapping
Endpoints
Subscribe: POST /api/zapier/webhooks/subscribe
Unsubscribe: DELETE /api/zapier/webhooks/{id}
Conversation sample: GET /api/zapier/conversations?limit=1
Resolved sample: GET /api/zapier/conversations?limit=1&event=conversation.resolved
Tag-added sample: GET /api/zapier/conversations?limit=1&event=tag.added
Contact sample: GET /api/zapier/contacts?limit=1HTTP
POST /api/zapier/webhooks/subscribe
Content-Type: application/json
X-API-Key: <your-api-key>
{
"event": "conversation.created",
"target_url": "https://hooks.zapier.com/hooks/catch/123/abc"
}
201 Created
{
"ok": true,
"id": "wh_123",
"event": "conversation.created",
"active": true
}HTTP
DELETE /api/zapier/webhooks/wh_123
X-API-Key: <your-api-key>
200 OK
{
"ok": true,
"id": "wh_123",
"active": false
}Action endpoints
- Create contact:
POST /api/zapier/contacts - Add tag to contact:
POST /api/zapier/contacts/{id}/tags - Send message:
POST /api/zapier/conversations/{id}/messages
HTTP
POST /api/zapier/contacts
Content-Type: application/json
X-API-Key: <your-api-key>
{
"email": "lead@example.com",
"name": "Ava Brooks",
"phone": "+1 555 111 2222",
"company": "Acme",
"status": "lead",
"tags": ["vip", "demo"],
"customFields": {
"crm_owner": "tina"
}
}
201 Created
{
"ok": true,
"id": "contact_123",
"email": "lead@example.com",
"name": "Ava Brooks",
"created_at": "2026-04-09T00:00:00.000Z"
}HTTP
POST /api/zapier/contacts/contact_123/tags
Content-Type: application/json
X-API-Key: <your-api-key>
{
"tag": "vip"
}
200 OK
{
"ok": true,
"id": "contact_123",
"tag": "vip"
}HTTP
POST /api/zapier/conversations/conv_123/messages
Content-Type: application/json
X-API-Key: <your-api-key>
{
"message": "Thanks, we got your message.",
"sender": "system"
}
201 Created
{
"ok": true,
"id": "msg_123",
"conversation_id": "conv_123",
"sender": "system",
"created_at": "2026-04-09T00:00:00.000Z"
}Common error codes
The Zapier API keeps errors intentionally short and machine-readable so the Zapier editor can surface clear setup issues. These are the main codes to expect while building and reviewing the integration.
api-key-missing— theX-API-Keyheader is missingapi-key-invalid— the API key prefix exists but the key does not verifyinvalid-subscription— the trigger event ortarget_urlis invalidmissing-email—POST /contactswas called without an emailworkspace-site-missing— the workspace has no primary site to attach contacts tocontact-not-found— a newly created contact could not be loaded backcontact-site-forbidden— the contact write target is outside the workspacecontact-save-failed— contact creation failed for a non-validation reasonmissing-tag—POST /contacts/{id}/tagswas called without a tagmissing-message—POST /conversations/{id}/messageswas called without a messagenot-found— the requested contact, conversation, or webhook id does not existidempotency-key-conflict— the same idempotency key was reused with a different payload
Sample trigger payloads
Chatting sends flattened data__... fields for easy Zapier mapping, plus the nested data object for integrations that want the original grouped structure.
JSON
{
"event": "conversation.created",
"timestamp": "2026-04-08T00:50:00.000Z",
"data__conversation_id": "conv_abc123",
"data__visitor_email": "visitor@example.com",
"data__visitor_name": "Ava Brooks",
"data__page_url": "https://www.usechatting.com/pricing",
"data__first_message": "Do you have a free plan?",
"data__assigned_to": null,
"data": {
"conversation_id": "conv_abc123",
"visitor_email": "visitor@example.com",
"visitor_name": "Ava Brooks",
"page_url": "https://www.usechatting.com/pricing",
"first_message": "Do you have a free plan?",
"tags": [],
"assigned_to": null
}
}JSON
{
"event": "conversation.resolved",
"timestamp": "2026-04-08T00:50:00.000Z",
"data__conversation_id": "conv_abc123",
"data__visitor_email": "visitor@example.com",
"data__resolved_by": "owner@usechatting.com",
"data__message_count": 8,
"data__duration_seconds": 420,
"data": {
"conversation_id": "conv_abc123",
"visitor_email": "visitor@example.com",
"resolved_by": "owner@usechatting.com",
"message_count": 8,
"duration_seconds": 420
}
}JSON
{
"event": "contact.created",
"timestamp": "2026-04-08T01:30:00.000Z",
"data__contact_id": "cnt_abc123",
"data__email": "visitor@example.com",
"data__name": "Ava Brooks",
"data__company": "Acme Corp",
"data__source": "chat_form",
"data": {
"contact_id": "cnt_abc123",
"email": "visitor@example.com",
"name": "Ava Brooks",
"company": "Acme Corp",
"source": "chat_form"
}
}JSON
{
"event": "tag.added",
"timestamp": "2026-04-08T02:00:00.000Z",
"data__conversation_id": "conv_abc123",
"data__tag": "vip",
"data__added_by": "owner@usechatting.com",
"data": {
"conversation_id": "conv_abc123",
"tag": "vip",
"added_by": "owner@usechatting.com"
}
}