Skip to main content
All inbound webhook endpoints return standard HTTP status codes. Error bodies are JSON.

Error codes


Error body

All errors return a JSON body with an error field:

Async endpoints and silent failures

For async endpoints (create-with-ai, create), validation happens in the background worker — not at the HTTP layer. This means:
  • A 200 response does not guarantee a contact was created
  • If unstructured_text is empty, no contact work is performed despite a successful response
  • If none of full_name, phone_number, or contact_email are present on a structured create, the worker returns early without creating
Do not treat a 200 on an async endpoint as confirmation that a contact exists. If you need to verify creation, follow up with a find request.

Duplicate events

Async endpoints deduplicate payloads using a hash of the request body. If the same payload is received more than once:
  • The response is still 200
  • acknowledged is true
  • eventId is omitted
This is not an error — it is expected behavior. Use the presence of eventId to distinguish new events from duplicates.