Errors & Pagination

This page covers two things every integration needs to handle: what a failed request looks like, and how to page through endpoints that return lists.

Errors & Pagination This page covers two things every integration needs to handle: what a failed request looks like, and how to page through endpoints that return lists. The error envelope When a request fails, the response is always JSON with the same shape — a success flag set to false , a human-readable error message, and a numeric error_code that matches the HTTP status: { "success": false, "error": "Invalid cursor", "error_code": 400 } Because success and error_code are always present, you can branch on them without inspecting raw HTTP status codes if you prefer. A successful response always has success: true . Status codes Status error_code Meaning What to do 200 — Success Read the response data. 201 — Resource created Save the returned ID (e.g. campaign_id , contactId ). 400 400 Bad request A parameter is missing or invalid. Read the error message and fix the request. 401 401 Unauthorized Your API key is missing or invalid. Check the key and how you are sending it — see Authentication . 403 403 Forbidden Your plan does not include API access. See API Access or contact hello@vitiv.ai . 404 404 Not found The resource (e.g. a contact, campaign, or task ID) does not exist on your account. 409 409 Conflict The resource already exists — for example, creating a contact whose phone number is already on your account. 429 429 Rate limited You have exceeded 120 requests per minute. Back off and retry shortly. 500 500 Server error Something went wrong on our side. Retry after