Error Catalog

This catalog is the canonical reference for Sent API v3 error codes. Every documented code appears below with its cause and step-by-step remediation; other documentation pages link to this catalog rather than restating code details.

The same codes also explain outcomes that happen after a request succeeds. A message that ends FAILED, FILTERED or BLOCKED reports why as reason_code and reason, and so does a channel that is not ACTIVE. A cause the API rejects synchronously keeps its code there: an opted-out recipient is BUSINESS_004 on a refused request and on a filtered message alike. Codes only an outcome can have are listed under Message Outcome Codes and Channel Status Reasons. Branch on reason_code; the wording of reason may improve, but a code never changes meaning.


Authentication Errors

AUTH_001: User is not authenticated

Error Message: "User is not authenticated"

HTTP Status: 401 Unauthorized

Cause: The request is missing the required x-api-key header.

Remediation:

  1. Ensure you're including the x-api-key header in all API requests
  2. Verify the header name is exactly x-api-key (case-sensitive)
  3. Check that your API key is being loaded from environment variables correctly

Example Fix:

# ❌ Missing header
curl -X GET https://api.sent.dm/v3/me

# ✅ Correct
curl -X GET https://api.sent.dm/v3/me \
  -H "x-api-key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

AUTH_002: Invalid or missing API key

Error Message: "Invalid or missing API key"

HTTP Status: 401 Unauthorized

Cause: The provided API key is invalid, revoked, or the x-api-key header is present but its value is not recognized.

Remediation:

  1. Verify your API key is correct and complete
  2. Check that you're using the API key for the correct environment (each environment should have its own key)
  3. Log into your Sent Dashboard and verify the key is active
  4. Generate a new API key if the current one was revoked

AUTH_004: Insufficient permissions

Error Message: "Insufficient permissions for this operation"

HTTP Status: 403 Forbidden

Cause: Your user role doesn't have permission to perform this operation.

Remediation:

  1. Check your organization role (owner, admin, developer, billing)
  2. Contact your organization owner to request additional permissions
  3. Some operations require the owner or admin role

See: Roles and Permissions for the operations each role can perform and how to look up your own role


AUTH_005: Account not yet activated

Error Message: "Your account is not yet activated. Please wait for account activation before using the API."

HTTP Status: 403 Forbidden

Cause: The API key is valid and channel setup is complete, but the account is still pending final activation by Sent.

Remediation:

  1. You have completed all required setup steps, so no action is needed from your side
  2. Wait for the activation confirmation email from Sent
  3. Contact support@sent.dm if activation takes longer than expected

AUTH_006: KYC verification not complete

Error Message: "Your KYC verification is not complete. Please submit your KYC documents before using the API."

HTTP Status: 403 Forbidden

Cause: The API key is valid but the account has not completed KYC verification. Applies to accounts in status: SIGNED_UP, KYC_STARTED, WHITELISTED, ONBOARDING_STARTED, or KYC_RESUBMISSION_REQUESTED.

Remediation:

  1. Log into your Sent Dashboard and complete the KYC verification flow
  2. If resubmission was requested, address the flagged items and resubmit your documents
  3. Contact support@sent.dm if you need assistance with KYC

AUTH_007: Channel setup not complete

Error Message: "Your channel setup is not complete. Please configure at least one messaging channel before using the API."

HTTP Status: 403 Forbidden

Cause: The API key is valid and KYC is approved, but no messaging channel (SMS or WhatsApp) has been configured. Applies to accounts in status: KYC_COMPLETED or MESSAGE_COMPLIANCE_COMPLETED.

Remediation:

  1. Log into your Sent Dashboard and complete channel setup
  2. Configure at least one SMS or WhatsApp sender
  3. See Channel Setup for step-by-step instructions

Validation Errors

VALIDATION_001: Request validation failed

Error Message: "Request validation failed"

HTTP Status: 400 Bad Request

Cause: The request body or parameters failed validation. Check the details field for specific field-level errors.

Remediation:

  1. Review the error.details object for field-specific error messages
  2. Ensure all required fields are provided
  3. Verify data types match the schema (for example, strings vs numbers)

Example:

{
  "error": {
    "code": "VALIDATION_001",
    "message": "Request validation failed",
    "details": {
      "to": ["'to' must contain at least one recipient"],
      "template": ["'template' must have either 'id' (non-empty GUID) or 'name' (non-empty string)"]
    }
  }
}

VALIDATION_002: Invalid phone number format

Error Message: "Invalid phone number format"

HTTP Status: 400 Bad Request

Cause: The phone number is not in a valid format.

Remediation:

  1. Use E.164 format: +1234567890
  2. Include the country code (for example, +1 for US)
  3. Remove any non-numeric characters except the leading +

Valid Examples:

  • +1234567890 (US)
  • +447911123456 (UK)
  • +919876543210 (India)

VALIDATION_003: Invalid GUID format

Error Message: "Invalid GUID format"

HTTP Status: 400 Bad Request

Cause: A UUID field contains an invalid format.

Remediation:

  1. Ensure UUIDs follow the format: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
  2. Verify the UUID is complete (36 characters including hyphens)
  3. Check that you're not passing an empty string or null

Valid Example: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx


VALIDATION_004: Required field is missing

Error Message: "Required field is missing"

HTTP Status: 400 Bad Request

Cause: A required field is not present in the request body.

Remediation:

  1. Check the API documentation for required fields
  2. Ensure the field name is spelled correctly (snake_case)
  3. Verify the field is not null or undefined

VALIDATION_005: Field value out of valid range

Error Message: "Field value out of valid range"

HTTP Status: 400 Bad Request

Cause: A numeric field value is outside the allowed minimum/maximum range.

Remediation:

  1. Check the API documentation for valid ranges
  2. For retry_count: must be between 1 and 5
  3. For timeout_seconds: must be between 5 and 120
  4. Ensure integer values are not negative where prohibited

Example:

{
  "error": {
    "code": "VALIDATION_005",
    "message": "Field value out of valid range",
    "details": {
      "retry_count": ["Value must be between 1 and 5"]
    }
  }
}

VALIDATION_006: Invalid enum value

Error Message: "Invalid enum value"

HTTP Status: 400 Bad Request

Cause: A field value is not one of the allowed enum values.

Remediation:

  1. Check the API documentation for allowed values
  2. Verify the value matches exactly (case-sensitive)
  3. Common enums: channel (sent, sms, whatsapp, rcs), template category (MARKETING, UTILITY, AUTHENTICATION)

An unrecognized channel is rejected rather than ignored, and the error message lists the accepted values. sent is the auto-detect value — see Channel routing.


VALIDATION_007: Invalid Idempotency-Key format

Error Message: "Invalid Idempotency-Key format"

HTTP Status: 400 Bad Request

Cause: The idempotency key doesn't meet the format requirements.

Remediation:

  1. Use only alphanumeric characters, hyphens, and underscores
  2. Keep the key between 1 and 255 characters
  3. Avoid special characters such as spaces, @, and #

Valid Examples:

  • req-abc-123
  • send_msg_001
  • webhook_retry_1

VALIDATION_008: Invalid template variable value

Error Message: varies by cause (see below)

HTTP Status: 400 Bad Request. Also reported as the reason_code of a FAILED message, when variables are found missing or invalid after the send was accepted with 202.

Cause: A supplied template variable value is rejected before the message is accepted. Three distinct causes share this code, and the message tells you which one applies:

MessageCause
Variable '{name}' does not match the required pattern.The value fails the variable's configured validation pattern.
Variable '{name}' is invalid: param text cannot have new-line/tab characters or more than 4 consecutive spaces.The value contains a newline, carriage return, or tab, or more than four consecutive spaces.
Template variables cannot be empty for WhatsApp: {names}One or more variables were supplied with a blank value on a WhatsApp-only send.

Remediation:

  1. Read the variable name from the error message. It names every offending variable, so you can fix them in one pass rather than one send at a time.
  2. For a pattern mismatch, check the variable's pattern on the template and confirm the value matches it.
  3. For invalid text, strip newlines, carriage returns, and tabs from the value, and collapse any run of more than four spaces. These are rejected because WhatsApp does not accept them in a parameter.
  4. For an empty value on WhatsApp, supply a non-empty value or omit the variable if the template does not require it. WhatsApp rejects a text parameter with no text, so the send can never succeed.

The empty-value rule applies only when the send is pinned to WhatsApp. On an auto-detect send (channel omitted) the same value is accepted, because the message can still route over another channel.


Resource Errors

RESOURCE_001: Contact not found

Error Message: "Contact not found"

HTTP Status: 404 Not Found

Cause: The specified contact ID doesn't exist or doesn't belong to your account.

Remediation:

  1. Verify the contact ID is correct
  2. List all contacts to find the correct ID: GET /v3/contacts
  3. Check that you're using the correct API key for the account that owns the contact

Debug Steps:

# List contacts to find valid IDs
curl -X GET https://api.sent.dm/v3/contacts \
  -H "x-api-key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"

RESOURCE_002: Template not found

Error Message: "Template not found"

HTTP Status: 404 Not Found

Cause: The specified template ID doesn't exist.

Remediation:

  1. Verify the template ID is correct
  2. List all templates: GET /v3/templates
  3. Ensure the template hasn't been deleted

RESOURCE_003: Message not found

Error Message: "Message not found"

HTTP Status: 404 Not Found

Cause: The specified message ID doesn't exist.

Remediation:

  1. Verify the message ID is correct
  2. Note that message IDs are only available after sending
  3. Messages may be purged after retention period

RESOURCE_004: Customer not found

Error Message: "Customer not found"

HTTP Status: 404 Not Found

Cause: The specified customer ID doesn't exist or is not accessible.

Remediation:

  1. Verify the customer ID is correct
  2. Check that your API key has access to this customer
  3. Contact support if the customer should exist

RESOURCE_005: Organization not found

Error Message: "Organization not found"

HTTP Status: 404 Not Found

Cause: The specified organization ID doesn't exist or you don't have access.

Remediation:

  1. Verify the organization ID is correct
  2. Ensure you're using an organization-level API key
  3. Check that your account is a member of the organization

RESOURCE_006: User not found

Error Message: "User not found"

HTTP Status: 404 Not Found

Cause: The specified user ID doesn't exist in your organization.

Remediation:

  1. Verify the user ID is correct
  2. List organization users to find valid IDs
  3. The user may have been removed from the organization

RESOURCE_007: Resource already exists

Error Message: "Resource already exists"

HTTP Status: 409 Conflict

Cause: Attempting to create a resource that already exists (for example, a duplicate contact).

Remediation:

  1. Check if the resource already exists using a list or get endpoint
  2. Update the existing resource instead of creating
  3. Use a unique identifier for your idempotency key

RESOURCE_008: Webhook not found

Error Message: "Webhook not found"

HTTP Status: 404 Not Found

Cause: The specified webhook ID doesn't exist.

Remediation:

  1. Verify the webhook ID is correct
  2. List all webhooks: GET /v3/webhooks
  3. Check if the webhook was deleted

RESOURCE_009: Brand not found

Error Message: "Brand not found for this profile"

HTTP Status: 404 Not Found

Cause: No 10DLC brand is registered for the profile, and none is inherited from its organization.

Remediation:

  1. Register the brand first; see the 10DLC Registration Guide
  2. Confirm you are targeting the right profile with GET /v3/profiles

RESOURCE_010: Campaign not found

Error Message: "Campaign not found for this profile"

HTTP Status: 404 Not Found

Cause: The specified campaign ID doesn't belong to this profile's brand.

Remediation:

  1. List the profile's campaigns and reuse the returned id
  2. Verify the campaign belongs to the brand registered for this profile

RESOURCE_011: Batch not found

Error Message: "Batch not found"

HTTP Status: 404 Not Found

Cause: The specified batch SMS operation doesn't exist.

Remediation:

  1. Verify the batch ID is correct
  2. Check whether the batch has expired or was already processed

RESOURCE_012: Phone number not found

Error Message: "Phone number not found"

HTTP Status: 404 Not Found

Cause: The specified phone number isn't provisioned on your account.

Remediation:

  1. List your numbers to confirm the exact value
  2. Use E.164 format (for example, +14155550123)

RESOURCE_013: Resource not found

Error Message: "Resource not found"

HTTP Status: 404 Not Found

Cause: Generic not-found fallback, returned when no more specific code applies.

Remediation:

  1. Verify the resource ID in the request path
  2. Check the endpoint path is correct for the resource type

RESOURCE_014: Profile not found

Error Message: "Profile not found"

HTTP Status: 404 Not Found

Cause: The specified profileId isn't a child profile of your organization. Passing your organization's own ID also fails.

Remediation:

  1. Use a profile ID returned by GET /v3/profiles
  2. Confirm the profile belongs to your organization

Business Logic Errors

BUSINESS_001: Cannot modify inherited contact

Error Message: "Cannot modify inherited contact"

HTTP Status: 400 Bad Request

Cause: You're attempting to modify a contact that was inherited from a parent organization or shared profile.

Remediation:

  1. Create a new contact with the desired phone number
  2. Contacts inherited from parent organizations are read-only
  3. Use your own profile-scoped API key for contact modifications

BUSINESS_002: Rate limit exceeded

Error Message: "Rate limit exceeded"

HTTP Status: 429 Too Many Requests

Cause: You've exceeded the allowed number of requests per minute.

Remediation:

  1. Check the Retry-After header for wait time
  2. Implement exponential backoff in your code
  3. Consider using webhooks instead of polling
  4. Contact support if you need higher limits

See: Rate Limits Documentation


BUSINESS_003: Insufficient account balance

Error Message: "Insufficient balance"

HTTP Status: 402 Payment Required

Cause: Your account doesn't have enough credit to complete the operation.

Note: POST /v3/messages does not return this error. Sends are accepted with 202; when the balance is insufficient, each message is finalized asynchronously as BLOCKED with reason_code: "BUSINESS_003" and clears after a top-up. Legacy v2 send endpoints reject an out-of-balance request synchronously with this error.

Remediation:

  1. Check your current balance and add funds in Billing → Overview (the balance is not exposed through the API)
  2. Review pricing for the operation you're attempting

BUSINESS_004: Contact has opted out

Error Message: "Contact has opted out of messaging"

HTTP Status: 400 Bad Request

Cause: An operation targeted a contact that has opted out of messaging.

Note: POST /v3/messages does not return this error. Sends are accepted with 202 regardless of recipient opt-out state, and each consent-blocked message is finalized asynchronously as FILTERED with reason_code: "BUSINESS_004" (see ERR_CONSENT_BLOCKED below).

Remediation:

  1. Inspect the affected contacts via GET /v3/contacts/{id} and confirm their opt_out status.
  2. Remove opted-out contacts from your messaging lists.
  3. Re-engagement requires the contact to opt back in through a STOP/START style flow or via an opt_out: false update to the contact (where you have a verifiable record of new consent).

Where it surfaces:

  • GET /v3/messages/{id}: status = FILTERED, with reason_code: "BUSINESS_004"
  • GET /v3/messages/{id}/activities: a FILTERED activity carrying the same reason_code and reason
  • The message.filtered webhook event, with payload.reason_code: "BUSINESS_004"

ERR_CONSENT_BLOCKED itself is the internal classification and never appears in a response or payload. What you see is BUSINESS_004, the same code an opted-out contact returns elsewhere in the API. A FILTERED message whose reason_code is DELIVERY_004 was stopped by a routing rule rather than by consent.

Cause: The send-time consent policy refused this individual message because the recipient's contact has opt_out = true or their phone is on the customer's phone-channel suppression list. The check runs pre-routing, so no provider call is made and the customer is not charged.

Remediation:

  1. Stop targeting this contact until they re-confirm consent.
  2. If the opt-out is incorrect (for example, test data), update the contact's opt_out field through PATCH /v3/contacts/{id}. Only do this when you have a verifiable record of renewed consent.
  3. For phone-level suppression entries that should be removed, contact support.

BUSINESS_005: Template not approved

Error Message: "Template not approved for sending"

HTTP Status: 400 Bad Request

Cause: The WhatsApp template hasn't been approved yet.

Remediation:

  1. Check template status: GET /v3/templates/{id}
  2. Wait for WhatsApp/Meta approval (typically 24-48 hours)
  3. For urgent needs, use SMS channel instead
  4. Review template guidelines to ensure approval

BUSINESS_006: Message cannot be modified in current state

Error Message: "Message cannot be modified in current state"

HTTP Status: 400 Bad Request

Cause: The message has already been sent or is in a final state that prevents modification.

Remediation:

  1. Messages can only be modified while in QUEUED or ACCEPTED status
  2. Once a message is SENT, DELIVERED, READ, or FAILED, it cannot be modified
  3. Send a new message if you need to make changes

BUSINESS_007: Channel not available

Error Message: "Channel not available for this contact"

HTTP Status: 400 Bad Request

Cause: The requested messaging channel (SMS/WhatsApp) isn't available for this phone number.

Remediation:

  1. Check available channels for the contact:
    curl -X GET https://api.sent.dm/v3/contacts/{id} \
      -H "x-api-key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
  2. Use an available channel from available_channels
  3. Don't specify a channel to let the API choose automatically

BUSINESS_008: Operation would exceed quota

Error Message: "Operation would exceed quota"

HTTP Status: 400 Bad Request

Cause: The operation would exceed your account's quota limits, such as those for messages, contacts, or templates.

Remediation:

  1. Check your current usage in the Dashboard
  2. Upgrade your plan to increase quotas
  3. Delete unused resources to free up quota
  4. Contact support for temporary quota increases

BUSINESS_010: Webhook is inactive

Error Message: "Webhook is inactive"

HTTP Status: 400 Bad Request

Cause: The operation targets a webhook that is not active. Sending a test event to an inactive webhook returns this code. A webhook can be inactive because you turned it off, or because Sent turned it off automatically after repeated delivery failures.

Remediation:

  1. Check the webhook's status on the Webhooks page in the Dashboard.
  2. If Sent turned it off automatically, fix the endpoint first: confirm it is reachable and returns a 2xx within the timeout. Then turn the webhook back on. Turning it back on without fixing the endpoint will lead to Sent turning it off again.
  3. Re-send the test event once the webhook is active.

BUSINESS_012: Template is not active on the requested channel

Error Message: "This template is not active on the requested channel"

HTTP Status: 400 Bad Request

Cause: The template exists and is approved, but not on the channel this send is pinned to. Template approval is per channel, so a template approved for SMS is not automatically usable on WhatsApp.

Remediation:

  1. Check the template's per-channel status with GET /v3/templates/{id}.
  2. Send on a channel where the template is active, or omit channel to let Sent choose one that is.
  3. If you need the template on that channel, submit it for approval there and wait for it to be approved.

This is distinct from BUSINESS_005, which means the template is not approved anywhere. BUSINESS_012 means it is approved, but not on the channel you asked for.


WHATSAPP_TEMPLATE_REQUIRED: Free-form WhatsApp outside Meta's window

Error Message: "Free-form WhatsApp messages are only allowed within 24 hours of the user's latest inbound WhatsApp message. Send an approved template instead."

HTTP Status: Not returned on an HTTP response. POST /v3/messages accepts the batch with 202, and this code arrives as the terminal FAILED status on the individual message.

Cause: A free-form message (text rather than template) was sent with channel: "whatsapp" while Meta's 24-hour customer-service window was shut. Only an inbound WhatsApp message from the contact opens that window; an outbound template does not.

Meta can also reject a send that Sent considered inside the window, returning error 131047 (re-engagement required). Sent surfaces that as this same code, so treat it as one condition with one fix.

Where it surfaces: the message's terminal status. GET /v3/messages/{id} reports status: "FAILED" with reason_code: "WHATSAPP_TEMPLATE_REQUIRED", and the message.failed webhook carries the same payload.reason_code and payload.reason.

Remediation:

  1. Send an approved WhatsApp template instead. A template is always accepted, window or no window.
  2. Omit channel to let Sent choose. An auto-detect send falls back to RCS or SMS when Meta's window is shut, so the message still goes out if the contact is reachable there.
  3. Wait for the contact to message you on WhatsApp, which re-opens the window for 24 hours.

This is Meta's rule and applies to sends pinned to channel: "whatsapp" only. The counterpart for SMS, RCS, and auto-detect is CONVERSATION_TEMPLATE_REQUIRED, which is Sent's own rule and records BLOCKED rather than FAILED.


CONVERSATION_TEMPLATE_REQUIRED: No open conversation

Error Messages:

MessageCause
No open conversation with this contact. Send an approved template to start one before sending free-form content.The contact has never replied and no template was ever sent.
This contact has never replied, and the template that opened the conversation is more than 7 days old, so it has lapsed. Send an approved template to start a new one before sending free-form content.A template opened the conversation, the contact never replied, and the template is more than 7 days old.

HTTP Status: Not returned on an HTTP response. POST /v3/messages accepts the batch with 202, and this code arrives as the terminal BLOCKED status on the individual message. The gate runs before routing, so nothing reaches a carrier and the message is excluded from your deliverability rate; it fires message.blocked, not message.failed.

Cause: A free-form message (text rather than template) was sent on SMS, RCS, or with channel omitted to a contact who has never replied, and either no approved template was ever sent to them or the last one is more than 7 days old. A contact who has replied at any point in the past is never blocked by this gate. Your own free-form messages do not count as templates, and neither leg of a STOP exchange counts as a reply.

Where it surfaces: the message's terminal status. GET /v3/messages/{id} reports status: "BLOCKED" with reason_code: "CONVERSATION_TEMPLATE_REQUIRED", and the message.blocked webhook carries the same payload.reason_code and payload.reason.

Remediation:

  1. Send an approved template to open or re-open the conversation. Free-form text is then accepted for 7 days, and indefinitely once the contact replies.
  2. Do not retry the same free-form send. It will keep being blocked until a template or a reply from the contact opens the conversation.
  3. This only affects contacts who have never replied, so it is most common on cold outreach; see Conversation Windows.

BUSINESS_014: Account is suspended

Error Message: "This account is suspended"

HTTP Status: 403 Forbidden

Cause: The account is suspended and cannot send messages or create templates.

Remediation:

  1. Contact support. A suspension is not something you can clear through the API.
  2. Do not retry the request. Every send will return this code until the suspension is lifted, so a retry loop will not recover.

BUSINESS_017: WhatsApp business account unavailable

HTTP Status: Not returned on an HTTP response. Reported as the reason_code of a FAILED message.

Cause: The WhatsApp business account cannot send at the moment: WhatsApp has restricted or locked it (for example, over a policy violation), its payment method has a problem, or it is in maintenance.

Remediation:

  1. Check the account's status and payment method in WhatsApp Business Manager.
  2. Omit channel so auto-detect can send over another channel while WhatsApp is unavailable.

BUSINESS_018: WhatsApp marketing messages disabled

HTTP Status: Not returned on an HTTP response. Reported as the reason_code of a FAILED message.

Cause: Marketing sends are switched off for this WhatsApp business account.

Remediation:

  1. Enable marketing messages for the account in WhatsApp Business Manager.
  2. Until then, send UTILITY or AUTHENTICATION templates, or send marketing over another channel.

BUSINESS_019: Sender not configured for the channel

HTTP Status: Not returned on an HTTP response. Reported as the reason_code of a FAILED message.

Cause: The sender is not set up to send on the channel the message was routed to: the number or sender ID is invalid, not enabled for messaging or temporarily unusable; its 10DLC, toll-free or sender ID registration is missing or incomplete; or, on WhatsApp, the business number is not registered or has no approved display name.

Remediation:

  1. Check the channel with GET /v3/channels. A market that is not ACTIVE carries a reason_code saying what it's waiting on (see Channel Status Reasons).
  2. Contact support@sent.dm with the message ID if the channel reports ACTIVE.

BUSINESS_020: Onboarding message limit reached

HTTP Status: Not returned on an HTTP response. Reported as the reason_code of a BLOCKED message.

Cause: The account has sent as many messages as its current onboarding stage allows. It has finished KYC or channel setup, but not the step after, which lifts the limit.

Remediation:

  1. Complete the next onboarding step in the Sent Dashboard.
  2. Check the blocked messages with GET /v3/messages/{id} once the limit is lifted, and resend any that are still BLOCKED.

LIMIT_001: Scheduled message limit exceeded

Error Message: "Scheduled message limit exceeded"

HTTP Status: 429 Too Many Requests

Cause: Accepting the request would push the account's outstanding scheduled messages past the 1,000,000-message cap. This limit applies to messages currently in SCHEDULED status across all senders and recipients on the account.

Remediation:

  1. Wait for existing scheduled messages to be released and sent, which reduces the outstanding count.
  2. Schedule fewer messages at once, or stagger scheduling over time.
  3. Contact support if you need a higher limit for your use case.

Conflict Errors

CONFLICT_001: Concurrent idempotent request

Error Message: "Concurrent idempotent request in progress"

HTTP Status: 409 Conflict

Cause: Another request with the same idempotency key is currently being processed.

Remediation:

  1. Wait for the original request to complete
  2. Use a unique idempotency key for each distinct operation
  3. Don't reuse idempotency keys across different operations

CONFLICT_006: Template is in review

Error Message: "This template is in review; its definition, category and language are frozen until the review completes"

HTTP Status: 409 Conflict

Cause: A PUT /v3/templates/{id} tried to change the template's definition, category, or language, or to resubmit it with submit_for_review, while it was still with a reviewer. A template counts as in review when its own status is PENDING, and also when its status is something else but any one of its channels is still awaiting a verdict, which is why an APPROVED template can return this. The freeze is checked before anything is written, so a refused request leaves the template exactly as the reviewer sees it.

Remediation:

  1. Wait for the review to finish. Subscribe to templates webhook events to learn the outcome per channel rather than polling.
  2. Send only name if you need a change now. The display name is editable throughout, including during review.
  3. Resubmit after the verdict lands. A REJECTED template is editable again, and an APPROVED one accepts a live edit.

Service Errors

SERVICE_001: Cache service temporarily unavailable

Error Message: "Cache service temporarily unavailable. Please retry your request."

HTTP Status: 503 Service Unavailable

Cause: The cache backing idempotency processing is unavailable, so the API cannot guarantee your request is not a duplicate. Returned on requests that carry an Idempotency-Key header while the cache is down.

Remediation:

  1. Retry the request after a short delay, reusing the same Idempotency-Key
  2. Check API Status for known issues

Internal Errors

INTERNAL_001: Unexpected internal server error

Error Message: "Unexpected internal server error"

HTTP Status: 500 Internal Server Error

Cause: An unexpected error occurred on the server.

Remediation:

  1. Retry the request after a short delay
  2. If the error persists, contact support with:
    • The request_id from the response
    • Timestamp of the error
    • The operation you were attempting

INTERNAL_002: Database operation failed

Error Message: "Database operation failed"

HTTP Status: 500 Internal Server Error

Cause: An unexpected database error occurred while processing your request.

Remediation:

  1. Retry the request after a short delay
  2. If the error persists, contact support with the request ID
  3. This is typically a transient issue

INTERNAL_003: External service error

Error Message: "External service error (SMS/WhatsApp provider)"

HTTP Status: 500 Internal Server Error

Cause: The upstream messaging provider is experiencing issues.

Remediation:

  1. Wait a few minutes and retry
  2. Check API Status for known issues
  3. The message is queued and retried automatically

INTERNAL_004: Timeout waiting for operation

Error Message: "Timeout waiting for operation"

HTTP Status: 504 Gateway Timeout

Cause: The operation timed out while waiting for an external service or internal processing.

Remediation:

  1. The operation may still be in progress - check the resource status
  2. Retry the request with the same idempotency key
  3. Contact support if timeouts persist

INTERNAL_005: Service temporarily unavailable

Error Message: "Service temporarily unavailable"

HTTP Status: 503 Service Unavailable

Cause: The API is temporarily unavailable due to maintenance or high load.

Remediation:

  1. Retry with exponential backoff
  2. Check API Status
  3. Wait for service restoration

Message Outcome Codes

These codes are never returned on an HTTP response. POST /v3/messages accepts the send with 202, and when the message ends FAILED, FILTERED or BLOCKED the code arrives as reason_code on GET /v3/messages/{id} (top level and on the event), on GET /v3/messages/{id}/activities, and on the message.failed, message.filtered and message.blocked webhooks. A cause with a code elsewhere in this catalog reuses it, so these cover only what a message outcome alone can have. Several carrier conditions fold into one code, so read reason for the likely causes.

CodeMeaningWhat to do
DELIVERY_001The send never reached the carrier: a routing or processing error, content the network couldn't accept, or no reported causeCheck the content and media, then resend. Contact support with the message ID if it repeats
DELIVERY_002The carrier accepted the message and later reported it undelivered, with no specific reasonResend later; treat repeated failures to one number as a bad number
DELIVERY_003The account has no sender set up for this destination on this channelAdd the market with POST /v3/channels/sms, or send on another channel
DELIVERY_004Sending to this destination isn't allowed right now: it's blocked for the account, its sender is still being set up, or the recipient recently couldn't be reached on this channelCheck the market's status with GET /v3/channels; wait for it to reach ACTIVE
DELIVERY_005No route is available: the destination network or region isn't provisioned for this senderSend on another channel, or contact support to add coverage
DELIVERY_006The channel's content policy blocked the text, links or mediaRevise the content and resend
DELIVERY_007The recipient isn't on this channel: no WhatsApp account, or no RCS-capable handsetOmit channel so auto-detect can pick one the recipient has
DELIVERY_008WhatsApp held back a marketing message: the recipient has received too many recently, or is in a marketing experimentSend later or over another channel; don't retry immediately
DELIVERY_009The channel rejected the credentials the message was sent withReconnect the WhatsApp or RCS account, or contact support
DELIVERY_010The message couldn't be delivered: the line or handset can't receive it, the carrier discarded it, or every available channel failedTreat as permanent for this recipient and channel
DELIVERY_011The carrier rejected the message: the line is barred, the recipient hasn't opted in to this sender, or the network refused itConfirm consent; don't retry on the same sender
DELIVERY_012Carrier screening blocked it as spam, a blocked keyword or content, or a block-listed numberRevise the content; check the sender's registration covers this use
DELIVERY_013The recipient couldn't be reached: phone off, out of coverage, busy, or storage fullResend later
DELIVERY_014The message expired before it could be deliveredResend if still relevant
DELIVERY_015The carrier reported a temporary error, such as congestionResend later; a later send may succeed
DELIVERY_016The channel couldn't use the media: unsupported type, file too large, or a link it couldn't fetchCheck the MMS media rules and that the URL is public

Channel Status Reasons

These codes are never returned on an HTTP response. Every SMS market, WhatsApp account and RCS agent that isn't ACTIVE reports one as reason_code, with a sentence as reason. They appear on GET /v3/channels, the single-market reads, and Sender Profiles, and for SMS markets on the channel.* webhooks too. WhatsApp and RCS don't publish channel.* webhooks yet. The code is decided by the same logic as the status, so the two never disagree. On reads, an ACTIVE channel carries neither field. A channel.* webhook for an ACTIVE market omits reason_code but can still carry reason when the event brought its own explanation, such as a correction requested against a sender that still works.

StatusCodeMeaningWhat to do
ACTION_NEEDEDCHANNEL_001Information or documents the channel requires are missing, or were rejected. On an SMS market, reason names whatSend them with PATCH /v3/channels/sms/{country}/{type}; see Managing channels
ACTION_NEEDEDCHANNEL_002The registration came back from review and must be correctedCorrect what Sent emailed about and resubmit
ACTION_NEEDEDCHANNEL_003The registration was rejected (RCS verification or launch)Correct the submission and resubmit, or contact support
ACTION_NEEDEDCHANNEL_004The channel was suspended and can't sendContact support
ACTION_NEEDEDCHANNEL_005Setting the channel up failedContact support to retry
ACTION_NEEDEDCHANNEL_006No WhatsApp Business Account is connectedConnect one in the Sent Dashboard
ACTION_NEEDEDCHANNEL_007The WhatsApp Business Account has no phone number registeredRegister a number on the account
INACTIVECHANNEL_008The channel had a working sender and lost it: the number was released or its campaign lapsedContact support to restore it; sends fail until then
PENDING_REVIEWCHANNEL_009The registration is with the registry or the carriersWait; nothing on your side speeds it up
PROVISIONINGCHANNEL_010The registration was approved and a number is being acquiredWait for channel.activated
PROVISIONINGCHANNEL_011The channel is being set upWait for channel.activated

Troubleshooting Guide

General Troubleshooting Steps

  1. Check the Error Code: Use the error code to find its entry in this catalog
  2. Review Request ID: Include meta.request_id when contacting support
  3. Verify API Version: Ensure you're using v3 endpoints (/v3/)
  4. Test in Sandbox Mode: Use sandbox: true to validate without side effects

Getting Help

If you can't resolve an error:

  1. Documentation: Check this catalog and the Error Handling guide
  2. Support email: support@sent.dm
  3. Include in Support Request:
    • Request ID (meta.request_id)
    • Error code and message
    • Timestamp of occurrence
    • Endpoint and method
    • Request payload (sanitized)

Error Code Quick Reference

Every code documented on this page, in page order:

CodeCategoryHTTP StatusQuick Fix
AUTH_001Authentication401Add x-api-key header
AUTH_002Authentication401Verify/regenerate API key
AUTH_004Authentication403Check user permissions
AUTH_005Authentication403Wait for account activation
AUTH_006Authentication403Complete KYC verification
AUTH_007Authentication403Configure a messaging channel
VALIDATION_001Validation400Check error.details
VALIDATION_002Validation400Use E.164 phone format
VALIDATION_003Validation400Check UUID format
VALIDATION_004Validation400Provide all required fields
VALIDATION_005Validation400Check value is within range
VALIDATION_006Validation400Check enum values
VALIDATION_007Validation400Fix Idempotency-Key format
VALIDATION_008Validation400 (or message FAILED)Fix the template variable value named in the message
RESOURCE_001Resource404Verify contact ID exists
RESOURCE_002Resource404Verify template ID exists
RESOURCE_003Resource404Verify message ID exists
RESOURCE_004Resource404Verify customer ID exists
RESOURCE_005Resource404Verify organization ID
RESOURCE_006Resource404Verify user ID exists
RESOURCE_007Resource409Update the existing resource
RESOURCE_008Resource404Verify webhook ID exists
RESOURCE_009Resource404Register a brand for the profile
RESOURCE_010Resource404Verify campaign belongs to the profile's brand
RESOURCE_011Resource404Verify batch ID exists
RESOURCE_012Resource404Verify the number is provisioned (E.164)
RESOURCE_013Resource404Verify the resource ID and endpoint path
RESOURCE_014Resource404Use a profile ID from GET /v3/profiles
BUSINESS_001Business Logic400Create new contact instead
BUSINESS_002Business Logic429Implement backoff
BUSINESS_003Business Logic402Add account funds
BUSINESS_004Business Logic400Remove opted-out contacts
ERR_CONSENT_BLOCKEDBusiness Logicn/a (message FILTERED)Stop targeting the contact
BUSINESS_005Business Logic400Wait for template approval
BUSINESS_006Business Logic400Send a new message instead
BUSINESS_007Business Logic400Use an available channel
BUSINESS_008Business Logic400Check quota limits
BUSINESS_010Business Logic400Re-enable the webhook after fixing the endpoint
BUSINESS_012Business Logic400Use a channel the template is active on
WHATSAPP_TEMPLATE_REQUIREDBusiness Logic- (message FAILED)Send an approved template, or omit channel to fall back
CONVERSATION_TEMPLATE_REQUIREDBusiness Logic- (message BLOCKED)Send an approved template to open or re-open the conversation
BUSINESS_014Business Logic403Contact support; do not retry
BUSINESS_017Business Logic- (message FAILED)Check the WhatsApp business account
BUSINESS_018Business Logic- (message FAILED)Enable marketing on the WhatsApp business account
BUSINESS_019Business Logic- (message FAILED)Check the channel's reason_code
BUSINESS_020Business Logic- (message BLOCKED)Complete the next onboarding step
LIMIT_001Business Logic429Wait for scheduled messages to send; schedule fewer at once
CONFLICT_001Conflict409Wait for the original request
CONFLICT_006Conflict409Wait for the template review to finish; only name is editable meanwhile
SERVICE_001Service503Retry after a short delay
INTERNAL_001Internal500Retry or contact support
INTERNAL_002Internal500Retry or contact support
INTERNAL_003Internal500Retry after a delay
INTERNAL_004Internal504Retry or contact support
INTERNAL_005Internal503Retry with backoff
DELIVERY_001 to DELIVERY_016Message outcome- (message FAILED/FILTERED/BLOCKED)See Message Outcome Codes
CHANNEL_001 to CHANNEL_011Channel status- (channel not ACTIVE)See Channel Status Reasons

Need More Help? Contact support@sent.dm with your request ID for personalized assistance.


On this page

Error CatalogAuthentication ErrorsAUTH_001: User is not authenticatedAUTH_002: Invalid or missing API keyAUTH_004: Insufficient permissionsAUTH_005: Account not yet activatedAUTH_006: KYC verification not completeAUTH_007: Channel setup not completeValidation ErrorsVALIDATION_001: Request validation failedVALIDATION_002: Invalid phone number formatVALIDATION_003: Invalid GUID formatVALIDATION_004: Required field is missingVALIDATION_005: Field value out of valid rangeVALIDATION_006: Invalid enum valueVALIDATION_007: Invalid Idempotency-Key formatVALIDATION_008: Invalid template variable valueResource ErrorsRESOURCE_001: Contact not foundRESOURCE_002: Template not foundRESOURCE_003: Message not foundRESOURCE_004: Customer not foundRESOURCE_005: Organization not foundRESOURCE_006: User not foundRESOURCE_007: Resource already existsRESOURCE_008: Webhook not foundRESOURCE_009: Brand not foundRESOURCE_010: Campaign not foundRESOURCE_011: Batch not foundRESOURCE_012: Phone number not foundRESOURCE_013: Resource not foundRESOURCE_014: Profile not foundBusiness Logic ErrorsBUSINESS_001: Cannot modify inherited contactBUSINESS_002: Rate limit exceededBUSINESS_003: Insufficient account balanceBUSINESS_004: Contact has opted outERR_CONSENT_BLOCKED: Per-message consent blockBUSINESS_005: Template not approvedBUSINESS_006: Message cannot be modified in current stateBUSINESS_007: Channel not availableBUSINESS_008: Operation would exceed quotaBUSINESS_010: Webhook is inactiveBUSINESS_012: Template is not active on the requested channelWHATSAPP_TEMPLATE_REQUIRED: Free-form WhatsApp outside Meta's windowCONVERSATION_TEMPLATE_REQUIRED: No open conversationBUSINESS_014: Account is suspendedBUSINESS_017: WhatsApp business account unavailableBUSINESS_018: WhatsApp marketing messages disabledBUSINESS_019: Sender not configured for the channelBUSINESS_020: Onboarding message limit reachedLIMIT_001: Scheduled message limit exceededConflict ErrorsCONFLICT_001: Concurrent idempotent requestCONFLICT_006: Template is in reviewService ErrorsSERVICE_001: Cache service temporarily unavailableInternal ErrorsINTERNAL_001: Unexpected internal server errorINTERNAL_002: Database operation failedINTERNAL_003: External service errorINTERNAL_004: Timeout waiting for operationINTERNAL_005: Service temporarily unavailableMessage Outcome CodesChannel Status ReasonsTroubleshooting GuideGeneral Troubleshooting StepsGetting HelpError Code Quick Reference