Command Palette

Search for a command to run...

IntelliPortalDOCS

Start here

  • Overview
  • Quickstart
  • Test in the sandbox

Build

  • Authentication
  • Clients
  • Hosted onboarding
  • Webhooks

API reference

  • Messages
  • Usage
  • Status & observability

Reliability

  • WhatsApp limits
  • Errors & debugging

Resources

  • Changelog
  • OpenAPI 3.1
  • Postman collection
Developer support
IntelliPortalDOCS
Developer documentation/API v1

© 2026 Intelli Holdings Inc.

PrivacyContact

Need a hand?

Share a request ID when you contact us so we can trace the call quickly.

Open developer support
  1. Docs
  2. Errors & debugging

Reliability

JSON errors

Errors & debugging

All public API failures use one envelope. Branch first on HTTP status and the stable code, then use message and details for diagnosis.

Error envelope

The optional details object carries structured validation or provider context. Do not parse the human-readable message to drive application logic.

JSON · 401
{
  "error": {
    "code": "unauthorized",
    "message": "Missing or malformed API key. Send `Authorization: Bearer ik_...`."
  }
}
JSON · 400 with details
{
  "error": {
    "code": "bad_request",
    "message": "Request validation failed.",
    "details": {
      "to": ["Enter a valid recipient identifier."]
    }
  }
}

HTTP and code reference

HTTPcodeMeaningRetry?
400bad_requestMalformed JSON, invalid fields, or an unsupported channel/type combination.No
401unauthorizedMissing, malformed, expired, revoked, or invalid API key.No
402trial_expiredTrial and grace ended; live sending is paused until a plan is active.No
403forbiddenThe key is valid but does not have the required scope.No
404not_foundThe client, template, or requested resource does not exist for this partner.No
409conflictThe reference, phone number, or channel account is already connected.No
422unprocessableThe request was understood but rejected by the channel provider.Usually no
429rate_limitedThe request window is exhausted.Yes
500internal_errorAn unexpected edge error occurred.Yes
502upstream_unavailableThe partner API could not obtain a usable upstream response.Yes

Endpoint-specific codes

These arrive as 400 alongside the generic bad_request cases, so branch on code rather than on the status. None of them are worth retrying unchanged.

codeEndpointMeaning
channel_type_unsupported/messages/sendThe client's channel does not carry this message type. Instagram takes text, image, video, audio and document; templates, sticker, location, contacts, interactive and reaction are WhatsApp-only.
media_link_required/messages/sendMedia was sent to an Instagram client as an uploaded media id. Instagram fetches the file itself, so pass a public HTTPS URL in <type>.link instead.
meta_rejected/messages/send, /messages/send-templateMeta refused the send. The response carries Meta's own code and message — correct the cause before retrying.
number_already_connected/embedded-signup/sessionsThat WhatsApp number is already connected, either under one of your client references or through another provider.

Retry deliberately

Retry network failures, 429, 500, and 502 with capped exponential backoff and jitter. Honor Retry-After when present. Do not automatically retry validation, authentication, scope, or provider-policy failures without changing the cause.

Avoid duplicate business actions

Persist your own send job ID and message ID, and make retries from a durable queue. The public contract does not currently promise an idempotency-key cache.

Troubleshooting checklist

Every request returns 401

Confirm the api.intelliconcierge.dev host, the Bearer scheme, the full key value, its expiry, and whether it was rotated or revoked.

A valid key returns 403

Create or rotate a key with the endpoint scope. Client onboarding needs clients:write, reads need clients:read, and sends need messages:send.

A test send succeeds but nothing arrives

That is expected for ik_test_ keys and dry_run: true. A dry-run response includes dry_run: true and does not contact the recipient.

A client connect returns 409

Do not create random retries. Check whether client_ref already resolves. A phone number or Instagram account can also be connected under another reference or provider.

Meta rejects an otherwise valid send

Check the 24-hour reply window, recipient identifier, template approval and language, media URL reachability, and the channel capability matrix.

Webhooks do not arrive

Run the dashboard simulator, check Delivery Logs, return 2xx within five seconds, and verify the HMAC against the raw body rather than parsed JSON.

PreviousWhatsApp limits
NextChangelog