Error Codes

All API errors follow a consistent response shape:

{
"code": "insufficient_balance",
"status": 402,
"title": "Insufficient Balance",
"detail": "Account balance is too low for this operation — add funds to continue",
"requestId": "019ce738-dfc6-7740-9fc8-db47b7230650"
}
FieldTypeDescription
codestringMachine-readable error identifier — use this for programmatic handling
statusnumberHTTP status code
titlestringShort human-readable summary
detailstringDetailed explanation of what went wrong
requestIdstringUnique request ID for support and debugging

When a validation_failed error occurs, an additional errors array is included with per-field details:

{
"code": "validation_failed",
"status": 400,
"title": "Validation Failed",
"detail": "One or more fields failed validation",
"requestId": "...",
"errors": [
{
"field": "email",
"code": "invalid_email_format",
"message": "Email format is invalid (must conform to RFC 5322)"
}
]
}

Api Keys

CodeStatusDescription
api_key_expired401API Key Expired — This API key has passed its expiration date. Create a new API key to restore access.
api_key_invalid401API Key Invalid — The API key is not recognized or has been deleted. Create a new API key from your dashboard.
api_key_revoked401API Key Revoked — This API key has been revoked and can no longer be used. Create a new API key if needed.
api_key_insufficient_scope403API Key Insufficient Scope — This API key does not have the required scope for this operation. Create a new key with the appropriate scopes, or use a JWT.
api_key_ip_restricted403API Key IP Restricted — The request IP address is not in this API key’s allowed IP list. Update the key’s IP restrictions or use a different key.
api_key_not_allowed403API Key Not Allowed — API key authentication is not permitted on this endpoint. Use a JWT Bearer token instead.
api_key_limit_reached422API Key Limit Reached — You have reached the maximum number of API keys for this account. Delete unused keys before creating new ones.

Authentication

CodeStatusDescription
account_header_missing400Account Header Missing — Account-scoped requests authenticated with JWT require the X-Account-Id header. Use GET /accounts to list accessible accounts, or include the header from the frontend client state.
email_already_verified400Email Already Verified — This email address has already been verified. No further action is needed.
email_verification_code_expired400Email Verification Code Expired — The email verification code has expired (codes are valid for 15 minutes). Request a new verification code.
email_verification_code_invalid400Email Verification Code Invalid — The email verification code is incorrect. Check the code and try again, or request a new one.
email_verification_code_used400Email Verification Code Used — This email verification code has already been used. Request a new code if you need to verify again.
mfa_already_enabled400MFA Already Enabled — Multi-factor authentication is already enabled on this account. No further setup is needed.
mfa_code_invalid400MFA Code Invalid — The MFA code is incorrect or has expired. Enter the current code from your authenticator app.
mfa_not_enabled400MFA Not Enabled — Multi-factor authentication is not enabled on this account. Call the MFA setup endpoint first.
mfa_not_setup400MFA Not Setup — MFA setup has not been initiated. Call the MFA setup endpoint to receive a TOTP secret before verifying.
mfa_token_invalid400MFA Token Invalid — The MFA token is invalid or has expired. Log in again and complete the MFA challenge.
password_current_incorrect400Current Password Incorrect — The current password you provided is incorrect. Try again with the correct password.
password_reset_token_expired400Password Reset Token Expired — The password reset token has expired (tokens are valid for 1 hour). Request a new password reset email.
password_reset_token_invalid400Password Reset Token Invalid — The password reset token is invalid or corrupted. Request a new password reset email.
password_reset_token_used400Password Reset Token Used — This password reset token has already been used. Request a new password reset email if needed.
password_same_as_current400Password Same As Current — Your new password must be different from your current password. Choose a different password.
phone_already_verified400Phone Already Verified — This phone number has already been verified. No further action is needed.
phone_number_missing400Phone Number Missing — No phone number is associated with this account. Add a phone number before attempting verification.
phone_verification_code_expired400Phone Verification Code Expired — The phone verification code has expired (codes are valid for 10 minutes). Request a new verification code.
phone_verification_code_invalid400Phone Verification Code Invalid — The phone verification code is incorrect. Check the code and try again, or request a new one.
phone_verification_code_used400Phone Verification Code Used — This phone verification code has already been used. Request a new code if you need to verify again.
invalid_credentials401Invalid Credentials — The email and password combination does not match any account. Double-check your credentials or use the forgot password flow.
refresh_token_invalid401Refresh Token Invalid — The refresh token is invalid, has been revoked, or has expired. Log in again to obtain new tokens.
token_expired401Token Expired — Your access token has expired. Use your refresh token to obtain a new access token, or log in again.
token_invalid401Token Invalid — The provided token could not be validated. Clear your stored tokens and log in again.
token_missing401Token Missing — This endpoint requires authentication. Include a valid Bearer token in the Authorization header.
unauthorized401Unauthorized — This endpoint requires authentication. Include a valid Bearer token or API key in your request.

Authorization

CodeStatusDescription
account_access_denied403Account Access Denied — You do not have permission to access this account. Verify the account ID or request access from the account owner.
account_suspended403Account Suspended — This account has been suspended by an administrator. Contact support to resolve the suspension.
forbidden403Forbidden — You do not have permission to perform this action. Contact the account owner for access.
insufficient_permissions403Insufficient Permissions — Your role does not have sufficient permissions for this action. Contact your organization owner or admin.
not_invitation_recipient403Not Invitation Recipient — This invitation was sent to a different user. Only the intended recipient can accept or decline it.

Business Rules

CodeStatusDescription
business_rule_violation422Business Rule Violation — The request violates a business rule. Check the error detail for specifics.
invalid_state_transition422Invalid State Transition — This state transition is not allowed from the resource’s current state. Check the resource status before retrying.
unprocessable_entity422Unprocessable Entity — The request is well-formed but cannot be processed. Check the error detail for the specific reason.

Calls

CodeStatusDescription
flow_not_published400Flow Not Published — The flow must be published before it can be used for calls. Publish the flow from the flow editor.
phone_number_cannot_initiate_calls400Phone Number Cannot Initiate Calls — This phone number can only receive calls. WhatsApp numbers do not support outbound calling yet — choose a phone number with outbound call capability.
phone_number_not_active400Phone Number Not Active — This phone number is not in active status. Activate the phone number from your dashboard before using it for calls.
phone_number_not_verified400Phone Number Not Verified — This phone number must be verified before making outbound calls. Complete the verification process first.
provider_call_rejected400Provider Call Rejected — The telephony provider rejected the call to this number. The destination may not be enabled for outbound calling from this account.
call_already_completed422Call Already Completed — This call has already ended and cannot be modified. Fetch the call details to see the final status.
concurrent_call_limit_exceeded422Concurrent Call Limit Exceeded — You have reached the maximum number of simultaneous active calls for your account. Wait for active calls to end or upgrade your plan.
contact_on_dnc_list422Contact On DNC List — This phone number is on your account’s Do Not Call list. Remove it from the DNC list before calling, or skip this contact.
daily_call_limit_exceeded422Daily Call Limit Exceeded — Your daily call quota has been exhausted. The limit resets at midnight UTC, or upgrade your plan for higher limits.
outside_callable_hours422Outside Callable Hours — This call was blocked because the recipient’s local time is outside legal calling hours (8 AM–9 PM). Schedule the call for an appropriate time.

Conflict

CodeStatusDescription
cannot_delete_has_dependencies409Cannot Delete Has Dependencies — This resource has dependent resources that must be removed first. Check which resources reference it before deleting.
conflict409Conflict — The request conflicts with the current state of the resource. Fetch the latest state and retry.
contact_phone_already_exists409Contact Phone Already Exists — A contact with this phone number already exists on this account. Open the existing contact instead, or use a different number.
email_already_exists409Email Already Exists — An account with this email address already exists. Try logging in instead, or use a different email to register.
phone_already_exists409Phone Already Exists — An account with this phone number already exists. Try logging in instead, or use a different number.
resource_already_exists409Resource Already Exists — A resource with these properties already exists. Use a different identifier or update the existing resource.

Flows

CodeStatusDescription
flow_has_connected_phones400Flow Has Connected Phones — This flow cannot be deleted because phone numbers are still connected to it. Disconnect all phone numbers first.
flow_structure_invalid400Flow Structure Invalid — The flow definition contains structural errors. Check the errors array in the response for specific node and edge issues.
flow_version_invalid400Flow Version Invalid — The flow version format is invalid. Use semantic versioning format (e.g., 1.0.0).
flow_function_not_found404Flow Function Not Found — No flow function was found with this ID. Verify the function ID or list functions to find the correct one.
flow_function_name_exists409Flow Function Name Already Exists — A flow function with this name already exists in your account. Choose a different name.
flow_name_already_exists409Flow Name Already Exists — A flow with this name already exists in your account. Choose a different name.
flow_version_conflict409Flow Version Conflict — The flow has been modified since you last loaded it. Fetch the latest version and try again.
flow_generation_failed502Flow Generation Failed — The AI could not produce a valid flow from this description. Rephrase the request with a clearer goal, or build the flow manually in the editor.

Integrations

CodeStatusDescription
meta_form_already_mapped409Form Already Mapped — This lead form already has a mapping on the integration. Update or delete the existing mapping instead.
meta_page_already_connected409Page Already Connected — This Facebook page is already connected to an account. Disconnect the existing integration first, or pick a different page.
meta_lead_unrecoverable422Meta Lead Unrecoverable — This lead can’t be retried. It was submitted without a valid phone number, so re-fetching it from Meta won’t help.
meta_api_error502Meta API Error — Meta’s API rejected the request. Check the integration status and re-connect if the page tokens have expired.
meta_not_configured503Meta Integration Not Configured — The Meta (Facebook) integration is not configured on this deployment. Contact your administrator to enable it.

Not Found

CodeStatusDescription
campaign_not_found404Campaign Not Found — No campaign was found with this ID. Verify the campaign ID or list campaigns to find the correct one.
invitation_not_found404Invitation Not Found — The invitation does not exist or has already been accepted, declined, or revoked.
not_found404Not Found — The requested resource does not exist or has been deleted. Verify the resource ID.
resource_not_found404Resource Not Found — The requested resource does not exist or has been deleted. Verify the resource ID.
schedule_not_found404Schedule Not Found — No call schedule was found with this ID. Verify the schedule ID or list schedules to find the correct one.

Oauth

CodeStatusDescription
cannot_unlink_only_auth400Cannot Unlink Only Auth Method — This is your only authentication method. Set a password or link another OAuth provider before unlinking this one.
invalid_o_auth_state400Invalid OAuth State — The OAuth state parameter is invalid, expired, or missing. Restart the OAuth flow from the beginning.
o_auth_not_linked404OAuth Not Linked — No OAuth connection exists for this provider on your account. Link the provider first before attempting to unlink.
o_auth_already_linked409OAuth Already Linked — This OAuth account is already linked to a different user. Unlink it from the other account first, or use a different OAuth account.
provider_already_connected409Provider Already Connected — You already have this OAuth provider connected. Unlink the existing connection before linking a new one.
o_auth_provider_error502OAuth Provider Error — The OAuth provider (e.g., Google) returned an error during authentication. Try again, or check the provider’s status page.

Organizations

CodeStatusDescription
already_organization_member409Already Organization Member — This user is already a member of the organization. No invitation is needed.
invitation_expired410Invitation Expired — This invitation has expired and is no longer valid. Ask the organization admin to send a new invitation.
invitation_not_pending422Invitation Not Pending — This invitation has already been accepted, declined, or revoked. It can no longer be acted upon.
organization_suspended422Organization Suspended — This organization is suspended and cannot accept new members. Contact the organization owner.

Payment

CodeStatusDescription
payment_method_card_only400Payment Method Card Only — Only card payment methods are currently supported. Add a credit or debit card to proceed.
feature_not_available402Feature Not Available — This feature is not included in your current plan. Upgrade to a higher tier to access it.
insufficient_balance402Insufficient Balance — Your account balance is too low for this operation. Add funds from the billing page to continue.
payment_failed402Payment Failed — The payment charge failed (card declined, insufficient funds, or payment processor error). Try a different payment method.
payment_required402Payment Required — This feature requires payment. Add a payment method and ensure your account has sufficient balance.
subscription_required402Subscription Required — An active subscription is required for this feature. Upgrade your plan to access it.

Phones

CodeStatusDescription
byoc_only400BYOC Only — This operation is only available for BYOC (Bring Your Own Carrier) providers. It does not apply to system Twilio numbers.
phone_number_already_connected400Phone Number Already Connected — This phone number is already connected to a flow. Disconnect it from the current flow before connecting to a new one.
phone_number_not_connected400Phone Number Not Connected — This phone number is not connected to any flow. Connect it to a flow to enable inbound call handling.
phone_provider_not_active400Phone Provider Not Active — The phone provider is not in active status. Activate the provider before using its phone numbers.
phone_verification_not_started400Phone Verification Not Started — No caller ID verification is in progress for this number. Start a new verification before checking the status.
provider_must_be_sip400Provider Must Be SIP — This operation is only available for SIP-type providers. Verify the provider type before proceeding.
twilio_credentials_required400Twilio Credentials Required — Twilio account credentials (Account SID and Auth Token) are required for this provider type. Provide them in the request.
verification_only_for_sip400Verification Only For SIP — Caller ID verification is only supported for SIP phone numbers. System Twilio numbers are verified automatically.
phone_already_registered409Phone Already Registered — This phone number is already registered in the system. Use a different number or check existing phone numbers.
phone_number_in_use409Phone Number In Use — This phone number is already in use by another user. Use a different phone number.
cannot_delete_system_provider422Cannot Delete System Provider — System-managed providers cannot be deleted. Only user-created SIP and BYOC providers can be removed.

Promotions

CodeStatusDescription
payment_method_required403Payment Method Required — A payment method on file is required before claiming this promotion. Add a card in billing settings first.
user_phone_not_verified403Phone Verification Required — Your phone number must be verified before claiming this promotion. Verify your phone in profile settings first.
coupon_not_found404Coupon Not Found — No coupon exists with this code. Check the code for typos.
coupon_already_redeemed409Coupon Already Redeemed — You have already redeemed this coupon. Each coupon can be redeemed once per user.
promotion_not_eligible409Promotion Not Eligible — This promotion cannot be claimed with the provided details. Contact support if you believe this is an error.
trial_already_claimed409Trial Already Claimed — The trial credit has already been claimed for this user. It can only be claimed once.
coupon_not_redeemable410Coupon Not Redeemable — This coupon is no longer redeemable — it is inactive, outside its redemption window, or fully redeemed.

Rate Limiting

CodeStatusDescription
assistant_quota_exceeded429Assistant Quota Exceeded — Your assistant usage allowance for this period is exhausted. It resets at meta.resetsAt; topping up your balance also earns extra assistant allowance.
queue_full429Queue Full — The call queue has reached maximum capacity. Wait for active calls to complete before queuing more.
rate_limit_exceeded429Rate Limit Exceeded — Too many requests. Wait for the duration specified in meta.retryAfterSecs before retrying.

Scheduling

CodeStatusDescription
invalid_cron_expression400Invalid Cron Expression — The cron expression is malformed. Use standard 5-field cron syntax (minute hour day month weekday).
invalid_timezone400Invalid Timezone — The timezone identifier is not recognized. Use a valid IANA timezone (e.g., America/New_York, Europe/Istanbul).
campaign_no_contacts422Campaign Has No Contacts — This campaign has no contacts to call. Add contacts before starting the campaign.
campaign_not_draft422Campaign Not In Draft State — This campaign is not in draft state and cannot be modified. Only draft campaigns can be edited.
schedule_already_paused422Schedule Already Paused — This schedule is already paused. No action is needed, or resume it before pausing again.
schedule_not_paused422Schedule Not Paused — This schedule is not paused and cannot be resumed. Only paused schedules can be resumed.

Server

CodeStatusDescription
recording_not_available400Recording Not Available — No recording is available for this call. The call may not have been recorded, or the recording has been deleted.
internal_error500Internal Server Error — An unexpected server error occurred. If this persists, contact support with the requestId from this response.
service_error502Service Error — An external service dependency encountered an error. Retry your request in a few moments.
email_service_unavailable503Email Service Unavailable — The email delivery service is temporarily unavailable. Retry your request in a few moments.
no_bots_available503No Bots Available — No healthy bots are currently available in the target region to handle this call. Retry shortly while the bot pool scales up.
recording_service_not_configured503Recording Service Not Configured — Recording storage is not configured on this deployment. Contact your administrator to enable recording.
region_saturated503Region Saturated — The target region is at capacity (bot pool plus queue is full). Retry in a moment, or contact support if this persists.
service_unavailable503Service Unavailable — The service is temporarily unavailable. Retry your request in a few moments.
sms_service_unavailable503SMS Service Unavailable — The SMS delivery service is temporarily unavailable. Retry your request in a few moments.

Templates

CodeStatusDescription
template_variable_resolution_failed400Template Variable Resolution Failed — One or more template variables could not be resolved. Ensure all required variables are provided in the request.

Validation

CodeStatusDescription
bad_request400Bad Request — The request is malformed or contains invalid parameters. Check the request body and query parameters.
invalid_id_format400Invalid ID Format — The provided ID is not a valid UUID. Use the format xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
invalid_json400Invalid JSON — The request body is not valid JSON. Ensure the body is properly formatted and the Content-Type header is application/json.
legal_acceptance_required400Legal Acceptance Required — You must accept the required legal documents (Terms of Service, Privacy Policy) before proceeding.
validation_failed400Validation Failed — One or more request fields failed validation. Check the errors array in the response for field-specific details.
verification_code_invalid400Verification Code Invalid — The verification code is incorrect. Check the code and try again, or request a new one.

Field Validation

Field-level errors appear in the errors[] array when the response code is validation_failed. Each entry includes the field name, a machine-readable code, and a human-readable message.

CodeDescription
above_maximumValue exceeds the maximum allowed threshold
already_existsA resource with this value already exists (uniqueness constraint)
already_in_useThis value is already in use by another resource
below_minimumValue is below the minimum allowed threshold
circular_dependencyFlow contains a circular dependency between nodes
edges_requiredEdges array is required in the flow definition
invalid_edge_referenceEdge references a node that does not exist in the flow
invalid_email_formatEmail format is invalid (must conform to RFC 5322)
invalid_formatValue format is invalid for this field
invalid_initial_nodeThe specified initial node does not exist in the flow
invalid_language_codeLanguage code is not recognized or not supported
invalid_model_idModel ID does not exist or is disabled for this provider
invalid_phone_formatPhone number format is invalid
mfa_code_invalid_formatMFA code must be exactly 6 digits
missing_llm_serviceFlow is missing a required LLM service node
missing_main_agentFlow must contain exactly one main_agent node
missing_modelNode is missing the required model field
missing_stt_languageSTT node is missing the required language setting
missing_stt_serviceFlow is missing a required STT service node
missing_tts_serviceFlow is missing a required TTS service node
missing_tts_voice_idTTS node is missing the required voice ID
multiple_main_agentsFlow contains multiple main_agent nodes (only one is allowed)
must_be_gteValue must be greater than or equal to the referenced field’s value
nodes_requiredAt least one node is required in the flow definition
out_of_rangeValue is outside the valid range
password_too_shortPassword must be at least 8 characters
password_too_weakPassword does not meet complexity requirements
phone_not_e164Phone number must be in E.164 format (e.g., +14155552671)
requiredThis field is required but was not provided
too_longValue exceeds the maximum allowed length
too_shortValue is below the minimum required length
unknown_node_typeNode type is not recognized
version_invalid_formatVersion must follow semantic versioning format (X.Y.Z)