# One key per message: generate it once, and reuse it if you retry.IDEMPOTENCY_KEY=$(uuidgen)curl -X POST https://api.ibubbl.com/v1/messages \ -H "Authorization: Bearer $IBUBBL_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"to\": \"+14155551234\", \"body\": \"Hey Sam — quick check-in about your order.\", \"reply_to_message_id\": \"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\", \"effect\": \"confetti\", \"idempotency_key\": \"$IDEMPOTENCY_KEY\" }"
import { randomUUID } from "node:crypto";// One key per message: generate it once, and reuse it if you retry.const idempotencyKey = randomUUID();const res = await fetch("https://api.ibubbl.com/v1/messages", { method: "POST", headers: { Authorization: `Bearer ${process.env.IBUBBL_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ to: "+14155551234", body: "Hey Sam — quick check-in about your order.", // Optional: quote an earlier message, and add an iMessage effect. reply_to_message_id: "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c", effect: "confetti", idempotency_key: idempotencyKey, }), signal: AbortSignal.timeout(10_000),});const data = await res.json();if (!res.ok) throw new Error(`${res.status} ${data.detail?.error}`);console.log(data.id, data.status);
import osimport uuidimport requestsAPI_KEY = os.environ["IBUBBL_API_KEY"]# One key per message: generate it once, and reuse it if you retry.idempotency_key = str(uuid.uuid4())res = requests.post( "https://api.ibubbl.com/v1/messages", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "to": "+14155551234", "body": "Hey Sam — quick check-in about your order.", # Optional: quote an earlier message, and add an iMessage effect. "reply_to_message_id": "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c", "effect": "confetti", "idempotency_key": idempotency_key, }, timeout=10,)data = res.json()if not res.ok: raise RuntimeError(f"{res.status_code} {data['detail']['error']}")print(data["id"], data["status"])
{ "detail": { "error": "validation_error", "message": "Exactly one of contact_id, to, chat_guid, or participant_phones is required" }}
Messages
Send a message
Send a message to one contact (contact_id, or to — an E.164 phone number; the contact is created on first use), into an existing group (chat_guid), or to a new group (participant_phones). Exactly one of the four is required.
The response returns immediately with status: "pending" or "queued". Delivery progress arrives as webhook events (message.sent, message.delivered, message.read, message.failed), or poll GET /v1/messages/{id}.
Idempotency is required. Provide a unique idempotency_key per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns 409 idempotency_conflict. See the Idempotency guide.
A send to an opted-out contact returns 422 contact_opted_out; see Suppression.
To send files, list up to 10 https URLs in attachments (1:1 only); body, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See Attachments.
On a 5xx (including a 502/503 from the network edge during a deploy), retry with the same idempotency_key.
POST
/
v1
/
messages
# One key per message: generate it once, and reuse it if you retry.IDEMPOTENCY_KEY=$(uuidgen)curl -X POST https://api.ibubbl.com/v1/messages \ -H "Authorization: Bearer $IBUBBL_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"to\": \"+14155551234\", \"body\": \"Hey Sam — quick check-in about your order.\", \"reply_to_message_id\": \"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\", \"effect\": \"confetti\", \"idempotency_key\": \"$IDEMPOTENCY_KEY\" }"
import { randomUUID } from "node:crypto";// One key per message: generate it once, and reuse it if you retry.const idempotencyKey = randomUUID();const res = await fetch("https://api.ibubbl.com/v1/messages", { method: "POST", headers: { Authorization: `Bearer ${process.env.IBUBBL_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ to: "+14155551234", body: "Hey Sam — quick check-in about your order.", // Optional: quote an earlier message, and add an iMessage effect. reply_to_message_id: "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c", effect: "confetti", idempotency_key: idempotencyKey, }), signal: AbortSignal.timeout(10_000),});const data = await res.json();if (!res.ok) throw new Error(`${res.status} ${data.detail?.error}`);console.log(data.id, data.status);
import osimport uuidimport requestsAPI_KEY = os.environ["IBUBBL_API_KEY"]# One key per message: generate it once, and reuse it if you retry.idempotency_key = str(uuid.uuid4())res = requests.post( "https://api.ibubbl.com/v1/messages", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "to": "+14155551234", "body": "Hey Sam — quick check-in about your order.", # Optional: quote an earlier message, and add an iMessage effect. "reply_to_message_id": "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c", "effect": "confetti", "idempotency_key": idempotency_key, }, timeout=10,)data = res.json()if not res.ok: raise RuntimeError(f"{res.status_code} {data['detail']['error']}")print(data["id"], data["status"])
Method:POST | Endpoint:/v1/messagesDescription: Send a message to one contact (by contact_id or phone number), into an existing iMessage group (chat_guid), or to a new group (participant_phones). One-to-one messages can carry files by URL; see Send attachments. The call returns at once; delivery progress arrives as webhook events, or poll Retrieve a message.Authentication: API key in the Authorization header: Authorization: Bearer ib_pk_<64 hex>. Create keys in the dashboard under Settings → API access.
Send one-to-one to an existing contact. A deleted contact’s ID returns 404 not_found.
to
string (E.164, e.g. +14155551234)
Exactly one of these four
Send one-to-one by phone number. If no contact has this number, one is created.
chat_guid
string
Exactly one of these four
Send into an existing group. Read it from the response to a send into the group, or from Retrieve a message for any message in it. It changes when a participant is added; an old value returns 404 group_not_found.
participant_phones
array of strings (E.164)
Exactly one of these four
Create a new group and send the first message. At least 2 numbers; your iBubbl line is added automatically, so don’t include it.
group_name
string, at most 80 characters
No
Display name for the new group. Only allowed with participant_phones.
body
string, at least 1 character
Unless attachments is set
The message text. Plain text; emoji and Unicode are supported. For a line break, include a newline (\n in the JSON string); use \n, not \r\n. A retry with the same idempotency_key must send the identical body, line breaks included, or it returns 409 idempotency_conflict. With attachments it’s their caption. The first message to a contact must have one (422 first_message_needs_text).
attachments
array of 1–10 strings (https URLs)
No
Files to send: photos, GIFs, videos, PDFs or audio. iBubbl downloads each URL when the request arrives. One-to-one only (to or contact_id), and not with effect or reply_to_message_id. Types, size limits and the combinations allowed are in Send attachments. Allow up to 60 seconds for the response.
reply_to_message_id
string (UUID)
No
Send as an inline reply that quotes an earlier message: a message id, or the message_id of a message.inbound event. It must be in the conversation you’re sending to (the same contact, or the same group); otherwise 422 reply_target_not_found. iMessage only. Not allowed with participant_phones or attachments. See Reply and send with effects.
effect
string
No
An iMessage effect: slam, loud, gentle, invisible, echo, spotlight, balloons, confetti, love, lasers, fireworks, celebration or shooting_star. iMessage only. Not allowed with participant_phones or attachments.
idempotency_key
string, 1–128 characters
Yes
Your unique key for this send; a UUIDv4 is recommended. The same key with the same payload replays the original message; the same key with a different payload returns 409. A key whose message ended failed or expired is released, and a retry sends a new message. See Idempotency.
Fields not listed above are ignored without an error: the request still succeeds, and they are not stored.reply_to_message_id and effect only show on iMessage. If the message goes out as SMS (RCS included), it is sent as plain text without the quote or the effect, and the API doesn’t refuse it. channel on Retrieve a message tells you which way it went. Neither can be combined with attachments: that request is refused with 422 validation_error. Both fields count toward the idempotency payload when set.attachments count toward the idempotency payload too, in order. A replay never downloads them again. A request whose files can’t be downloaded or don’t meet the limits is refused with a 422 and creates no message; see Send attachments.
# One key per message: generate it once, and reuse it if you retry.IDEMPOTENCY_KEY=$(uuidgen)curl -X POST https://api.ibubbl.com/v1/messages \ -H "Authorization: Bearer $IBUBBL_API_KEY" \ -H "Content-Type: application/json" \ -d "{ \"to\": \"+14155551234\", \"body\": \"Hey Sam — quick check-in about your order.\", \"reply_to_message_id\": \"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\", \"effect\": \"confetti\", \"idempotency_key\": \"$IDEMPOTENCY_KEY\" }"
import { randomUUID } from "node:crypto";// One key per message: generate it once, and reuse it if you retry.const idempotencyKey = randomUUID();const res = await fetch("https://api.ibubbl.com/v1/messages", { method: "POST", headers: { Authorization: `Bearer ${process.env.IBUBBL_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ to: "+14155551234", body: "Hey Sam — quick check-in about your order.", // Optional: quote an earlier message, and add an iMessage effect. reply_to_message_id: "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c", effect: "confetti", idempotency_key: idempotencyKey, }), signal: AbortSignal.timeout(10_000),});const data = await res.json();if (!res.ok) throw new Error(`${res.status} ${data.detail?.error}`);console.log(data.id, data.status);
import osimport uuidimport requestsAPI_KEY = os.environ["IBUBBL_API_KEY"]# One key per message: generate it once, and reuse it if you retry.idempotency_key = str(uuid.uuid4())res = requests.post( "https://api.ibubbl.com/v1/messages", headers={"Authorization": f"Bearer {API_KEY}"}, json={ "to": "+14155551234", "body": "Hey Sam — quick check-in about your order.", # Optional: quote an earlier message, and add an iMessage effect. "reply_to_message_id": "5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c", "effect": "confetti", "idempotency_key": idempotency_key, }, timeout=10,)data = res.json()if not res.ok: raise RuntimeError(f"{res.status_code} {data['detail']['error']}")print(data["id"], data["status"])
status is pending or queued. A message held by a capacity limit or an offline line is still accepted with queued and retried automatically. A message waiting for the contact’s working hours or the line’s hourly limit for new contacts is pending, with held_until and held_reason set. For a group send, to is null and conversation_kind is "group"; a new group’s chat_guid is null until the group is created a few seconds later. effect and reply_to_message_id echo what you sent, or null. attachments lists the files the message carries, in your order, as kind (image, gif, video, audio or file), mime_type and size_bytes; it’s [] for a text message. direction is always outbound here, and created_at is when iBubbl recorded the message; it never changes, and it’s what List messages sorts and filters by.401 Unauthorized
{ "detail": { "error": "unauthorized", "message": "Invalid or revoked API key" }}
Other message values: Authorization Bearer token required, API key required (use Authorization: Bearer ib_pk_…), Invalid API key format, Customer account not found.403 Forbidden
{ "detail": { "error": "forbidden", "message": "Account is suspended" }}
Your iBubbl account is suspended or cancelled (message is then Account is cancelled). Every API-key endpoint returns this.404 Not Found
{ "detail": { "error": "not_found", "message": "Contact not found" }}
Also returned for a contact_id that is malformed, belongs to another account, or was deleted; send with to to reach the number again (that creates a new contact). Other error value: group_not_found (no group with that chat_guid on your account).409 Conflict
{ "detail": { "error": "idempotency_conflict", "message": "idempotency_key reused with a different request payload" }}
422 Unprocessable Entity
{ "detail": { "error": "validation_error", "message": "Exactly one of contact_id, to, chat_guid, or participant_phones is required" }}
Other error values: contact_opted_out, contact_blocked, no_eligible_line, unresponsive_contact, cold_cap_exhausted, daily_cap_exhausted, followup_cap_exhausted, group_outbound_blocked_suppression (with a blocked_phones list), insufficient_participants, reply_target_not_found, reply_target_unsent, reply_target_partly_unsent, and for attachments first_message_needs_text, attachment_fetch_failed, attachment_too_large, unsupported_attachment and attachment_combination_not_supported. See Errors.429 Too Many Requests
{ "detail": { "error": "rate_limited", "message": "Too many attachment sends in progress; wait 5s and retry with the same idempotency_key." }}
Sends with attachments only, and rarely: iBubbl is already downloading as many attachment sends as it can. The Retry-After header says how many seconds to wait (5); then send the same request with the same idempotency_key. Text-only sends never get a 429.500 Internal Server Error
{ "detail": { "error": "no_owner_rep", "message": "Customer is missing an Owner rep" }}
Other error value: internal_error. Retry with the same idempotency_key.
Client-supplied unique key per logical send. Keys never expire: reusing a key with the same payload replays the original message, however long ago it was sent, and the same key with a different payload returns 409 idempotency_conflict. The one exception is a message that ended failed or expired: its key is released and the retry is sent as a new message. The payload compared is the routing field exactly as sent (to, contact_id, chat_guid, or the sorted participant_phones plus group_name), body, and effect, reply_to_message_id and attachments when set, so a retry that switches from to to the same contact's contact_id is a 409. Generate a new UUIDv4 for every distinct message.
1:1 send by E.164 phone number (e.g. +14155551234). If the number doesn't match an existing contact, one is created automatically. Mutually exclusive with contact_id, chat_guid, and participant_phones.
Send into an existing iMessage group identified by its opaque chat_guid (e.g. any;+;<hex>). Webhook events don't carry it: read it from the response to a send into the group, or from GET /v1/messages/{id} for any message in the group (an inbound message_id works too). The value changes when a participant is added to the group; an old value then returns 404 group_not_found. Mutually exclusive with contact_id, to, and participant_phones.
Create a brand-new iMessage group and send the first message in one call. List of 2 or more E.164 phone numbers (your iBubbl line is added automatically; do not include it). Mutually exclusive with contact_id, to, and chat_guid. Optionally pair with group_name to set the group's display name.
Display name for a new iMessage group. Only valid alongside participant_phones. Optional — iMessage will fall back to the participants' names if omitted.
The message text. Plain text only; emoji + Unicode are supported. For a line break, include a newline (\n in the JSON string); use \n, not \r\n. A retry with the same idempotency_key must send the identical body, line breaks included, or it returns 409 idempotency_conflict. Required unless attachments is set; with attachments it is sent as their caption, and it is required for the first message to a contact (422 first_message_needs_text).
Up to 10 files to send, each an https URL iBubbl downloads when the request arrives. Images (JPEG, PNG, WebP, HEIC, HEIF) and GIFs up to 25 MiB each, MP4/MOV video up to 50 MiB, PDF up to 10 MB, audio (MP3, M4A, AAC) up to 25 MiB on its own; 86 MB in all. With other files, audio must be one MP3 of at most 2 MB. The type comes from the response's Content-Type (or the URL's extension when that is application/octet-stream). A URL that can't be downloaded, or a file that breaks these rules, rejects the whole request (422 attachment_fetch_failed, attachment_too_large, unsupported_attachment, attachment_combination_not_supported) and nothing is sent. Only with to or contact_id, and not with effect or reply_to_message_id. The URLs, in order, are part of the payload compared for idempotency; a replay never downloads them again.
Send as an inline reply that quotes an earlier message (a UUID: the id of a message, or the message_id of a message.inbound event). The message must be in the conversation you are sending to: the same contact for a 1:1 send, the same group for a chat_guid send; otherwise 422 reply_target_not_found. A message the contact unsent returns 422 reply_target_unsent, and one they unsent part of 422 reply_target_partly_unsent. iMessage only: when the message goes out as SMS (see channel) it is sent as plain text, without the quote. Not allowed with participant_phones or attachments.
An iMessage send effect. Bubble effects: slam, loud, gentle, invisible (Invisible Ink). Screen effects: echo, spotlight, balloons, confetti, love, lasers, fireworks, celebration, shooting_star. iMessage only: when the message goes out as SMS (see channel) it is sent without the effect. Not allowed with participant_phones or attachments.
outbound = sent from your line (through the API, the dashboard or an automation); inbound = received from a contact. An inbound message has statusdelivered, or read once it has been read in the dashboard.
ISO 8601 UTC timestamp, with microseconds and a Z, of when iBubbl recorded the message. It never changes, so it is what GET /v1/messages sorts and filters by; pass it back as created_after / created_before unchanged.
Lifecycle state. pending = accepted and on its way out; it may be waiting for the contact's working hours or the line's hourly limit for new contacts (see held_until). queued = parked by a capacity hold (hourly_cap_hit / line_offline), retried automatically. sent / delivered / read = delivery progression. failed = the send failed — see webhook message.failed for the reason; it can follow sent (or a read with no confirmed delivery) when iMessage reports the send failed after accepting it (failed_reasonimessage_undeliverable / imessage_error:<code>), and such a message can still move to delivered / read if Apple later confirms it. expired = still queued after an hour, so dropped; it will not send. cancelled = stopped in the dashboard before it was sent; it will not send (webhook message.cancelled).
The files on this message, in the order they were sent: sent with attachments, from the dashboard or an automation, or received from the contact. Empty when there are none. File contents and URLs are not returned.
The contact's phone number (E.164) for 1:1 messages: the destination of an outbound message, and the sender of an inbound one. Null for group messages — the group is identified by chat_guid instead.
ID of the contact this message was sent to. For groups, this is the 'primary' participant the message was addressed to (the first participant in participant_phones on a new group create); the conversation's full participant list is available via the conversation.
Opaque identifier for the group chat (e.g. any;+;<hex>). Returned for group messages — use it to address later messages to the same group via the chat_guid request shape. Null for one_to_one messages, and for a brand-new group until the group has been created in iMessage (that happens when the first message goes out, which can wait for sending hours); poll GET /v1/messages/{id} to see it fill in. It changes when a participant is added to the group.
How the message travelled: imessage, or sms (a text, including RCS). For an outbound message, how it actually went out (sms when the recipient couldn't be reached on iMessage); null until it has been sent. For an inbound message, how it arrived; null when that wasn't recorded.
ISO 8601 UTC timestamp. Set when the message is accepted, then replaced by the actual send time once it goes out. Use status (sent / delivered / read), not sent_at, to tell whether it has actually gone out.
While a pending message is being held, the expected time (ISO 8601 UTC) it will go out: the next opening of the contact's working hours; for hourly_limit, an estimate of when a slot frees. Recomputed within about 10 seconds. Null when the message is not held, when held_reason is working_hours but no sending day is enabled, and when it is hourly_limit with no estimate.
Why a pending message is being held right now: working_hours (outside the contact's working hours) or hourly_limit (the line has started its limit of new contacts for this hour; the message goes out by itself when a slot frees, at about held_until). Null when it is not held.
The ID of the message this one quotes as an inline reply, or null. The quote shows on the recipient's device only when channel is imessage.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"iBubbl","colors":{"primary":"#3B82F6","light":"#60A5FA","dark":"#2563EB"},"logo":{"light":"https://mintcdn.com/ibubbl/vKOMJPyDWV9K1NYc/logo/light.png?fit=max\u0026auto=format\u0026n=vKOMJPyDWV9K1NYc\u0026q=85\u0026s=b8846160ee4db226f79f0e4f7f331870","dark":"https://mintcdn.com/ibubbl/vKOMJPyDWV9K1NYc/logo/dark.png?fit=max\u0026auto=format\u0026n=vKOMJPyDWV9K1NYc\u0026q=85\u0026s=0067c7441443a7b4d08cfd7357f9c219"},"favicon":"https://mintcdn.com/ibubbl/vKOMJPyDWV9K1NYc/favicon.ico?fit=max\u0026auto=format\u0026n=vKOMJPyDWV9K1NYc\u0026q=85\u0026s=e6bd8c62275573958611eefad9499589","api":{"openapi":"openapi/public.json","playground":{"display":"simple"},"examples":{"languages":["curl","typescript","python"]}},"navbar":{"links":[{"href":"https://ibubbl-dashboard.vercel.app","label":"Dashboard"}],"primary":{"type":"button","label":"Sign up","href":"https://ibubbl-dashboard.vercel.app/signup"}},"contextual":{"options":["copy","view","chatgpt","claude","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"ibubbl","hasAudioNarration":false,"actualSubdomain":"ibubbl","customDomains":["docs.ibubbl.com"],"gitSource":{"type":"github","owner":"piter-chern","repo":"ibubbl-docs","deployBranch":"main","contentDirectory":"","isPrivate":false,"mountPath":"","label":""},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6af49652c5d18096e68004bc","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"API reference","count":18},{"language":"default","tag":"Contacts","count":10},{"language":"default","tag":"Concepts","count":9},{"language":"default","tag":"Guides","count":7},{"language":"default","tag":"Webhooks","count":6},{"language":"default","tag":"Resources","count":5},{"language":"default","tag":"Get started","count":4},{"language":"default","tag":"Messages","count":3},{"language":"default","tag":"Inbound events","count":1}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/messages/send","slug":"/api-reference/messages/send","pageMetadata":{"title":"Send a message","openapi":"POST /v1/messages","description":"Send a message to one contact (`contact_id`, or `to` — an E.164 phone number; the contact is created on first use), into an existing group (`chat_guid`), or to a new group (`participant_phones`). Exactly one of the four is required.\n\nThe response returns immediately with `status: \"pending\"` or `\"queued\"`. Delivery progress arrives as [webhook events](/webhooks/events) (`message.sent`, `message.delivered`, `message.read`, `message.failed`), or poll `GET /v1/messages/{id}`.\n\n**Idempotency is required.** Provide a unique `idempotency_key` per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns `409 idempotency_conflict`. See the [Idempotency](/idempotency) guide.\n\nA send to an opted-out contact returns `422 contact_opted_out`; see [Suppression](/concepts/suppression).\n\nTo send files, list up to 10 `https` URLs in `attachments` (1:1 only); `body`, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See [Attachments](/guides/attachments).\n\nOn a `5xx` (including a `502`/`503` from the network edge during a deploy), retry with the same `idempotency_key`.","href":"/api-reference/messages/send"},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n strong: \"strong\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"Send a message to one contact (\", _jsx(_components.code, {\n children: \"contact_id\"\n }), \", or \", _jsx(_components.code, {\n children: \"to\"\n }), \" — an E.164 phone number; the contact is created on first use), into an existing group (\", _jsx(_components.code, {\n children: \"chat_guid\"\n }), \"), or to a new group (\", _jsx(_components.code, {\n children: \"participant_phones\"\n }), \"). Exactly one of the four is required.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"The response returns immediately with \", _jsx(_components.code, {\n children: \"status: \\\"pending\\\"\"\n }), \" or \", _jsx(_components.code, {\n children: \"\\\"queued\\\"\"\n }), \". Delivery progress arrives as \", _jsx(_components.a, {\n href: \"/webhooks/events\",\n children: \"webhook events\"\n }), \" (\", _jsx(_components.code, {\n children: \"message.sent\"\n }), \", \", _jsx(_components.code, {\n children: \"message.delivered\"\n }), \", \", _jsx(_components.code, {\n children: \"message.read\"\n }), \", \", _jsx(_components.code, {\n children: \"message.failed\"\n }), \"), or poll \", _jsx(_components.code, {\n children: \"GET /v1/messages/{id}\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.strong, {\n children: \"Idempotency is required.\"\n }), \" Provide a unique \", _jsx(_components.code, {\n children: \"idempotency_key\"\n }), \" per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns \", _jsx(_components.code, {\n children: \"409 idempotency_conflict\"\n }), \". See the \", _jsx(_components.a, {\n href: \"/idempotency\",\n children: \"Idempotency\"\n }), \" guide.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"A send to an opted-out contact returns \", _jsx(_components.code, {\n children: \"422 contact_opted_out\"\n }), \"; see \", _jsx(_components.a, {\n href: \"/concepts/suppression\",\n children: \"Suppression\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"To send files, list up to 10 \", _jsx(_components.code, {\n children: \"https\"\n }), \" URLs in \", _jsx(_components.code, {\n children: \"attachments\"\n }), \" (1:1 only); \", _jsx(_components.code, {\n children: \"body\"\n }), \", if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See \", _jsx(_components.a, {\n href: \"/guides/attachments\",\n children: \"Attachments\"\n }), \".\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"On a \", _jsx(_components.code, {\n children: \"5xx\"\n }), \" (including a \", _jsx(_components.code, {\n children: \"502\"\n }), \"/\", _jsx(_components.code, {\n children: \"503\"\n }), \" from the network edge during a deploy), retry with the same \", _jsx(_components.code, {\n children: \"idempotency_key\"\n }), \".\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`3`,id:`send-a-message`,children:`Send a message`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Method:`}),` `,_jsx(_components.code,{children:`POST`}),` | `,_jsx(_components.strong,{children:`Endpoint:`}),` `,_jsx(_components.code,{children:`/v1/messages`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Description:`}),` Send a message to one contact (by `,_jsx(_components.code,{children:`contact_id`}),` or phone number), into an existing iMessage group (`,_jsx(_components.code,{children:`chat_guid`}),`), or to a new group (`,_jsx(_components.code,{children:`participant_phones`}),`). One-to-one messages can carry files by URL; see `,_jsx(_components.a,{href:`/guides/attachments`,children:`Send attachments`}),`. The call returns at once; delivery progress arrives as `,_jsx(_components.a,{href:`/webhooks/events`,children:`webhook events`}),`, or poll `,_jsx(_components.a,{href:`/api-reference/messages/retrieve`,children:`Retrieve a message`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Authentication:`}),` API key in the `,_jsx(_components.code,{children:`Authorization`}),` header: `,_jsx(_components.code,{children:`Authorization: Bearer ib_pk_\u003c64 hex>`}),`. Create keys in the dashboard under `,_jsx(_components.strong,{children:`Settings → API access`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`request-body`,children:`Request Body`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`contact_id`})}),_jsx(_components.td,{children:`string (UUID)`}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsxs(_components.td,{children:[`Send one-to-one to an existing contact. A deleted contact’s ID returns `,_jsx(_components.code,{children:`404 not_found`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`to`})}),_jsxs(_components.td,{children:[`string (E.164, e.g. `,_jsx(_components.code,{children:`+14155551234`}),`)`]}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsx(_components.td,{children:`Send one-to-one by phone number. If no contact has this number, one is created.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chat_guid`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsxs(_components.td,{children:[`Send into an existing group. Read it from the response to a send into the group, or from `,_jsx(_components.a,{href:`/api-reference/messages/retrieve`,children:`Retrieve a message`}),` for any message in it. It changes when a participant is added; an old value returns `,_jsx(_components.code,{children:`404 group_not_found`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`participant_phones`})}),_jsx(_components.td,{children:`array of strings (E.164)`}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsx(_components.td,{children:`Create a new group and send the first message. At least 2 numbers; your iBubbl line is added automatically, so don’t include it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`group_name`})}),_jsx(_components.td,{children:`string, at most 80 characters`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Display name for the new group. Only allowed with `,_jsx(_components.code,{children:`participant_phones`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`body`})}),_jsx(_components.td,{children:`string, at least 1 character`}),_jsxs(_components.td,{children:[`Unless `,_jsx(_components.code,{children:`attachments`}),` is set`]}),_jsxs(_components.td,{children:[`The message text. Plain text; emoji and Unicode are supported. For a line break, include a newline (`,_jsx(_components.code,{children:`\\\\n`}),` in the JSON string); use `,_jsx(_components.code,{children:`\\\\n`}),`, not `,_jsx(_components.code,{children:`\\\\r\\\\n`}),`. A retry with the same `,_jsx(_components.code,{children:`idempotency_key`}),` must send the identical body, line breaks included, or it returns `,_jsx(_components.code,{children:`409 idempotency_conflict`}),`. With `,_jsx(_components.code,{children:`attachments`}),` it’s their caption. The first message to a contact must have one (`,_jsx(_components.code,{children:`422 first_message_needs_text`}),`).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`attachments`})}),_jsxs(_components.td,{children:[`array of 1–10 strings (`,_jsx(_components.code,{children:`https`}),` URLs)`]}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Files to send: photos, GIFs, videos, PDFs or audio. iBubbl downloads each URL when the request arrives. One-to-one only (`,_jsx(_components.code,{children:`to`}),` or `,_jsx(_components.code,{children:`contact_id`}),`), and not with `,_jsx(_components.code,{children:`effect`}),` or `,_jsx(_components.code,{children:`reply_to_message_id`}),`. Types, size limits and the combinations allowed are in `,_jsx(_components.a,{href:`/guides/attachments#supported-files-and-limits`,children:`Send attachments`}),`. Allow up to 60 seconds for the response.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`reply_to_message_id`})}),_jsx(_components.td,{children:`string (UUID)`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Send as an inline reply that quotes an earlier message: a message `,_jsx(_components.code,{children:`id`}),`, or the `,_jsx(_components.code,{children:`message_id`}),` of a `,_jsx(_components.a,{href:`/webhooks/events`,children:_jsx(_components.code,{children:`message.inbound`})}),` event. It must be in the conversation you’re sending to (the same contact, or the same group); otherwise `,_jsx(_components.code,{children:`422 reply_target_not_found`}),`. iMessage only. Not allowed with `,_jsx(_components.code,{children:`participant_phones`}),` or `,_jsx(_components.code,{children:`attachments`}),`. See `,_jsx(_components.a,{href:`/guides/send-messages#reply-to-a-message-and-send-with-effects`,children:`Reply and send with effects`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`effect`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`An iMessage effect: `,_jsx(_components.code,{children:`slam`}),`, `,_jsx(_components.code,{children:`loud`}),`, `,_jsx(_components.code,{children:`gentle`}),`, `,_jsx(_components.code,{children:`invisible`}),`, `,_jsx(_components.code,{children:`echo`}),`, `,_jsx(_components.code,{children:`spotlight`}),`, `,_jsx(_components.code,{children:`balloons`}),`, `,_jsx(_components.code,{children:`confetti`}),`, `,_jsx(_components.code,{children:`love`}),`, `,_jsx(_components.code,{children:`lasers`}),`, `,_jsx(_components.code,{children:`fireworks`}),`, `,_jsx(_components.code,{children:`celebration`}),` or `,_jsx(_components.code,{children:`shooting_star`}),`. iMessage only. Not allowed with `,_jsx(_components.code,{children:`participant_phones`}),` or `,_jsx(_components.code,{children:`attachments`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idempotency_key`})}),_jsx(_components.td,{children:`string, 1–128 characters`}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`Your unique key for this send; a UUIDv4 is recommended. The same key with the same payload replays the original message; the same key with a different payload returns `,_jsx(_components.code,{children:`409`}),`. A key whose message ended `,_jsx(_components.code,{children:`failed`}),` or `,_jsx(_components.code,{children:`expired`}),` is released, and a retry sends a new message. See `,_jsx(_components.a,{href:`/idempotency`,children:`Idempotency`}),`.`]})]})]})]}),`\n`,_jsx(_components.p,{children:`Fields not listed above are ignored without an error: the request still succeeds, and they are not stored.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reply_to_message_id`}),` and `,_jsx(_components.code,{children:`effect`}),` only show on iMessage. If the message goes out as SMS (RCS included), it is sent as plain text without the quote or the effect, and the API doesn’t refuse it. `,_jsx(_components.code,{children:`channel`}),` on `,_jsx(_components.a,{href:`/api-reference/messages/retrieve`,children:`Retrieve a message`}),` tells you which way it went. Neither can be combined with `,_jsx(_components.code,{children:`attachments`}),`: that request is refused with `,_jsx(_components.code,{children:`422 validation_error`}),`. Both fields count toward the `,_jsx(_components.a,{href:`/idempotency`,children:`idempotency`}),` payload when set.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`attachments`}),` count toward the idempotency payload too, in order. A replay never downloads them again. A request whose files can’t be downloaded or don’t meet the limits is refused with a `,_jsx(_components.code,{children:`422`}),` and creates no message; see `,_jsx(_components.a,{href:`/guides/attachments#errors`,children:`Send attachments`}),`.`]}),`\n`,`\n`,`\n`,_jsx(Heading,{level:`4`,id:`responses`,children:`Responses`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`202 Accepted`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`19`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"direction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"outbound\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-05T15:04:10.112730Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pending\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"to\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+14155551234\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"body\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Hey Sam — quick check-in about your order.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"contact_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conversation_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conversation_kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"one_to_one\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"chat_guid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"channel\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sent_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-05T15:04:10.112Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"held_until\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"held_reason\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"reply_to_message_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attachments\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: []`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`pending`}),` or `,_jsx(_components.code,{children:`queued`}),`. A message held by a capacity limit or an offline line is still accepted with `,_jsx(_components.code,{children:`queued`}),` and retried automatically. A message waiting for the contact’s `,_jsx(_components.a,{href:`/concepts/working-hours`,children:`working hours`}),` or the line’s hourly limit for new contacts is `,_jsx(_components.code,{children:`pending`}),`, with `,_jsx(_components.code,{children:`held_until`}),` and `,_jsx(_components.code,{children:`held_reason`}),` set. For a group send, `,_jsx(_components.code,{children:`to`}),` is `,_jsx(_components.code,{children:`null`}),` and `,_jsx(_components.code,{children:`conversation_kind`}),` is `,_jsx(_components.code,{children:`\"group\"`}),`; a new group’s `,_jsx(_components.code,{children:`chat_guid`}),` is `,_jsx(_components.code,{children:`null`}),` until the group is created a few seconds later. `,_jsx(_components.code,{children:`effect`}),` and `,_jsx(_components.code,{children:`reply_to_message_id`}),` echo what you sent, or `,_jsx(_components.code,{children:`null`}),`. `,_jsx(_components.code,{children:`attachments`}),` lists the files the message carries, in your order, as `,_jsx(_components.code,{children:`kind`}),` (`,_jsx(_components.code,{children:`image`}),`, `,_jsx(_components.code,{children:`gif`}),`, `,_jsx(_components.code,{children:`video`}),`, `,_jsx(_components.code,{children:`audio`}),` or `,_jsx(_components.code,{children:`file`}),`), `,_jsx(_components.code,{children:`mime_type`}),` and `,_jsx(_components.code,{children:`size_bytes`}),`; it’s `,_jsx(_components.code,{children:`[]`}),` for a text message. `,_jsx(_components.code,{children:`direction`}),` is always `,_jsx(_components.code,{children:`outbound`}),` here, and `,_jsx(_components.code,{children:`created_at`}),` is when iBubbl recorded the message; it never changes, and it’s what `,_jsx(_components.a,{href:`/api-reference/messages/list`,children:`List messages`}),` sorts and filters by.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`401 Unauthorized`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"unauthorized\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid or revoked API key\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Other `,_jsx(_components.code,{children:`message`}),` values: `,_jsx(_components.code,{children:`Authorization Bearer token required`}),`, `,_jsx(_components.code,{children:`API key required (use Authorization: Bearer ib_pk_…)`}),`, `,_jsx(_components.code,{children:`Invalid API key format`}),`, `,_jsx(_components.code,{children:`Customer account not found`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`403 Forbidden`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"forbidden\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Account is suspended\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Your iBubbl account is suspended or cancelled (`,_jsx(_components.code,{children:`message`}),` is then `,_jsx(_components.code,{children:`Account is cancelled`}),`). Every API-key endpoint returns this.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`404 Not Found`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"not_found\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Contact not found\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Also returned for a `,_jsx(_components.code,{children:`contact_id`}),` that is malformed, belongs to another account, or was `,_jsx(_components.a,{href:`/api-reference/contacts/delete`,children:`deleted`}),`; send with `,_jsx(_components.code,{children:`to`}),` to reach the number again (that creates a new contact). Other `,_jsx(_components.code,{children:`error`}),` value: `,_jsx(_components.code,{children:`group_not_found`}),` (no group with that `,_jsx(_components.code,{children:`chat_guid`}),` on your account).`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`409 Conflict`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"idempotency_conflict\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"idempotency_key reused with a different request payload\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`422 Unprocessable Entity`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"validation_error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Exactly one of contact_id, to, chat_guid, or participant_phones is required\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Other `,_jsx(_components.code,{children:`error`}),` values: `,_jsx(_components.code,{children:`contact_opted_out`}),`, `,_jsx(_components.code,{children:`contact_blocked`}),`, `,_jsx(_components.code,{children:`no_eligible_line`}),`, `,_jsx(_components.code,{children:`unresponsive_contact`}),`, `,_jsx(_components.code,{children:`cold_cap_exhausted`}),`, `,_jsx(_components.code,{children:`daily_cap_exhausted`}),`, `,_jsx(_components.code,{children:`followup_cap_exhausted`}),`, `,_jsx(_components.code,{children:`group_outbound_blocked_suppression`}),` (with a `,_jsx(_components.code,{children:`blocked_phones`}),` list), `,_jsx(_components.code,{children:`insufficient_participants`}),`, `,_jsx(_components.code,{children:`reply_target_not_found`}),`, `,_jsx(_components.code,{children:`reply_target_unsent`}),`, `,_jsx(_components.code,{children:`reply_target_partly_unsent`}),`, and for attachments `,_jsx(_components.code,{children:`first_message_needs_text`}),`, `,_jsx(_components.code,{children:`attachment_fetch_failed`}),`, `,_jsx(_components.code,{children:`attachment_too_large`}),`, `,_jsx(_components.code,{children:`unsupported_attachment`}),` and `,_jsx(_components.code,{children:`attachment_combination_not_supported`}),`. See `,_jsx(_components.a,{href:`/errors`,children:`Errors`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`429 Too Many Requests`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"rate_limited\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Too many attachment sends in progress; wait 5s and retry with the same idempotency_key.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Sends with `,_jsx(_components.code,{children:`attachments`}),` only, and rarely: iBubbl is already downloading as many attachment sends as it can. The `,_jsx(_components.code,{children:`Retry-After`}),` header says how many seconds to wait (5); then send the same request with the same `,_jsx(_components.code,{children:`idempotency_key`}),`. Text-only sends never get a `,_jsx(_components.code,{children:`429`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`500 Internal Server Error`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"no_owner_rep\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Customer is missing an Owner rep\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Other `,_jsx(_components.code,{children:`error`}),` value: `,_jsx(_components.code,{children:`internal_error`}),`. Retry with the same `,_jsx(_components.code,{children:`idempotency_key`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Send a message","openapi":"POST /v1/messages","description":"Send a message to one contact (`contact_id`, or `to` — an E.164 phone number; the contact is created on first use), into an existing group (`chat_guid`), or to a new group (`participant_phones`). Exactly one of the four is required.\n\nThe response returns immediately with `status: \"pending\"` or `\"queued\"`. Delivery progress arrives as [webhook events](/webhooks/events) (`message.sent`, `message.delivered`, `message.read`, `message.failed`), or poll `GET /v1/messages/{id}`.\n\n**Idempotency is required.** Provide a unique `idempotency_key` per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns `409 idempotency_conflict`. See the [Idempotency](/idempotency) guide.\n\nA send to an opted-out contact returns `422 contact_opted_out`; see [Suppression](/concepts/suppression).\n\nTo send files, list up to 10 `https` URLs in `attachments` (1:1 only); `body`, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See [Attachments](/guides/attachments).\n\nOn a `5xx` (including a `502`/`503` from the network edge during a deploy), retry with the same `idempotency_key`.","href":"/api-reference/messages/send"}}},"mdxSourceWithNoJs":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx,jsxs:_jsxs}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){const _components={a:`a`,code:`code`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,..._provideComponents(),...props.components},{CodeBlock,Heading,RequestExample,ResponseExample,Table}=_components;if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!Table)_missingMdxReference(`Table`,true);return _jsxs(_Fragment,{children:[_jsx(Heading,{level:`3`,id:`send-a-message`,children:`Send a message`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Method:`}),` `,_jsx(_components.code,{children:`POST`}),` | `,_jsx(_components.strong,{children:`Endpoint:`}),` `,_jsx(_components.code,{children:`/v1/messages`})]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Description:`}),` Send a message to one contact (by `,_jsx(_components.code,{children:`contact_id`}),` or phone number), into an existing iMessage group (`,_jsx(_components.code,{children:`chat_guid`}),`), or to a new group (`,_jsx(_components.code,{children:`participant_phones`}),`). One-to-one messages can carry files by URL; see `,_jsx(_components.a,{href:`/guides/attachments`,children:`Send attachments`}),`. The call returns at once; delivery progress arrives as `,_jsx(_components.a,{href:`/webhooks/events`,children:`webhook events`}),`, or poll `,_jsx(_components.a,{href:`/api-reference/messages/retrieve`,children:`Retrieve a message`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Authentication:`}),` API key in the `,_jsx(_components.code,{children:`Authorization`}),` header: `,_jsx(_components.code,{children:`Authorization: Bearer ib_pk_\u003c64 hex>`}),`. Create keys in the dashboard under `,_jsx(_components.strong,{children:`Settings → API access`}),`.`]}),`\n`,_jsx(Heading,{level:`4`,id:`request-body`,children:`Request Body`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Field`}),_jsx(_components.th,{children:`Type`}),_jsx(_components.th,{children:`Required`}),_jsx(_components.th,{children:`Description`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`contact_id`})}),_jsx(_components.td,{children:`string (UUID)`}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsxs(_components.td,{children:[`Send one-to-one to an existing contact. A deleted contact’s ID returns `,_jsx(_components.code,{children:`404 not_found`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`to`})}),_jsxs(_components.td,{children:[`string (E.164, e.g. `,_jsx(_components.code,{children:`+14155551234`}),`)`]}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsx(_components.td,{children:`Send one-to-one by phone number. If no contact has this number, one is created.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`chat_guid`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsxs(_components.td,{children:[`Send into an existing group. Read it from the response to a send into the group, or from `,_jsx(_components.a,{href:`/api-reference/messages/retrieve`,children:`Retrieve a message`}),` for any message in it. It changes when a participant is added; an old value returns `,_jsx(_components.code,{children:`404 group_not_found`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`participant_phones`})}),_jsx(_components.td,{children:`array of strings (E.164)`}),_jsx(_components.td,{children:`Exactly one of these four`}),_jsx(_components.td,{children:`Create a new group and send the first message. At least 2 numbers; your iBubbl line is added automatically, so don’t include it.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`group_name`})}),_jsx(_components.td,{children:`string, at most 80 characters`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Display name for the new group. Only allowed with `,_jsx(_components.code,{children:`participant_phones`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`body`})}),_jsx(_components.td,{children:`string, at least 1 character`}),_jsxs(_components.td,{children:[`Unless `,_jsx(_components.code,{children:`attachments`}),` is set`]}),_jsxs(_components.td,{children:[`The message text. Plain text; emoji and Unicode are supported. For a line break, include a newline (`,_jsx(_components.code,{children:`\\\\n`}),` in the JSON string); use `,_jsx(_components.code,{children:`\\\\n`}),`, not `,_jsx(_components.code,{children:`\\\\r\\\\n`}),`. A retry with the same `,_jsx(_components.code,{children:`idempotency_key`}),` must send the identical body, line breaks included, or it returns `,_jsx(_components.code,{children:`409 idempotency_conflict`}),`. With `,_jsx(_components.code,{children:`attachments`}),` it’s their caption. The first message to a contact must have one (`,_jsx(_components.code,{children:`422 first_message_needs_text`}),`).`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`attachments`})}),_jsxs(_components.td,{children:[`array of 1–10 strings (`,_jsx(_components.code,{children:`https`}),` URLs)`]}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Files to send: photos, GIFs, videos, PDFs or audio. iBubbl downloads each URL when the request arrives. One-to-one only (`,_jsx(_components.code,{children:`to`}),` or `,_jsx(_components.code,{children:`contact_id`}),`), and not with `,_jsx(_components.code,{children:`effect`}),` or `,_jsx(_components.code,{children:`reply_to_message_id`}),`. Types, size limits and the combinations allowed are in `,_jsx(_components.a,{href:`/guides/attachments#supported-files-and-limits`,children:`Send attachments`}),`. Allow up to 60 seconds for the response.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`reply_to_message_id`})}),_jsx(_components.td,{children:`string (UUID)`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`Send as an inline reply that quotes an earlier message: a message `,_jsx(_components.code,{children:`id`}),`, or the `,_jsx(_components.code,{children:`message_id`}),` of a `,_jsx(_components.a,{href:`/webhooks/events`,children:_jsx(_components.code,{children:`message.inbound`})}),` event. It must be in the conversation you’re sending to (the same contact, or the same group); otherwise `,_jsx(_components.code,{children:`422 reply_target_not_found`}),`. iMessage only. Not allowed with `,_jsx(_components.code,{children:`participant_phones`}),` or `,_jsx(_components.code,{children:`attachments`}),`. See `,_jsx(_components.a,{href:`/guides/send-messages#reply-to-a-message-and-send-with-effects`,children:`Reply and send with effects`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`effect`})}),_jsx(_components.td,{children:`string`}),_jsx(_components.td,{children:`No`}),_jsxs(_components.td,{children:[`An iMessage effect: `,_jsx(_components.code,{children:`slam`}),`, `,_jsx(_components.code,{children:`loud`}),`, `,_jsx(_components.code,{children:`gentle`}),`, `,_jsx(_components.code,{children:`invisible`}),`, `,_jsx(_components.code,{children:`echo`}),`, `,_jsx(_components.code,{children:`spotlight`}),`, `,_jsx(_components.code,{children:`balloons`}),`, `,_jsx(_components.code,{children:`confetti`}),`, `,_jsx(_components.code,{children:`love`}),`, `,_jsx(_components.code,{children:`lasers`}),`, `,_jsx(_components.code,{children:`fireworks`}),`, `,_jsx(_components.code,{children:`celebration`}),` or `,_jsx(_components.code,{children:`shooting_star`}),`. iMessage only. Not allowed with `,_jsx(_components.code,{children:`participant_phones`}),` or `,_jsx(_components.code,{children:`attachments`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`idempotency_key`})}),_jsx(_components.td,{children:`string, 1–128 characters`}),_jsx(_components.td,{children:`Yes`}),_jsxs(_components.td,{children:[`Your unique key for this send; a UUIDv4 is recommended. The same key with the same payload replays the original message; the same key with a different payload returns `,_jsx(_components.code,{children:`409`}),`. A key whose message ended `,_jsx(_components.code,{children:`failed`}),` or `,_jsx(_components.code,{children:`expired`}),` is released, and a retry sends a new message. See `,_jsx(_components.a,{href:`/idempotency`,children:`Idempotency`}),`.`]})]})]})]}),`\n`,_jsx(_components.p,{children:`Fields not listed above are ignored without an error: the request still succeeds, and they are not stored.`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`reply_to_message_id`}),` and `,_jsx(_components.code,{children:`effect`}),` only show on iMessage. If the message goes out as SMS (RCS included), it is sent as plain text without the quote or the effect, and the API doesn’t refuse it. `,_jsx(_components.code,{children:`channel`}),` on `,_jsx(_components.a,{href:`/api-reference/messages/retrieve`,children:`Retrieve a message`}),` tells you which way it went. Neither can be combined with `,_jsx(_components.code,{children:`attachments`}),`: that request is refused with `,_jsx(_components.code,{children:`422 validation_error`}),`. Both fields count toward the `,_jsx(_components.a,{href:`/idempotency`,children:`idempotency`}),` payload when set.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`attachments`}),` count toward the idempotency payload too, in order. A replay never downloads them again. A request whose files can’t be downloaded or don’t meet the limits is refused with a `,_jsx(_components.code,{children:`422`}),` and creates no message; see `,_jsx(_components.a,{href:`/guides/attachments#errors`,children:`Send attachments`}),`.`]}),`\n`,_jsxs(RequestExample,{children:[_jsx(CodeBlock,{filename:`cURL`,numberOfLines:`13`,language:`shellscript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`shellscript`,children:_jsxs(_components.code,{language:`shellscript`,numberOfLines:`13`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# One key per message: generate it once, and reuse it if you retry.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`IDEMPOTENCY_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`$(`}),_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`uuidgen`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`curl`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -X`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` POST`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` https://api.ibubbl.com/v1/messages`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Authorization: Bearer `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$IBUBBL_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -H`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type: application/json\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:` -d`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`to`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`+14155551234`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`body`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Hey Sam — quick check-in about your order.`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`reply_to_message_id`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`effect`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`confetti`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:` \\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`idempotency_key`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`$IDEMPOTENCY_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }\"`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`TypeScript`,numberOfLines:`25`,language:`typescript`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`typescript`,children:_jsxs(_components.code,{language:`typescript`,numberOfLines:`25`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` { `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`randomUUID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` } `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`from`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"node:crypto\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`;`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`// One key per message: generate it once, and reuse it if you retry.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` idempotencyKey`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` randomUUID`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` res`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` fetch`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"https://api.ibubbl.com/v1/messages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` method:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"POST\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` headers:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` Authorization:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\" `Bearer \"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`process`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`env`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:`IBUBBL_API_KEY`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Content-Type\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"application/json\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` body:`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` JSON`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`stringify`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`({`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` to:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"+14155551234\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` body:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"Hey Sam — quick check-in about your order.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` // Optional: quote an earlier message, and add an iMessage effect.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` reply_to_message_id:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` effect:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"confetti\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` idempotency_key:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` idempotencyKey`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }),`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` signal:`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` AbortSignal`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`timeout`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10_000`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`),`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`});`})}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`const`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4FC1FF`},children:` data`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` await`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:` res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`json`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`();`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` (`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`!`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`ok`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`) `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`throw`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` new`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:` Error`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\"${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`res`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:\" ${\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`detail`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#D4D4D4`},children:`?.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`error`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:\"`\"}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`console`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#8250DF`,\"--shiki-dark\":`#DCDCAA`},children:`log`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`id`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`data`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`.`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#9CDCFE`},children:`status`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`);`})]}),`\n`]})})}),_jsx(CodeBlock,{filename:`Python`,numberOfLines:`27`,language:`python`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`python`,children:_jsxs(_components.code,{language:`python`,numberOfLines:`27`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` os`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` uuid`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`import`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` requests`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:` =`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` os.environ[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"IBUBBL_API_KEY\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# One key per message: generate it once, and reuse it if you retry.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`idempotency_key `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` str`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(uuid.uuid4())`})]}),`\n`,_jsx(_components.span,{className:`line`}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`res `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` requests.post(`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"https://api.ibubbl.com/v1/messages\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` headers`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Authorization\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Bearer `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#D4D4D4`},children:`API_KEY`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`},`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` json`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"to\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+14155551234\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"body\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Hey Sam — quick check-in about your order.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:` # Optional: quote an earlier message, and add an iMessage effect.`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"reply_to_message_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"confetti\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"idempotency_key\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: idempotency_key,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` },`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#9CDCFE`},children:` timeout`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`10`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`data `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D4D4D4`},children:`=`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` res.json()`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:`if`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` not`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` res.ok:`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#C586C0`},children:` raise`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#4EC9B0`},children:` RuntimeError`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`f`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`{`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`res.status_code`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:` {`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`data[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'detail'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`][`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`'error'`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`]`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#569CD6`},children:`}`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`)`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#DCDCAA`},children:`print`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`(data[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`], data[`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`])`})]}),`\n`]})})})]}),`\n`,_jsxs(ResponseExample,{children:[_jsx(CodeBlock,{filename:`202 Accepted`,numberOfLines:`19`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`19`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"direction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"outbound\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-05T15:04:10.112730Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pending\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"to\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+14155551234\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"body\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Hey Sam — quick check-in about your order.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"contact_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conversation_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conversation_kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"one_to_one\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"chat_guid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"channel\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sent_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-05T15:04:10.112Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"held_until\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"held_reason\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"confetti\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"reply_to_message_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attachments\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: []`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`422 Unprocessable Entity`,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"validation_error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Exactly one of contact_id, to, chat_guid, or participant_phones is required\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`4`,id:`responses`,children:`Responses`}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`202 Accepted`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`19`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`19`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"direction\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"outbound\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"created_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-05T15:04:10.112730Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"status\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"pending\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"to\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+14155551234\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"body\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Hey Sam — quick check-in about your order.\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"contact_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conversation_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"conversation_kind\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"one_to_one\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"chat_guid\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"channel\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"sent_at\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-11-05T15:04:10.112Z\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"held_until\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"held_reason\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"effect\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"reply_to_message_id\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"attachments\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: []`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`pending`}),` or `,_jsx(_components.code,{children:`queued`}),`. A message held by a capacity limit or an offline line is still accepted with `,_jsx(_components.code,{children:`queued`}),` and retried automatically. A message waiting for the contact’s `,_jsx(_components.a,{href:`/concepts/working-hours`,children:`working hours`}),` or the line’s hourly limit for new contacts is `,_jsx(_components.code,{children:`pending`}),`, with `,_jsx(_components.code,{children:`held_until`}),` and `,_jsx(_components.code,{children:`held_reason`}),` set. For a group send, `,_jsx(_components.code,{children:`to`}),` is `,_jsx(_components.code,{children:`null`}),` and `,_jsx(_components.code,{children:`conversation_kind`}),` is `,_jsx(_components.code,{children:`\"group\"`}),`; a new group’s `,_jsx(_components.code,{children:`chat_guid`}),` is `,_jsx(_components.code,{children:`null`}),` until the group is created a few seconds later. `,_jsx(_components.code,{children:`effect`}),` and `,_jsx(_components.code,{children:`reply_to_message_id`}),` echo what you sent, or `,_jsx(_components.code,{children:`null`}),`. `,_jsx(_components.code,{children:`attachments`}),` lists the files the message carries, in your order, as `,_jsx(_components.code,{children:`kind`}),` (`,_jsx(_components.code,{children:`image`}),`, `,_jsx(_components.code,{children:`gif`}),`, `,_jsx(_components.code,{children:`video`}),`, `,_jsx(_components.code,{children:`audio`}),` or `,_jsx(_components.code,{children:`file`}),`), `,_jsx(_components.code,{children:`mime_type`}),` and `,_jsx(_components.code,{children:`size_bytes`}),`; it’s `,_jsx(_components.code,{children:`[]`}),` for a text message. `,_jsx(_components.code,{children:`direction`}),` is always `,_jsx(_components.code,{children:`outbound`}),` here, and `,_jsx(_components.code,{children:`created_at`}),` is when iBubbl recorded the message; it never changes, and it’s what `,_jsx(_components.a,{href:`/api-reference/messages/list`,children:`List messages`}),` sorts and filters by.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`401 Unauthorized`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"unauthorized\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid or revoked API key\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Other `,_jsx(_components.code,{children:`message`}),` values: `,_jsx(_components.code,{children:`Authorization Bearer token required`}),`, `,_jsx(_components.code,{children:`API key required (use Authorization: Bearer ib_pk_…)`}),`, `,_jsx(_components.code,{children:`Invalid API key format`}),`, `,_jsx(_components.code,{children:`Customer account not found`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`403 Forbidden`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"forbidden\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Account is suspended\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Your iBubbl account is suspended or cancelled (`,_jsx(_components.code,{children:`message`}),` is then `,_jsx(_components.code,{children:`Account is cancelled`}),`). Every API-key endpoint returns this.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`404 Not Found`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"not_found\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Contact not found\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Also returned for a `,_jsx(_components.code,{children:`contact_id`}),` that is malformed, belongs to another account, or was `,_jsx(_components.a,{href:`/api-reference/contacts/delete`,children:`deleted`}),`; send with `,_jsx(_components.code,{children:`to`}),` to reach the number again (that creates a new contact). Other `,_jsx(_components.code,{children:`error`}),` value: `,_jsx(_components.code,{children:`group_not_found`}),` (no group with that `,_jsx(_components.code,{children:`chat_guid`}),` on your account).`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`409 Conflict`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"idempotency_conflict\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"idempotency_key reused with a different request payload\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`422 Unprocessable Entity`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"validation_error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Exactly one of contact_id, to, chat_guid, or participant_phones is required\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Other `,_jsx(_components.code,{children:`error`}),` values: `,_jsx(_components.code,{children:`contact_opted_out`}),`, `,_jsx(_components.code,{children:`contact_blocked`}),`, `,_jsx(_components.code,{children:`no_eligible_line`}),`, `,_jsx(_components.code,{children:`unresponsive_contact`}),`, `,_jsx(_components.code,{children:`cold_cap_exhausted`}),`, `,_jsx(_components.code,{children:`daily_cap_exhausted`}),`, `,_jsx(_components.code,{children:`followup_cap_exhausted`}),`, `,_jsx(_components.code,{children:`group_outbound_blocked_suppression`}),` (with a `,_jsx(_components.code,{children:`blocked_phones`}),` list), `,_jsx(_components.code,{children:`insufficient_participants`}),`, `,_jsx(_components.code,{children:`reply_target_not_found`}),`, `,_jsx(_components.code,{children:`reply_target_unsent`}),`, `,_jsx(_components.code,{children:`reply_target_partly_unsent`}),`, and for attachments `,_jsx(_components.code,{children:`first_message_needs_text`}),`, `,_jsx(_components.code,{children:`attachment_fetch_failed`}),`, `,_jsx(_components.code,{children:`attachment_too_large`}),`, `,_jsx(_components.code,{children:`unsupported_attachment`}),` and `,_jsx(_components.code,{children:`attachment_combination_not_supported`}),`. See `,_jsx(_components.a,{href:`/errors`,children:`Errors`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`429 Too Many Requests`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"rate_limited\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Too many attachment sends in progress; wait 5s and retry with the same idempotency_key.\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Sends with `,_jsx(_components.code,{children:`attachments`}),` only, and rarely: iBubbl is already downloading as many attachment sends as it can. The `,_jsx(_components.code,{children:`Retry-After`}),` header says how many seconds to wait (5); then send the same request with the same `,_jsx(_components.code,{children:`idempotency_key`}),`. Text-only sends never get a `,_jsx(_components.code,{children:`429`}),`.`]}),`\n`,_jsx(_components.p,{children:_jsx(_components.strong,{children:`500 Internal Server Error`})}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`6`,language:`json`,children:_jsx(_components.pre,{className:`shiki shiki-themes github-light-default dark-plus`,style:{backgroundColor:`#ffffff`,\"--shiki-dark-bg\":`#0B0C0E`,color:`#1f2328`,\"--shiki-dark\":`#D4D4D4`},language:`json`,children:_jsxs(_components.code,{language:`json`,numberOfLines:`6`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{`})}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"detail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: {`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"no_owner_rep\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`,`})]}),`\n`,_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"message\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Customer is missing an Owner rep\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Other `,_jsx(_components.code,{children:`error`}),` value: `,_jsx(_components.code,{children:`internal_error`}),`. Retry with the same `,_jsx(_components.code,{children:`idempotency_key`}),`.`]})]})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent};function _missingMdxReference(id,component){throw new Error(`Expected `+(component?`component`:`object`)+\" `\"+id+\"` to be defined: you likely forgot to import, pass, or provide it.\")}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Send a message","openapi":"POST /v1/messages","description":"Send a message to one contact (`contact_id`, or `to` — an E.164 phone number; the contact is created on first use), into an existing group (`chat_guid`), or to a new group (`participant_phones`). Exactly one of the four is required.\n\nThe response returns immediately with `status: \"pending\"` or `\"queued\"`. Delivery progress arrives as [webhook events](/webhooks/events) (`message.sent`, `message.delivered`, `message.read`, `message.failed`), or poll `GET /v1/messages/{id}`.\n\n**Idempotency is required.** Provide a unique `idempotency_key` per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns `409 idempotency_conflict`. See the [Idempotency](/idempotency) guide.\n\nA send to an opted-out contact returns `422 contact_opted_out`; see [Suppression](/concepts/suppression).\n\nTo send files, list up to 10 `https` URLs in `attachments` (1:1 only); `body`, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See [Attachments](/guides/attachments).\n\nOn a `5xx` (including a `502`/`503` from the network edge during a deploy), retry with the same `idempotency_key`.","href":"/api-reference/messages/send"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Send a message","slug":"send-a-message","depth":3,"children":[]},{"title":"Request Body","slug":"request-body","depth":4,"children":[]},{"title":"Responses","slug":"responses","depth":4,"children":[]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"cURL","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"shellscript\">\u003ccode language=\"shellscript\" numberOfLines=\"13\">\u003cspan class=\"line\">\u003cspan style=\"color:#6E7781;--shiki-dark:#6A9955\"># One key per message: generate it once, and reuse it if you retry.\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">IDEMPOTENCY_KEY\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">=\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">$(\u003c/span>\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">uuidgen\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">)\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#DCDCAA\">curl\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -X\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> POST\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> https://api.ibubbl.com/v1/messages\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Authorization: Bearer \u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">$IBUBBL_API_KEY\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -H\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Content-Type: application/json\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\"> -d\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">to\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">: \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">+14155551234\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">body\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">: \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">Hey Sam — quick check-in about your order.\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">reply_to_message_id\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">: \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">effect\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">: \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">confetti\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\"> \\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">idempotency_key\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">: \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">$IDEMPOTENCY_KEY\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }\"\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"},{"filename":"TypeScript","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"typescript\">\u003ccode language=\"typescript\" numberOfLines=\"25\">\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">import\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> { \u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">randomUUID\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> } \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">from\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"node:crypto\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">;\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#6E7781;--shiki-dark:#6A9955\">// One key per message: generate it once, and reuse it if you retry.\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">const\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#4FC1FF\"> idempotencyKey\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\"> =\u003c/span>\u003cspan style=\"color:#8250DF;--shiki-dark:#DCDCAA\"> randomUUID\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">();\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">const\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#4FC1FF\"> res\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\"> =\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\"> await\u003c/span>\u003cspan style=\"color:#8250DF;--shiki-dark:#DCDCAA\"> fetch\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">(\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"https://api.ibubbl.com/v1/messages\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> method:\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"POST\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> headers:\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> Authorization:\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> `Bearer \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#569CD6\">${\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">process\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">env\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#4FC1FF\">IBUBBL_API_KEY\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#569CD6\">}\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">`\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Content-Type\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">:\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"application/json\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> body:\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#4FC1FF\"> JSON\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#8250DF;--shiki-dark:#DCDCAA\">stringify\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">({\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> to:\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"+14155551234\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> body:\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"Hey Sam — quick check-in about your order.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#6E7781;--shiki-dark:#6A9955\"> // Optional: quote an earlier message, and add an iMessage effect.\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> reply_to_message_id:\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> effect:\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"confetti\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> idempotency_key:\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> idempotencyKey\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }),\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> signal:\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> AbortSignal\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#8250DF;--shiki-dark:#DCDCAA\">timeout\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">(\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">10_000\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">),\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">});\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">const\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#4FC1FF\"> data\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\"> =\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\"> await\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\"> res\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#8250DF;--shiki-dark:#DCDCAA\">json\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">();\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">if\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> (\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">!\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">res\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">ok\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">) \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">throw\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\"> new\u003c/span>\u003cspan style=\"color:#8250DF;--shiki-dark:#DCDCAA\"> Error\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">(\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">`\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#569CD6\">${\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">res\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">status\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#569CD6\">}\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#569CD6\"> ${\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">data\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">detail\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#D4D4D4\">?.\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">error\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#569CD6\">}\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">`\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">);\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">console\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#8250DF;--shiki-dark:#DCDCAA\">log\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">(\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">data\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">id\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">data\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">.\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#9CDCFE\">status\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">);\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"},{"filename":"Python","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"python\">\u003ccode language=\"python\" numberOfLines=\"27\">\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">import\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> os\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">import\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> uuid\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">import\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> requests\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#D4D4D4\">API_KEY\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\"> =\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> os.environ[\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"IBUBBL_API_KEY\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">]\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#6E7781;--shiki-dark:#6A9955\"># One key per message: generate it once, and reuse it if you retry.\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">idempotency_key \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">=\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#4EC9B0\"> str\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">(uuid.uuid4())\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">res \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">=\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> requests.post(\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"https://api.ibubbl.com/v1/messages\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#9CDCFE\"> headers\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">=\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Authorization\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">f\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Bearer \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">{\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#D4D4D4\">API_KEY\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">}\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">},\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#9CDCFE\"> json\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">=\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"to\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"+14155551234\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"body\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Hey Sam — quick check-in about your order.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#6E7781;--shiki-dark:#6A9955\"> # Optional: quote an earlier message, and add an iMessage effect.\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"reply_to_message_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"effect\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"confetti\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"idempotency_key\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: idempotency_key,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> },\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#953800;--shiki-dark:#9CDCFE\"> timeout\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">=\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">10\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">)\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">data \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D4D4D4\">=\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> res.json()\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\">if\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\"> not\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> res.ok:\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#CF222E;--shiki-dark:#C586C0\"> raise\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#4EC9B0\"> RuntimeError\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">(\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">f\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">{\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">res.status_code\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">}\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\"> {\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">data[\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">'detail'\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">][\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">'error'\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">]\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#569CD6\">}\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">)\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0550AE;--shiki-dark:#DCDCAA\">print\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">(data[\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">], data[\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"status\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">])\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"202 Accepted","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"19\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"direction\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"outbound\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"created_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-11-05T15:04:10.112730Z\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"status\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"pending\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"to\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"+14155551234\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"body\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Hey Sam — quick check-in about your order.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"contact_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"conversation_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"conversation_kind\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"one_to_one\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"chat_guid\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"channel\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"sent_at\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-11-05T15:04:10.112Z\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"held_until\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"held_reason\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">null\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"effect\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"confetti\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"reply_to_message_id\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"attachments\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: []\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"},{"filename":"422 Unprocessable Entity","html":"\u003cpre class=\"shiki shiki-themes github-light-default dark-plus\" style=\"background-color:#ffffff;--shiki-dark-bg:#0B0C0E;color:#1f2328;--shiki-dark:#D4D4D4\" language=\"json\">\u003ccode language=\"json\" numberOfLines=\"6\">\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">{\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"detail\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"error\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"validation_error\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"message\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Exactly one of contact_id, to, chat_guid, or participant_phones is required\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\"> }\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">}\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]}}},"jsLinks":[],"openApiReferenceData":{"operation":{"tags":["Messages"],"summary":"Send a message","description":"Send a message to one contact (`contact_id`, or `to` — an E.164 phone number; the contact is created on first use), into an existing group (`chat_guid`), or to a new group (`participant_phones`). Exactly one of the four is required.\n\nThe response returns immediately with `status: \"pending\"` or `\"queued\"`. Delivery progress arrives as [webhook events](/webhooks/events) (`message.sent`, `message.delivered`, `message.read`, `message.failed`), or poll `GET /v1/messages/{id}`.\n\n**Idempotency is required.** Provide a unique `idempotency_key` per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns `409 idempotency_conflict`. See the [Idempotency](/idempotency) guide.\n\nA send to an opted-out contact returns `422 contact_opted_out`; see [Suppression](/concepts/suppression).\n\nTo send files, list up to 10 `https` URLs in `attachments` (1:1 only); `body`, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See [Attachments](/guides/attachments).\n\nOn a `5xx` (including a `502`/`503` from the network edge during a deploy), retry with the same `idempotency_key`.","operationId":"v1_send_message_v1_messages_post","requestBody":"7b23b07b-4a6c-4430-8123-b152d48723ab","responses":{"202":"cc8d9ef8-f5dc-453f-a26c-6daab8c5f5d8","401":"30361915-dd43-4a3d-af68-3ec554b88df7","403":"1524e295-c581-487a-a4d1-a6b1d1e7159e","404":"7a3f2075-169e-4aa1-8487-0d06e68c28a1","409":"6de46e9d-93d7-4647-a388-1eecfd41d74d","422":"bbfa6168-7493-47a5-8cae-db041be5b44d","429":"7028e2c9-af81-4c68-9728-4f028178d6e0","500":"1f37e637-b76f-449b-a4c9-c9405f9f6d62"},"method":"post","type":"path","servers":["76516907-6d68-4376-9209-aa2720597e78"],"security":["8ac342c9-d45e-40bd-8d78-1d9902c58394"],"path":"/v1/messages","baseUrlOptions":["https://api.ibubbl.com"],"title":"Send a message","codeSamples":[],"requestExampleLanguages":["bash","typescript","python"],"requiredOnlyExamples":false,"requestExamples":[{"dropdown":false,"language":"shellscript","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"shellscript","children":{"type":"code","key":null,"ref":null,"props":{"language":"shellscript","numberOfLines":"13","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#6E7781","--shiki-dark":"#6A9955"},"children":"# One key per message: generate it once, and reuse it if you retry."}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"IDEMPOTENCY_KEY"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"$("}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#DCDCAA"},"children":"uuidgen"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":")"}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#DCDCAA"},"children":"curl"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -X"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" POST"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" https://api.ibubbl.com/v1/messages"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -H"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"Authorization: Bearer "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"$IBUBBL_API_KEY"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -H"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"Content-Type: application/json\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\"}}]}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":" -d"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"{"}}]}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"to"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"+14155551234"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":","}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"body"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"Hey Sam — quick check-in about your order."}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":","}}]}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"reply_to_message_id"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":","}}]}},"\n",{"type":"span","key":"20","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"effect"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"confetti"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":","}}]}},"\n",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":" \\\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"idempotency_key"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":": "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"$IDEMPOTENCY_KEY"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D7BA7D"},"children":"\\\""}}]}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" }\""}}}},"\n"]}}}},"filename":"cURL"},{"dropdown":false,"language":"typescript","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"typescript","children":{"type":"code","key":null,"ref":null,"props":{"language":"typescript","numberOfLines":"25","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"import"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" { "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"randomUUID"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" } "}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"from"}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"node:crypto\""}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":";"}}]}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#6E7781","--shiki-dark":"#6A9955"},"children":"// One key per message: generate it once, and reuse it if you retry."}}}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"const"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#4FC1FF"},"children":" idempotencyKey"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":" ="}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#8250DF","--shiki-dark":"#DCDCAA"},"children":" randomUUID"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"();"}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"const"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#4FC1FF"},"children":" res"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":" ="}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":" await"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#8250DF","--shiki-dark":"#DCDCAA"},"children":" fetch"}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"("}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"https://api.ibubbl.com/v1/messages\""}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", {"}}]}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" method:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"POST\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" headers:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" {"}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" Authorization:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" `Bearer "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#569CD6"},"children":"${"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"process"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"env"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#4FC1FF"},"children":"IBUBBL_API_KEY"}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#569CD6"},"children":"}"}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"`"}},{"type":"span","key":"10","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"Content-Type\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":":"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"application/json\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"20","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" },"}}}},"\n",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" body:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#4FC1FF"},"children":" JSON"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#8250DF","--shiki-dark":"#DCDCAA"},"children":"stringify"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"({"}}]}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" to:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"+14155551234\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"26","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" body:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"Hey Sam — quick check-in about your order.\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"28","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#6E7781","--shiki-dark":"#6A9955"},"children":" // Optional: quote an earlier message, and add an iMessage effect."}}}},"\n",{"type":"span","key":"30","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" reply_to_message_id:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"32","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" effect:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"confetti\""}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"34","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" idempotency_key:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" idempotencyKey"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"36","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }),"}}}},"\n",{"type":"span","key":"38","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" signal:"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" AbortSignal"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#8250DF","--shiki-dark":"#DCDCAA"},"children":"timeout"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"("}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"10_000"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"),"}}]}},"\n",{"type":"span","key":"40","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"});"}}}},"\n",{"type":"span","key":"42","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"44","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"const"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#4FC1FF"},"children":" data"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":" ="}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":" await"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":" res"}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#8250DF","--shiki-dark":"#DCDCAA"},"children":"json"}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"();"}}]}},"\n",{"type":"span","key":"46","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"if"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" ("}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"!"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"res"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"ok"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":") "}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"throw"}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":" new"}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#8250DF","--shiki-dark":"#DCDCAA"},"children":" Error"}},{"type":"span","key":"10","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"("}},{"type":"span","key":"11","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"`"}},{"type":"span","key":"12","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#569CD6"},"children":"${"}},{"type":"span","key":"13","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"res"}},{"type":"span","key":"14","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"15","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"status"}},{"type":"span","key":"16","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#569CD6"},"children":"}"}},{"type":"span","key":"17","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#569CD6"},"children":" ${"}},{"type":"span","key":"18","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"data"}},{"type":"span","key":"19","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"20","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"detail"}},{"type":"span","key":"21","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#D4D4D4"},"children":"?."}},{"type":"span","key":"22","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"error"}},{"type":"span","key":"23","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#569CD6"},"children":"}"}},{"type":"span","key":"24","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"`"}},{"type":"span","key":"25","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":");"}}]}},"\n",{"type":"span","key":"48","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"console"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#8250DF","--shiki-dark":"#DCDCAA"},"children":"log"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"("}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"data"}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"id"}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":", "}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"data"}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"."}},{"type":"span","key":"10","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#9CDCFE"},"children":"status"}},{"type":"span","key":"11","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":");"}}]}},"\n"]}}}},"filename":"TypeScript"},{"dropdown":false,"language":"python","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"python","children":{"type":"code","key":null,"ref":null,"props":{"language":"python","numberOfLines":"27","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"import"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" os"}}]}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"import"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" uuid"}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"import"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" requests"}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#D4D4D4"},"children":"API_KEY"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":" ="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" os.environ["}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"IBUBBL_API_KEY\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"]"}}]}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#6E7781","--shiki-dark":"#6A9955"},"children":"# One key per message: generate it once, and reuse it if you retry."}}}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"idempotency_key "}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#4EC9B0"},"children":" str"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"(uuid.uuid4())"}}]}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":null}},"\n",{"type":"span","key":"20","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"res "}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" requests.post("}}]}},"\n",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"https://api.ibubbl.com/v1/messages\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#9CDCFE"},"children":" headers"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Authorization\""}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"f"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Bearer "}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"{"}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#D4D4D4"},"children":"API_KEY"}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"}"}},{"type":"span","key":"10","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"11","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"},"}}]}},"\n",{"type":"span","key":"26","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#9CDCFE"},"children":" json"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}]}},"\n",{"type":"span","key":"28","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"to\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"+14155551234\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"30","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"body\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Hey Sam — quick check-in about your order.\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"32","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#6E7781","--shiki-dark":"#6A9955"},"children":" # Optional: quote an earlier message, and add an iMessage effect."}}}},"\n",{"type":"span","key":"34","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"reply_to_message_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"36","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"effect\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"confetti\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"38","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":" \"idempotency_key\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": idempotency_key,"}}]}},"\n",{"type":"span","key":"40","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" },"}}}},"\n",{"type":"span","key":"42","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#953800","--shiki-dark":"#9CDCFE"},"children":" timeout"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#B5CEA8"},"children":"10"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"44","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":")"}}}},"\n",{"type":"span","key":"46","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"data "}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#D4D4D4"},"children":"="}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" res.json()"}}]}},"\n",{"type":"span","key":"48","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":"if"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":" not"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" res.ok:"}}]}},"\n",{"type":"span","key":"50","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#C586C0"},"children":" raise"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#4EC9B0"},"children":" RuntimeError"}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"("}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"f"}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"{"}},{"type":"span","key":"6","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"res.status_code"}},{"type":"span","key":"7","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"}"}},{"type":"span","key":"8","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":" {"}},{"type":"span","key":"9","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"data["}},{"type":"span","key":"10","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"'detail'"}},{"type":"span","key":"11","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"]["}},{"type":"span","key":"12","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"'error'"}},{"type":"span","key":"13","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"]"}},{"type":"span","key":"14","ref":null,"props":{"style":{"color":"#CF222E","--shiki-dark":"#569CD6"},"children":"}"}},{"type":"span","key":"15","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\""}},{"type":"span","key":"16","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":")"}}]}},"\n",{"type":"span","key":"52","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#DCDCAA"},"children":"print"}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"(data["}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"id\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"], data["}},{"type":"span","key":"4","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"status\""}},{"type":"span","key":"5","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"])"}}]}},"\n"]}}}},"filename":"Python"}],"requestExampleType":"mdx","responseExamples":[{"dropdown":false,"language":"json","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"json","children":{"type":"code","key":null,"ref":null,"props":{"language":"json","numberOfLines":"19","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"direction\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"outbound\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"created_at\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"2026-11-05T15:04:10.112730Z\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"status\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"pending\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"to\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"+14155551234\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"12","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"body\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Hey Sam — quick check-in about your order.\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"14","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"contact_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"16","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"conversation_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"18","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"conversation_kind\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"one_to_one\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"20","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"chat_guid\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"22","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"channel\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"24","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"sent_at\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"2026-11-05T15:04:10.112Z\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"26","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"held_until\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"28","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"held_reason\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0550AE","--shiki-dark":"#569CD6"},"children":"null"}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"30","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"effect\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"confetti\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"32","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"reply_to_message_id\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"5f6a7b8c-9d0e-4f1a-8b2c-3d4e5f6a7b8c\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"34","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"attachments\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": []"}}]}},"\n",{"type":"span","key":"36","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":"202 Accepted"},{"dropdown":false,"language":"json","code":{"type":"pre","key":null,"ref":null,"props":{"className":"shiki shiki-themes github-light-default dark-plus","style":{"backgroundColor":"#ffffff","--shiki-dark-bg":"#0B0C0E","color":"#1f2328","--shiki-dark":"#D4D4D4"},"language":"json","children":{"type":"code","key":null,"ref":null,"props":{"language":"json","numberOfLines":"6","children":[{"type":"span","key":"0","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"{"}}}},"\n",{"type":"span","key":"2","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"detail\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": {"}}]}},"\n",{"type":"span","key":"4","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"error\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"validation_error\""}},{"type":"span","key":"3","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":","}}]}},"\n",{"type":"span","key":"6","ref":null,"props":{"className":"line","children":[{"type":"span","key":"0","ref":null,"props":{"style":{"color":"#116329","--shiki-dark":"#9CDCFE"},"children":" \"message\""}},{"type":"span","key":"1","ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":": "}},{"type":"span","key":"2","ref":null,"props":{"style":{"color":"#0A3069","--shiki-dark":"#CE9178"},"children":"\"Exactly one of contact_id, to, chat_guid, or participant_phones is required\""}}]}},"\n",{"type":"span","key":"8","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":" }"}}}},"\n",{"type":"span","key":"10","ref":null,"props":{"className":"line","children":{"type":"span","key":null,"ref":null,"props":{"style":{"color":"#1F2328","--shiki-dark":"#D4D4D4"},"children":"}"}}}},"\n"]}}}},"filename":"422 Unprocessable Entity"}],"responseExampleType":"mdx"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"idempotency_key":{"type":"string","maxLength":128,"minLength":1,"title":"Idempotency Key","description":"Client-supplied unique key per logical send. Keys never expire: reusing a key with the same payload replays the original message, however long ago it was sent, and the same key with a different payload returns `409 idempotency_conflict`. The one exception is a message that ended `failed` or `expired`: its key is released and the retry is sent as a new message. The payload compared is the routing field exactly as sent (`to`, `contact_id`, `chat_guid`, or the sorted `participant_phones` plus `group_name`), `body`, and `effect`, `reply_to_message_id` and `attachments` when set, so a retry that switches from `to` to the same contact's `contact_id` is a 409. Generate a new UUIDv4 for every distinct message.","examples":["a3f2c8d9-e0f1-4b4d-9c5a-7b8e2d1f0c4a"],"isRequired":true,"uniqueKey":"idempotency_key","typeLabel":"string"},"contact_id":{"oneOf":[{"type":"string","title":"Contact Id","description":"1:1 send by existing contact ID (a UUID). Mutually exclusive with `to`, `chat_guid`, and `participant_phones`.","example":"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f","uniqueKey":"contact_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Contact Id","description":"1:1 send by existing contact ID (a UUID). Mutually exclusive with `to`, `chat_guid`, and `participant_phones`.","example":"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f","uniqueKey":"contact_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact_id","typeLabel":"string | null"},"to":{"oneOf":[{"type":"string","title":"To","description":"1:1 send by E.164 phone number (e.g. `+14155551234`). If the number doesn't match an existing contact, one is created automatically. Mutually exclusive with `contact_id`, `chat_guid`, and `participant_phones`.","pattern":"^\\+[1-9]\\d{7,14}$","example":"+14155551234","uniqueKey":"to.oneOf.0","typeLabel":"string"},{"type":"null","title":"To","description":"1:1 send by E.164 phone number (e.g. `+14155551234`). If the number doesn't match an existing contact, one is created automatically. Mutually exclusive with `contact_id`, `chat_guid`, and `participant_phones`.","example":"+14155551234","uniqueKey":"to.oneOf.1","typeLabel":"null"}],"uniqueKey":"to","typeLabel":"string | null"},"chat_guid":{"oneOf":[{"type":"string","title":"Chat Guid","description":"Send into an existing iMessage group identified by its opaque `chat_guid` (e.g. `any;+;\u003chex>`). Webhook events don't carry it: read it from the response to a send into the group, or from `GET /v1/messages/{id}` for any message in the group (an inbound `message_id` works too). The value changes when a participant is added to the group; an old value then returns `404 group_not_found`. Mutually exclusive with `contact_id`, `to`, and `participant_phones`.","example":"any;+;067ace6caf6c43aaa2f7d643975e15ea","uniqueKey":"chat_guid.oneOf.0","typeLabel":"string"},{"type":"null","title":"Chat Guid","description":"Send into an existing iMessage group identified by its opaque `chat_guid` (e.g. `any;+;\u003chex>`). Webhook events don't carry it: read it from the response to a send into the group, or from `GET /v1/messages/{id}` for any message in the group (an inbound `message_id` works too). The value changes when a participant is added to the group; an old value then returns `404 group_not_found`. Mutually exclusive with `contact_id`, `to`, and `participant_phones`.","example":"any;+;067ace6caf6c43aaa2f7d643975e15ea","uniqueKey":"chat_guid.oneOf.1","typeLabel":"null"}],"uniqueKey":"chat_guid","typeLabel":"string | null"},"participant_phones":{"oneOf":[{"type":"array","items":{"type":"string","uniqueKey":"participant_phones.oneOf.0.items.[INDEX]","typeLabel":"string"},"title":"Participant Phones","description":"Create a brand-new iMessage group and send the first message in one call. List of 2 or more E.164 phone numbers (your iBubbl line is added automatically; do not include it). Mutually exclusive with `contact_id`, `to`, and `chat_guid`. Optionally pair with `group_name` to set the group's display name.","example":["+14155551234","+14155557654"],"uniqueKey":"participant_phones.oneOf.0","typeLabel":"string[]"},{"type":"null","title":"Participant Phones","description":"Create a brand-new iMessage group and send the first message in one call. List of 2 or more E.164 phone numbers (your iBubbl line is added automatically; do not include it). Mutually exclusive with `contact_id`, `to`, and `chat_guid`. Optionally pair with `group_name` to set the group's display name.","example":["+14155551234","+14155557654"],"uniqueKey":"participant_phones.oneOf.1","typeLabel":"null"}],"uniqueKey":"participant_phones","typeLabel":"string[] | null"},"group_name":{"oneOf":[{"type":"string","title":"Group Name","description":"Display name for a new iMessage group. Only valid alongside `participant_phones`. Optional — iMessage will fall back to the participants' names if omitted.","maxLength":80,"example":"Team Alpha","uniqueKey":"group_name.oneOf.0","typeLabel":"string"},{"type":"null","title":"Group Name","description":"Display name for a new iMessage group. Only valid alongside `participant_phones`. Optional — iMessage will fall back to the participants' names if omitted.","example":"Team Alpha","uniqueKey":"group_name.oneOf.1","typeLabel":"null"}],"uniqueKey":"group_name","typeLabel":"string | null"},"body":{"oneOf":[{"type":"string","title":"Body","description":"The message text. Plain text only; emoji + Unicode are supported. For a line break, include a newline (`\\n` in the JSON string); use `\\n`, not `\\r\\n`. A retry with the same `idempotency_key` must send the identical body, line breaks included, or it returns `409 idempotency_conflict`. Required unless `attachments` is set; with attachments it is sent as their caption, and it is required for the first message to a contact (`422 first_message_needs_text`).","minLength":1,"example":"Hey Sam — quick check-in about your order.","uniqueKey":"body.oneOf.0","typeLabel":"string"},{"type":"null","title":"Body","description":"The message text. Plain text only; emoji + Unicode are supported. For a line break, include a newline (`\\n` in the JSON string); use `\\n`, not `\\r\\n`. A retry with the same `idempotency_key` must send the identical body, line breaks included, or it returns `409 idempotency_conflict`. Required unless `attachments` is set; with attachments it is sent as their caption, and it is required for the first message to a contact (`422 first_message_needs_text`).","example":"Hey Sam — quick check-in about your order.","uniqueKey":"body.oneOf.1","typeLabel":"null"}],"uniqueKey":"body","typeLabel":"string | null"},"attachments":{"oneOf":[{"type":"array","items":{"type":"string","maxLength":2083,"minLength":1,"format":"uri","uniqueKey":"attachments.oneOf.0.items.[INDEX]","typeLabel":"string\u003curi>"},"title":"Attachments","description":"Up to 10 files to send, each an `https` URL iBubbl downloads when the request arrives. Images (JPEG, PNG, WebP, HEIC, HEIF) and GIFs up to 25 MiB each, MP4/MOV video up to 50 MiB, PDF up to 10 MB, audio (MP3, M4A, AAC) up to 25 MiB on its own; 86 MB in all. With other files, audio must be one MP3 of at most 2 MB. The type comes from the response's `Content-Type` (or the URL's extension when that is `application/octet-stream`). A URL that can't be downloaded, or a file that breaks these rules, rejects the whole request (`422 attachment_fetch_failed`, `attachment_too_large`, `unsupported_attachment`, `attachment_combination_not_supported`) and nothing is sent. Only with `to` or `contact_id`, and not with `effect` or `reply_to_message_id`. The URLs, in order, are part of the payload compared for idempotency; a replay never downloads them again.","maxItems":10,"minItems":1,"example":["https://example.com/photos/order-1042.jpg"],"uniqueKey":"attachments.oneOf.0","typeLabel":"string\u003curi>[]"},{"type":"null","title":"Attachments","description":"Up to 10 files to send, each an `https` URL iBubbl downloads when the request arrives. Images (JPEG, PNG, WebP, HEIC, HEIF) and GIFs up to 25 MiB each, MP4/MOV video up to 50 MiB, PDF up to 10 MB, audio (MP3, M4A, AAC) up to 25 MiB on its own; 86 MB in all. With other files, audio must be one MP3 of at most 2 MB. The type comes from the response's `Content-Type` (or the URL's extension when that is `application/octet-stream`). A URL that can't be downloaded, or a file that breaks these rules, rejects the whole request (`422 attachment_fetch_failed`, `attachment_too_large`, `unsupported_attachment`, `attachment_combination_not_supported`) and nothing is sent. Only with `to` or `contact_id`, and not with `effect` or `reply_to_message_id`. The URLs, in order, are part of the payload compared for idempotency; a replay never downloads them again.","example":["https://example.com/photos/order-1042.jpg"],"uniqueKey":"attachments.oneOf.1","typeLabel":"null"}],"uniqueKey":"attachments","typeLabel":"string\u003curi>[] | null"},"reply_to_message_id":{"oneOf":[{"type":"string","title":"Reply To Message Id","description":"Send as an inline reply that quotes an earlier message (a UUID: the `id` of a message, or the `message_id` of a `message.inbound` event). The message must be in the conversation you are sending to: the same contact for a 1:1 send, the same group for a `chat_guid` send; otherwise `422 reply_target_not_found`. A message the contact unsent returns `422 reply_target_unsent`, and one they unsent part of `422 reply_target_partly_unsent`. iMessage only: when the message goes out as SMS (see `channel`) it is sent as plain text, without the quote. Not allowed with `participant_phones` or `attachments`.","example":"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b","uniqueKey":"reply_to_message_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reply To Message Id","description":"Send as an inline reply that quotes an earlier message (a UUID: the `id` of a message, or the `message_id` of a `message.inbound` event). The message must be in the conversation you are sending to: the same contact for a 1:1 send, the same group for a `chat_guid` send; otherwise `422 reply_target_not_found`. A message the contact unsent returns `422 reply_target_unsent`, and one they unsent part of `422 reply_target_partly_unsent`. iMessage only: when the message goes out as SMS (see `channel`) it is sent as plain text, without the quote. Not allowed with `participant_phones` or `attachments`.","example":"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b","uniqueKey":"reply_to_message_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"reply_to_message_id","typeLabel":"string | null"},"effect":{"oneOf":[{"type":"string","title":"Effect","description":"An iMessage send effect. Bubble effects: `slam`, `loud`, `gentle`, `invisible` (Invisible Ink). Screen effects: `echo`, `spotlight`, `balloons`, `confetti`, `love`, `lasers`, `fireworks`, `celebration`, `shooting_star`. iMessage only: when the message goes out as SMS (see `channel`) it is sent without the effect. Not allowed with `participant_phones` or `attachments`.","enum":["slam","loud","gentle","invisible","echo","spotlight","balloons","confetti","love","lasers","fireworks","celebration","shooting_star"],"example":"confetti","uniqueKey":"effect.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Effect","description":"An iMessage send effect. Bubble effects: `slam`, `loud`, `gentle`, `invisible` (Invisible Ink). Screen effects: `echo`, `spotlight`, `balloons`, `confetti`, `love`, `lasers`, `fireworks`, `celebration`, `shooting_star`. iMessage only: when the message goes out as SMS (see `channel`) it is sent without the effect. Not allowed with `participant_phones` or `attachments`.","example":"confetti","uniqueKey":"effect.oneOf.1","typeLabel":"null"}],"uniqueKey":"effect","typeLabel":"enum\u003cstring> | null"}},"type":"object","required":["idempotency_key"],"title":"MessageCreate","description":"Fields not listed here are ignored without an error: the request still succeeds and they are not stored.","example":{"body":"Hey Sam — quick check-in about your order.","idempotency_key":"a3f2c8d9-e0f1-4b4d-9c5a-7b8e2d1f0c4a","to":"+14155551234"},"uniqueKey":"","typeLabel":"MessageCreate · object"},"examples":{"Example":{"title":"Example","value":{"body":"Hey Sam — quick check-in about your order.","idempotency_key":"a3f2c8d9-e0f1-4b4d-9c5a-7b8e2d1f0c4a","to":"+14155551234"}}},"exampleType":"generated"}},"exampleType":"generated"},"responses":{"cc8d9ef8-f5dc-453f-a26c-6daab8c5f5d8":{"description":"Message accepted for delivery.","content":{"application/json":{"schema":{"properties":{"id":{"type":"string","title":"Id","description":"Unique message identifier (UUID).","isRequired":true,"uniqueKey":"id","typeLabel":"string"},"direction":{"type":"string","enum":["inbound","outbound"],"title":"Direction","description":"`outbound` = sent from your line (through the API, the dashboard or an automation); `inbound` = received from a contact. An inbound message has `status` `delivered`, or `read` once it has been read in the dashboard.","isRequired":true,"uniqueKey":"direction","typeLabel":"enum\u003cstring>"},"created_at":{"type":"string","title":"Created At","description":"ISO 8601 UTC timestamp, with microseconds and a `Z`, of when iBubbl recorded the message. It never changes, so it is what `GET /v1/messages` sorts and filters by; pass it back as `created_after` / `created_before` unchanged.","examples":["2026-05-17T14:23:45.123456Z"],"isRequired":true,"uniqueKey":"created_at","typeLabel":"string"},"status":{"type":"string","enum":["queued","pending","sent","delivered","read","failed","expired","cancelled"],"title":"Status","description":"Lifecycle state. `pending` = accepted and on its way out; it may be waiting for the contact's working hours or the line's hourly limit for new contacts (see `held_until`). `queued` = parked by a capacity hold (`hourly_cap_hit` / `line_offline`), retried automatically. `sent` / `delivered` / `read` = delivery progression. `failed` = the send failed — see webhook `message.failed` for the reason; it can follow `sent` (or a `read` with no confirmed delivery) when iMessage reports the send failed after accepting it (`failed_reason` `imessage_undeliverable` / `imessage_error:\u003ccode>`), and such a message can still move to `delivered` / `read` if Apple later confirms it. `expired` = still queued after an hour, so dropped; it will not send. `cancelled` = stopped in the dashboard before it was sent; it will not send (webhook `message.cancelled`).","isRequired":true,"uniqueKey":"status","typeLabel":"enum\u003cstring>"},"body":{"type":"string","title":"Body","description":"The message text as sent.","isRequired":true,"uniqueKey":"body","typeLabel":"string"},"attachments":{"items":{"properties":{"kind":{"type":"string","enum":["image","gif","video","audio","file"],"title":"Kind","description":"`file` is a PDF (or another document).","isRequired":true,"uniqueKey":"attachments.items.[INDEX].kind","typeLabel":"enum\u003cstring>"},"mime_type":{"type":"string","title":"Mime Type","examples":["image/jpeg"],"isRequired":true,"uniqueKey":"attachments.items.[INDEX].mime_type","typeLabel":"string"},"size_bytes":{"type":"integer","title":"Size Bytes","description":"Size in bytes. An inbound file can show `0` for a few seconds, until iBubbl has received it.","isRequired":true,"uniqueKey":"attachments.items.[INDEX].size_bytes","typeLabel":"integer"}},"type":"object","required":["kind","mime_type","size_bytes"],"title":"MessageAttachment","uniqueKey":"attachments.items.[INDEX]","typeLabel":"MessageAttachment · object"},"type":"array","title":"Attachments","description":"The files on this message, in the order they were sent: sent with `attachments`, from the dashboard or an automation, or received from the contact. Empty when there are none. File contents and URLs are not returned.","isRequired":true,"uniqueKey":"attachments","typeLabel":"MessageAttachment · object[]"},"to":{"oneOf":[{"type":"string","title":"To","description":"The contact's phone number (E.164) for 1:1 messages: the destination of an outbound message, and the sender of an inbound one. Null for group messages — the group is identified by `chat_guid` instead.","example":"+14155551234","uniqueKey":"to.oneOf.0","typeLabel":"string"},{"type":"null","title":"To","description":"The contact's phone number (E.164) for 1:1 messages: the destination of an outbound message, and the sender of an inbound one. Null for group messages — the group is identified by `chat_guid` instead.","example":"+14155551234","uniqueKey":"to.oneOf.1","typeLabel":"null"}],"uniqueKey":"to","typeLabel":"string | null"},"contact_id":{"oneOf":[{"type":"string","title":"Contact Id","description":"ID of the contact this message was sent to. For groups, this is the 'primary' participant the message was addressed to (the first participant in `participant_phones` on a new group create); the conversation's full participant list is available via the conversation.","uniqueKey":"contact_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Contact Id","description":"ID of the contact this message was sent to. For groups, this is the 'primary' participant the message was addressed to (the first participant in `participant_phones` on a new group create); the conversation's full participant list is available via the conversation.","uniqueKey":"contact_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"contact_id","typeLabel":"string | null"},"conversation_id":{"oneOf":[{"type":"string","title":"Conversation Id","description":"ID of the conversation this message belongs to. Stable for the lifetime of the conversation; use it to fetch the thread or correlate webhook events.","uniqueKey":"conversation_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Conversation Id","description":"ID of the conversation this message belongs to. Stable for the lifetime of the conversation; use it to fetch the thread or correlate webhook events.","uniqueKey":"conversation_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"conversation_id","typeLabel":"string | null"},"conversation_kind":{"type":"string","enum":["one_to_one","group"],"title":"Conversation Kind","description":"`one_to_one` for sends to a single contact, `group` for iMessage groups (2+ participants in addition to your iBubbl line).","default":"one_to_one","uniqueKey":"conversation_kind","typeLabel":"enum\u003cstring>"},"chat_guid":{"oneOf":[{"type":"string","title":"Chat Guid","description":"Opaque identifier for the group chat (e.g. `any;+;\u003chex>`). Returned for `group` messages — use it to address later messages to the same group via the `chat_guid` request shape. Null for `one_to_one` messages, and for a brand-new group until the group has been created in iMessage (that happens when the first message goes out, which can wait for sending hours); poll `GET /v1/messages/{id}` to see it fill in. It changes when a participant is added to the group.","example":"any;+;067ace6caf6c43aaa2f7d643975e15ea","uniqueKey":"chat_guid.oneOf.0","typeLabel":"string"},{"type":"null","title":"Chat Guid","description":"Opaque identifier for the group chat (e.g. `any;+;\u003chex>`). Returned for `group` messages — use it to address later messages to the same group via the `chat_guid` request shape. Null for `one_to_one` messages, and for a brand-new group until the group has been created in iMessage (that happens when the first message goes out, which can wait for sending hours); poll `GET /v1/messages/{id}` to see it fill in. It changes when a participant is added to the group.","example":"any;+;067ace6caf6c43aaa2f7d643975e15ea","uniqueKey":"chat_guid.oneOf.1","typeLabel":"null"}],"uniqueKey":"chat_guid","typeLabel":"string | null"},"channel":{"oneOf":[{"type":"string","title":"Channel","description":"How the message travelled: `imessage`, or `sms` (a text, including RCS). For an outbound message, how it actually went out (`sms` when the recipient couldn't be reached on iMessage); null until it has been sent. For an inbound message, how it arrived; null when that wasn't recorded.","enum":["imessage","sms"],"uniqueKey":"channel.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Channel","description":"How the message travelled: `imessage`, or `sms` (a text, including RCS). For an outbound message, how it actually went out (`sms` when the recipient couldn't be reached on iMessage); null until it has been sent. For an inbound message, how it arrived; null when that wasn't recorded.","uniqueKey":"channel.oneOf.1","typeLabel":"null"}],"uniqueKey":"channel","typeLabel":"enum\u003cstring> | null"},"sent_at":{"oneOf":[{"type":"string","title":"Sent At","description":"ISO 8601 UTC timestamp. Set when the message is accepted, then replaced by the actual send time once it goes out. Use `status` (`sent` / `delivered` / `read`), not `sent_at`, to tell whether it has actually gone out.","example":"2026-05-17T14:23:45.123Z","uniqueKey":"sent_at.oneOf.0","typeLabel":"string"},{"type":"null","title":"Sent At","description":"ISO 8601 UTC timestamp. Set when the message is accepted, then replaced by the actual send time once it goes out. Use `status` (`sent` / `delivered` / `read`), not `sent_at`, to tell whether it has actually gone out.","example":"2026-05-17T14:23:45.123Z","uniqueKey":"sent_at.oneOf.1","typeLabel":"null"}],"uniqueKey":"sent_at","typeLabel":"string | null"},"held_until":{"oneOf":[{"type":"string","title":"Held Until","description":"While a `pending` message is being held, the expected time (ISO 8601 UTC) it will go out: the next opening of the contact's working hours; for `hourly_limit`, an estimate of when a slot frees. Recomputed within about 10 seconds. Null when the message is not held, when `held_reason` is `working_hours` but no sending day is enabled, and when it is `hourly_limit` with no estimate.","example":"2026-10-08T16:00:00+00:00","uniqueKey":"held_until.oneOf.0","typeLabel":"string"},{"type":"null","title":"Held Until","description":"While a `pending` message is being held, the expected time (ISO 8601 UTC) it will go out: the next opening of the contact's working hours; for `hourly_limit`, an estimate of when a slot frees. Recomputed within about 10 seconds. Null when the message is not held, when `held_reason` is `working_hours` but no sending day is enabled, and when it is `hourly_limit` with no estimate.","example":"2026-10-08T16:00:00+00:00","uniqueKey":"held_until.oneOf.1","typeLabel":"null"}],"uniqueKey":"held_until","typeLabel":"string | null"},"held_reason":{"oneOf":[{"type":"string","title":"Held Reason","description":"Why a `pending` message is being held right now: `working_hours` (outside the contact's working hours) or `hourly_limit` (the line has started its limit of new contacts for this hour; the message goes out by itself when a slot frees, at about `held_until`). Null when it is not held.","enum":["working_hours","hourly_limit"],"uniqueKey":"held_reason.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Held Reason","description":"Why a `pending` message is being held right now: `working_hours` (outside the contact's working hours) or `hourly_limit` (the line has started its limit of new contacts for this hour; the message goes out by itself when a slot frees, at about `held_until`). Null when it is not held.","uniqueKey":"held_reason.oneOf.1","typeLabel":"null"}],"uniqueKey":"held_reason","typeLabel":"enum\u003cstring> | null"},"effect":{"oneOf":[{"type":"string","title":"Effect","description":"The iMessage send effect requested for this message, or null. It shows on the recipient's device only when `channel` is `imessage`.","enum":["slam","loud","gentle","invisible","echo","spotlight","balloons","confetti","love","lasers","fireworks","celebration","shooting_star"],"uniqueKey":"effect.oneOf.0","typeLabel":"enum\u003cstring>"},{"type":"null","title":"Effect","description":"The iMessage send effect requested for this message, or null. It shows on the recipient's device only when `channel` is `imessage`.","uniqueKey":"effect.oneOf.1","typeLabel":"null"}],"uniqueKey":"effect","typeLabel":"enum\u003cstring> | null"},"reply_to_message_id":{"oneOf":[{"type":"string","title":"Reply To Message Id","description":"The ID of the message this one quotes as an inline reply, or null. The quote shows on the recipient's device only when `channel` is `imessage`.","uniqueKey":"reply_to_message_id.oneOf.0","typeLabel":"string"},{"type":"null","title":"Reply To Message Id","description":"The ID of the message this one quotes as an inline reply, or null. The quote shows on the recipient's device only when `channel` is `imessage`.","uniqueKey":"reply_to_message_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"reply_to_message_id","typeLabel":"string | null"}},"type":"object","required":["id","direction","created_at","status","body","attachments"],"title":"Message","example":{"attachments":[],"body":"Hey Sam — quick check-in about your order.","contact_id":"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f","conversation_id":"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d","conversation_kind":"one_to_one","created_at":"2026-10-08T11:40:44.770512Z","direction":"outbound","held_reason":"working_hours","held_until":"2026-10-08T16:00:00+00:00","id":"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b","sent_at":"2026-10-08T11:40:44.770Z","status":"pending","to":"+14155551234"},"uniqueKey":"","typeLabel":"Message · object"},"examples":{"Example":{"title":"Example","value":{"attachments":[],"body":"Hey Sam — quick check-in about your order.","contact_id":"c8a1f4e2-3b9d-4f7c-a8e5-1d2c3b4a5e6f","conversation_id":"3a4b5c6d-7e8f-9a0b-1c2d-3e4f5a6b7c8d","conversation_kind":"one_to_one","created_at":"2026-10-08T11:40:44.770512Z","direction":"outbound","held_reason":"working_hours","held_until":"2026-10-08T16:00:00+00:00","id":"8b3a4e72-1c2d-4e5f-9a0b-2c3d4e5f6a7b","sent_at":"2026-10-08T11:40:44.770Z","status":"pending","to":"+14155551234"}}},"exampleType":"generated"}},"exampleType":"generated"},"30361915-dd43-4a3d-af68-3ec554b88df7":{"description":"Missing or invalid API key.","content":{"application/json":{"schema":{"properties":{"detail":{"type":"object","title":"ApiErrorDetail","description":"Error envelope. Every `/v1` error response wraps a stable `error` code and a human-readable `message` in `detail`.","required":["error","message"],"properties":{"error":{"type":"string","title":"Error","description":"Stable machine-readable error code. Use this for branching logic in your integration; the human-readable `message` is subject to change. See the Error Reference for the catalog.","examples":["validation_error"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description of what went wrong.","examples":["Exactly one of contact_id, to, chat_guid, or participant_phones is required"],"isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"ApiErrorDetail · object"}},"type":"object","required":["detail"],"title":"ApiError","example":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}},"uniqueKey":"","typeLabel":"ApiError · object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}}}},"exampleType":"generated"}},"exampleType":"generated"},"1524e295-c581-487a-a4d1-a6b1d1e7159e":{"description":"`forbidden`: your iBubbl account is suspended or cancelled.","content":{"application/json":{"schema":{"properties":{"detail":{"type":"object","title":"ApiErrorDetail","description":"Error envelope. Every `/v1` error response wraps a stable `error` code and a human-readable `message` in `detail`.","required":["error","message"],"properties":{"error":{"type":"string","title":"Error","description":"Stable machine-readable error code. Use this for branching logic in your integration; the human-readable `message` is subject to change. See the Error Reference for the catalog.","examples":["validation_error"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description of what went wrong.","examples":["Exactly one of contact_id, to, chat_guid, or participant_phones is required"],"isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"ApiErrorDetail · object"}},"type":"object","required":["detail"],"title":"ApiError","example":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}},"uniqueKey":"","typeLabel":"ApiError · object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}}}},"exampleType":"generated"}},"exampleType":"generated"},"7a3f2075-169e-4aa1-8487-0d06e68c28a1":{"description":"`not_found` (no contact with that `contact_id`) or `group_not_found` (no group with that `chat_guid`).","content":{"application/json":{"schema":{"properties":{"detail":{"type":"object","title":"ApiErrorDetail","description":"Error envelope. Every `/v1` error response wraps a stable `error` code and a human-readable `message` in `detail`.","required":["error","message"],"properties":{"error":{"type":"string","title":"Error","description":"Stable machine-readable error code. Use this for branching logic in your integration; the human-readable `message` is subject to change. See the Error Reference for the catalog.","examples":["validation_error"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description of what went wrong.","examples":["Exactly one of contact_id, to, chat_guid, or participant_phones is required"],"isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"ApiErrorDetail · object"}},"type":"object","required":["detail"],"title":"ApiError","example":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}},"uniqueKey":"","typeLabel":"ApiError · object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}}}},"exampleType":"generated"}},"exampleType":"generated"},"6de46e9d-93d7-4647-a388-1eecfd41d74d":{"description":"Idempotency key reused with a different payload.","content":{"application/json":{"schema":{"properties":{"detail":{"type":"object","title":"ApiErrorDetail","description":"Error envelope. Every `/v1` error response wraps a stable `error` code and a human-readable `message` in `detail`.","required":["error","message"],"properties":{"error":{"type":"string","title":"Error","description":"Stable machine-readable error code. Use this for branching logic in your integration; the human-readable `message` is subject to change. See the Error Reference for the catalog.","examples":["validation_error"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description of what went wrong.","examples":["Exactly one of contact_id, to, chat_guid, or participant_phones is required"],"isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"ApiErrorDetail · object"}},"type":"object","required":["detail"],"title":"ApiError","example":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}},"uniqueKey":"","typeLabel":"ApiError · object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}}}},"exampleType":"generated"}},"exampleType":"generated"},"bbfa6168-7493-47a5-8cae-db041be5b44d":{"description":"Request rejected; see `detail.error`. `validation_error` (bad request shape), `contact_opted_out`, `contact_blocked`, `no_eligible_line`, `unresponsive_contact`, `cold_cap_exhausted`, `followup_cap_exhausted`, `daily_cap_exhausted`, `group_outbound_blocked_suppression`, `insufficient_participants`, `reply_target_not_found`, `reply_target_unsent`, `reply_target_partly_unsent`, `first_message_needs_text`, `attachment_fetch_failed`, `attachment_too_large`, `unsupported_attachment`, or `attachment_combination_not_supported`.","content":{"application/json":{"schema":{"properties":{"detail":{"type":"object","title":"ApiErrorDetail","description":"Error envelope. Every `/v1` error response wraps a stable `error` code and a human-readable `message` in `detail`.","required":["error","message"],"properties":{"error":{"type":"string","title":"Error","description":"Stable machine-readable error code. Use this for branching logic in your integration; the human-readable `message` is subject to change. See the Error Reference for the catalog.","examples":["validation_error"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description of what went wrong.","examples":["Exactly one of contact_id, to, chat_guid, or participant_phones is required"],"isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"ApiErrorDetail · object"}},"type":"object","required":["detail"],"title":"ApiError","example":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}},"uniqueKey":"","typeLabel":"ApiError · object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}}}},"exampleType":"generated"}},"exampleType":"generated"},"7028e2c9-af81-4c68-9728-4f028178d6e0":{"description":"`rate_limited`: too many sends with attachments are being downloaded right now. Wait `Retry-After` seconds and retry with the same `idempotency_key`.","headers":{"Retry-After":{"description":"Seconds to wait before retrying.","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"properties":{"detail":{"type":"object","title":"ApiErrorDetail","description":"Error envelope. Every `/v1` error response wraps a stable `error` code and a human-readable `message` in `detail`.","required":["error","message"],"properties":{"error":{"type":"string","title":"Error","description":"Stable machine-readable error code. Use this for branching logic in your integration; the human-readable `message` is subject to change. See the Error Reference for the catalog.","examples":["validation_error"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description of what went wrong.","examples":["Exactly one of contact_id, to, chat_guid, or participant_phones is required"],"isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"ApiErrorDetail · object"}},"type":"object","required":["detail"],"title":"ApiError","example":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}},"uniqueKey":"","typeLabel":"ApiError · object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}}}},"exampleType":"generated"}},"exampleType":"generated"},"1f37e637-b76f-449b-a4c9-c9405f9f6d62":{"description":"`no_owner_rep` (your account has no active owner rep to send as) or `internal_error`. Retry with the same `idempotency_key`.","content":{"application/json":{"schema":{"properties":{"detail":{"type":"object","title":"ApiErrorDetail","description":"Error envelope. Every `/v1` error response wraps a stable `error` code and a human-readable `message` in `detail`.","required":["error","message"],"properties":{"error":{"type":"string","title":"Error","description":"Stable machine-readable error code. Use this for branching logic in your integration; the human-readable `message` is subject to change. See the Error Reference for the catalog.","examples":["validation_error"],"isRequired":true,"uniqueKey":"detail.error","typeLabel":"string"},"message":{"type":"string","title":"Message","description":"Human-readable description of what went wrong.","examples":["Exactly one of contact_id, to, chat_guid, or participant_phones is required"],"isRequired":true,"uniqueKey":"detail.message","typeLabel":"string"}},"isRequired":true,"uniqueKey":"detail","typeLabel":"ApiErrorDetail · object"}},"type":"object","required":["detail"],"title":"ApiError","example":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}},"uniqueKey":"","typeLabel":"ApiError · object"},"examples":{"Example":{"title":"Example","value":{"detail":{"error":"validation_error","message":"Exactly one of contact_id, to, chat_guid, or participant_phones is required"}}}},"exampleType":"generated"}},"exampleType":"generated"}},"security":{"8ac342c9-d45e-40bd-8d78-1d9902c58394":{"BearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"ib_pk_\u003c64 hex>","description":"Bearer API key. Format: `Authorization: Bearer ib_pk_\u003c64 hex>` (70 characters). Generate keys from Dashboard → Settings → API Access.","scopes":[],"schemeName":"BearerAuth"}}},"servers":{"76516907-6d68-4376-9209-aa2720597e78":{"url":"https://api.ibubbl.com"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","bearerFormat":"ib_pk_\u003c64 hex>","description":"Bearer API key. Format: `Authorization: Bearer ib_pk_\u003c64 hex>` (70 characters). Generate keys from Dashboard → Settings → API Access.","scopes":[],"schemeName":"BearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Bearer API key. Format: `Authorization: Bearer ib_pk_\u003c64 hex>` (70 characters). Generate keys from Dashboard → Settings → API Access.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"BearerAuth","name":"Authorization"}],"title":"BearerAuth"}]},"originalFileLocation":"openapi/public.json"},"subdomain":"ibubbl","siteName":"iBubbl","title":"Send a message - iBubbl","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-11-11T04:07:19.159Z","originalFileLocation":"api-reference/messages/send.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=null;if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"system\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"Send a message to one contact (contact_id, or to — an E.164 phone number; the contact is created on first use), into an existing group (chat_guid), or to a new group (participant_phones). Exactly one of the four is required. The response returns immediately with status: \u0026quot;pending\u0026quot; or \u0026quot;queued\u0026quot;. Delivery progress arrives as webhook events (message.sent, message.delivered, message.read, message.failed), or poll GET /v1/messages/{id}. Idempotency is required. Provide a unique idempotency_key per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns 409 idempotency_conflict. See the Idempotency guide. A send to an opted-out contact returns 422 contact_opted_out; see Suppression. To send files, list up to 10 https URLs in attachments (1:1 only); body, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See Attachments. On a 5xx (including a 502/503 from the network edge during a deploy), retry with the same idempotency_key.\">\u003cmeta data-mint-head name=\"application-name\" content=\"iBubbl\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Send a message - iBubbl\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send a message to one contact (contact_id, or to — an E.164 phone number; the contact is created on first use), into an existing group (chat_guid), or to a new group (participant_phones). Exactly one of the four is required. The response returns immediately with status: \u0026quot;pending\u0026quot; or \u0026quot;queued\u0026quot;. Delivery progress arrives as webhook events (message.sent, message.delivered, message.read, message.failed), or poll GET /v1/messages/{id}. Idempotency is required. Provide a unique idempotency_key per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns 409 idempotency_conflict. See the Idempotency guide. A send to an opted-out contact returns 422 contact_opted_out; see Suppression. To send files, list up to 10 https URLs in attachments (1:1 only); body, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See Attachments. On a 5xx (including a 502/503 from the network edge during a deploy), retry with the same idempotency_key.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"iBubbl\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.ibubbl.com/api-reference/messages/send\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://ibubbl.mintlify.site/_mintlify/api/og/v2?division=Messages\u0026amp;title=Send+a+message\u0026amp;description=Send+a+message+to+one+contact+%28%60contact_id%60%2C+or+%60to%60+%E2%80%94+an+E.164+phone+number%3B+the+contact+is+created+on+first+use%29%2C+into+an+existing+group+%28%60chat_guid%60%29%2C+or+to+\u0026amp;theme=f46070295e80383f74aa319a\u0026amp;signature=8c0aca8a127f4942535aa5d8aaddde9d6bc6ee43939484573d5d50ae3fa0f412\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Send a message - iBubbl\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send a message to one contact (contact_id, or to — an E.164 phone number; the contact is created on first use), into an existing group (chat_guid), or to a new group (participant_phones). Exactly one of the four is required. The response returns immediately with status: \u0026quot;pending\u0026quot; or \u0026quot;queued\u0026quot;. Delivery progress arrives as webhook events (message.sent, message.delivered, message.read, message.failed), or poll GET /v1/messages/{id}. Idempotency is required. Provide a unique idempotency_key per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns 409 idempotency_conflict. See the Idempotency guide. A send to an opted-out contact returns 422 contact_opted_out; see Suppression. To send files, list up to 10 https URLs in attachments (1:1 only); body, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See Attachments. On a 5xx (including a 502/503 from the network edge during a deploy), retry with the same idempotency_key.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://ibubbl.mintlify.site/_mintlify/api/og/v2?division=Messages\u0026amp;title=Send+a+message\u0026amp;description=Send+a+message+to+one+contact+%28%60contact_id%60%2C+or+%60to%60+%E2%80%94+an+E.164+phone+number%3B+the+contact+is+created+on+first+use%29%2C+into+an+existing+group+%28%60chat_guid%60%29%2C+or+to+\u0026amp;theme=f46070295e80383f74aa319a\u0026amp;signature=8c0aca8a127f4942535aa5d8aaddde9d6bc6ee43939484573d5d50ae3fa0f412\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/ibubbl/ohHXW5JhUEQpLDyU/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"iBubbl\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#3B82F6\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.ibubbl.com/api-reference/messages/send\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/messages/send.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.ibubbl.com/#organization\",\"name\":\"iBubbl\",\"url\":\"https://docs.ibubbl.com\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/ibubbl/vKOMJPyDWV9K1NYc/logo/light.png?fit=max\u0026auto=format\u0026n=vKOMJPyDWV9K1NYc\u0026q=85\u0026s=b8846160ee4db226f79f0e4f7f331870\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.ibubbl.com#website\",\"name\":\"iBubbl\",\"url\":\"https://docs.ibubbl.com\",\"publisher\":{\"@id\":\"https://docs.ibubbl.com/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.ibubbl.com/api-reference/messages/send#webpage\",\"url\":\"https://docs.ibubbl.com/api-reference/messages/send\",\"name\":\"Send a message\",\"description\":\"Send a message to one contact (contact_id, or to — an E.164 phone number; the contact is created on first use), into an existing group (chat_guid), or to a new group (participant_phones). Exactly one of the four is required. The response returns immediately with status: \\\"pending\\\" or \\\"queued\\\". Delivery progress arrives as webhook events (message.sent, message.delivered, message.read, message.failed), or poll GET /v1/messages/{id}. Idempotency is required. Provide a unique idempotency_key per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns 409 idempotency_conflict. See the Idempotency guide. A send to an opted-out contact returns 422 contact_opted_out; see Suppression. To send files, list up to 10 https URLs in attachments (1:1 only); body, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See Attachments. On a 5xx (including a 502/503 from the network edge during a deploy), retry with the same idempotency_key.\",\"dateModified\":\"2026-11-11T04:07:19.159Z\",\"isPartOf\":{\"@id\":\"https://docs.ibubbl.com#website\"},\"breadcrumb\":{\"@id\":\"https://docs.ibubbl.com/api-reference/messages/send#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.ibubbl.com/api-reference/messages/send#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"iBubbl\",\"item\":\"https://docs.ibubbl.com\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Send a message\",\"item\":\"https://docs.ibubbl.com/api-reference/messages/send\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.ibubbl.com/api-reference/messages/send#apireference\",\"headline\":\"Send a message\",\"name\":\"Send a message\",\"description\":\"Send a message to one contact (contact_id, or to — an E.164 phone number; the contact is created on first use), into an existing group (chat_guid), or to a new group (participant_phones). Exactly one of the four is required. The response returns immediately with status: \\\"pending\\\" or \\\"queued\\\". Delivery progress arrives as webhook events (message.sent, message.delivered, message.read, message.failed), or poll GET /v1/messages/{id}. Idempotency is required. Provide a unique idempotency_key per logical send (UUIDv4 recommended); a retry with the same key and payload replays the original response, while a reused key with a different payload returns 409 idempotency_conflict. See the Idempotency guide. A send to an opted-out contact returns 422 contact_opted_out; see Suppression. To send files, list up to 10 https URLs in attachments (1:1 only); body, if set, is their caption. iBubbl downloads them before answering, which can take up to about 30 seconds, so allow 60 seconds before your client times out. See Attachments. On a 5xx (including a 502/503 from the network edge during a deploy), retry with the same idempotency_key.\",\"url\":\"https://docs.ibubbl.com/api-reference/messages/send\",\"mainEntityOfPage\":{\"@id\":\"https://docs.ibubbl.com/api-reference/messages/send#webpage\"},\"dateModified\":\"2026-11-11T04:07:19.159Z\",\"publisher\":{\"@id\":\"https://docs.ibubbl.com/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.ibubbl.com#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"iBubbl\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"iBubbl\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/messages/send.md","siteName":"iBubbl","nav":{"global":null,"groups":[{"group":"Get started","pages":[{"title":"Overview","href":"/introduction"},{"title":"Quickstart","href":"/quickstart"},{"title":"Authentication","href":"/authentication"},{"title":"Build with AI","href":"/build-with-ai"}]},{"group":"Concepts","pages":[{"title":"Message lifecycle","href":"/concepts/message-lifecycle"},{"title":"Limits and queues","href":"/concepts/limits"},{"title":"Lines and routing","href":"/concepts/lines-and-routing"},{"title":"Idempotency","href":"/idempotency"},{"title":"Pagination","href":"/concepts/pagination"},{"title":"Working Hours \u0026 Scheduling","href":"/concepts/working-hours"},{"title":"After-Hours Auto-Reply","href":"/concepts/after-hours-reply"},{"title":"Suppression \u0026 Opt-Outs","href":"/concepts/suppression"},{"title":"Group Conversations","href":"/concepts/group-conversations"}]},{"group":"Guides","pages":[{"title":"Send messages","href":"/guides/send-messages"},{"title":"Send attachments","href":"/guides/attachments"},{"title":"Tapbacks, Read Receipts \u0026 Typing Indicators","href":"/guides/reactions-read-receipts-typing"},{"title":"Receive messages","href":"/guides/receive-messages"},{"title":"Signature verification","href":"/guides/webhook-signatures"},{"title":"Test webhooks locally","href":"/guides/test-webhooks-locally"},{"title":"Retries and deduplication","href":"/guides/webhook-retries"},{"title":"Inbound events","href":"/inbound-events/overview"}]},{"group":"Webhooks","pages":[{"title":"Webhooks Overview","href":"/webhooks/overview"},{"title":"Webhook Events","description":"Catalog of webhook event types with example payloads.","href":"/webhooks/events"}]},{"group":"API reference","pages":[{"group":"Messages","pages":[{"title":"Send a message","openapi":"POST /v1/messages","href":"/api-reference/messages/send"},{"title":"List messages","openapi":"GET /v1/messages","description":"List your messages, inbound and outbound, newest first. Use it to catch up after your webhook endpoint was down, or to read a conversation's history.\n\nResults are paginated: `has_more` tells you whether there is another page, and you get it by passing the `id` of the last message as `starting_after`. Pages are stable while new messages arrive: nothing is skipped or repeated. See [Pagination](/concepts/pagination).\n\nFilters combine with AND. A filter value that matches nothing (including another account's `contact_id` or `chat_guid`) returns an empty page. An unknown or repeated query parameter returns `422 validation_error`.\n\nMessages stay listed after their contact is deleted or blocked.\n\nLists allow 120 requests a minute per account, across all your API keys and all lists. Over that, the answer is `429 rate_limited` with a `Retry-After` header in seconds.","href":"/api-reference/messages/list"},{"title":"Retrieve a message","openapi":"GET /v1/messages/{message_id}","href":"/api-reference/messages/retrieve"},{"title":"Add a tapback","openapi":"POST /v1/messages/{message_id}/reactions","href":"/api-reference/messages/react"},{"title":"Remove a tapback","openapi":"DELETE /v1/messages/{message_id}/reactions/{reaction_id}","href":"/api-reference/messages/remove-reaction"}]},{"group":"Contacts","pages":[{"title":"Create or update a contact","openapi":"POST /v1/contacts","href":"/api-reference/contacts/upsert"},{"title":"List contacts","openapi":"GET /v1/contacts","href":"/api-reference/contacts/list"},{"title":"Retrieve a contact","openapi":"GET /v1/contacts/{contact_id}","href":"/api-reference/contacts/retrieve"},{"title":"Update a contact","openapi":"PATCH /v1/contacts/{contact_id}","href":"/api-reference/contacts/update"},{"title":"Delete a contact","openapi":"DELETE /v1/contacts/{contact_id}","href":"/api-reference/contacts/delete"},{"title":"Add a tag to a contact","openapi":"POST /v1/contacts/{contact_id}/tags","href":"/api-reference/contacts/add-tag"},{"title":"Remove a tag from a contact","openapi":"DELETE /v1/contacts/{contact_id}/tags/{name}","href":"/api-reference/contacts/remove-tag"},{"title":"Opt a contact out","openapi":"POST /v1/contacts/{contact_id}/opt-out","href":"/api-reference/contacts/opt-out"},{"title":"Block a contact","openapi":"POST /v1/contacts/{contact_id}/block","href":"/api-reference/contacts/block"},{"title":"Unblock a contact","openapi":"DELETE /v1/contacts/{contact_id}/block","href":"/api-reference/contacts/unblock"}]},{"group":"Conversations","pages":[{"title":"Mark a conversation read","openapi":"POST /v1/conversations/{conversation_id}/read","href":"/api-reference/conversations/mark-read"},{"title":"Start typing","openapi":"POST /v1/conversations/{conversation_id}/typing","href":"/api-reference/conversations/start-typing"},{"title":"Stop typing","openapi":"DELETE /v1/conversations/{conversation_id}/typing","href":"/api-reference/conversations/stop-typing"}]},{"group":"Webhooks","pages":[{"title":"Create a webhook subscription","openapi":"POST /v1/webhooks","href":"/api-reference/webhooks/create"},{"title":"List webhook subscriptions","openapi":"GET /v1/webhooks","href":"/api-reference/webhooks/list"},{"title":"Retrieve a webhook subscription","openapi":"GET /v1/webhooks/{subscription_id}","href":"/api-reference/webhooks/retrieve"},{"title":"Revoke a webhook subscription","openapi":"DELETE /v1/webhooks/{subscription_id}","href":"/api-reference/webhooks/revoke"}]},{"group":"Inbound events","pages":[{"title":"Receive an event","openapi":"POST /v1/events/{token}","href":"/api-reference/inbound-events/receive"}]}]},{"group":"Resources","pages":[{"title":"Error Reference","href":"/errors"},{"title":"OpenAPI, Postman and Insomnia","href":"/openapi"},{"title":"Versioning","href":"/versioning"},{"title":"Changelog","href":"/changelog"},{"title":"Support","href":"/support"}]}]},"basePath":"","title":"Send a message - iBubbl","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}