Errors & troubleshooting
HTTP errors, request debugging, and retry behavior.
HTTP status codes
| Status | Meaning | Next step |
|---|---|---|
| 400 | Invalid request | Check required fields, date formats, types, and valid JSON. attendee_emails must be an array of non-empty strings; a non-empty list cannot be combined with media_url. |
| 401 | Data Export authentication failed | Send the raw key in Authorization, without Bearer. |
| 403 | CRM gateway rejected the key | Check x-api-key and confirm the key is valid. |
| 404 | Missing route or record | Verify method, path, identifier, and access scope. |
| 409 | Appointment is linked to a recording | Do not repeatedly retry the delete request. |
| 422 | CRM request cannot be processed | Read the response body; confirm the rep, organization, event, or recording. Appointment creation/updates require at least one supplied attendee to resolve in the key's organization. With a non-empty attendee_emails list, removed and hidden users are skipped. |
| 429 | Too many requests | Back off before retrying. |
| 5xx | Server error | Retry transient failures with bounded exponential backoff. |
Invalid JSON in request body
This Data Export error means the body could not be parsed, before date or email validation runs. Use straight double quotes, remove trailing commas, and ensure the JSON is an object. A smart quote at the end of an email is not a closing JSON quote.
python3 -m json.tool request.jsonEvery POST endpoint page has a browser-only JSON checker. It does not upload your body or call the API. A syntactically valid body can still fail field validation.
{
"message": "Invalid JSON in request body"
}For Validation failed, read errors[].path and errors[].message. Dates must end in Z, users must contain emails, and page/limit must be numbers.
Custom API Debugger
Admins can inspect CRM ingestion in Settings → Developer → API debugger. Enter your API key, find the appointment by rep, client, or title, and open its details to inspect the stored payload and timestamps.
If the event is missing, check the original HTTP response and request timestamps.
Debugger walkthroughRetries and limits
For 429 and transient 5xx responses, use bounded exponential backoff with jitter. Respect Retry-After if the response includes it. Fix invalid request data and authentication before retrying 4xx errors.
Contact your account manager before high-volume ingestion or bulk exports to confirm applicable limits. Don’t assume the same rate limit applies to both APIs.