{ "success": true, "skippedOnly": true, "skipReason": "recipient_replied", "skipMessage": "Skipped: this contact already replied in your workspace at any time. The skipIfReplied gate prevented this send.", "repliedAt": "2026-10-13T16:59:48.131Z", "message": null, "leadId": "6ace637e30e2d7468c7bf397"}
{ "error": "sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. \"22:00\"–\"06:00\") are not supported; use \"00:00\"–\"23:59\" to send at any hour.", "code": "INVALID_SEND_WINDOW"}
{ "error": "\"EST\" is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as \"America/New_York\" or \"Europe/London\", or omit timezone to use your workspace timezone.", "code": "INVALID_TIMEZONE"}
{ "error": "allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].", "code": "INVALID_ALLOWED_DAYS"}
Messages
Send Message
Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.
{ "success": true, "skippedOnly": true, "skipReason": "recipient_replied", "skipMessage": "Skipped: this contact already replied in your workspace at any time. The skipIfReplied gate prevented this send.", "repliedAt": "2026-10-13T16:59:48.131Z", "message": null, "leadId": "6ace637e30e2d7468c7bf397"}
{ "error": "sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. \"22:00\"–\"06:00\") are not supported; use \"00:00\"–\"23:59\" to send at any hour.", "code": "INVALID_SEND_WINDOW"}
{ "error": "\"EST\" is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as \"America/New_York\" or \"Europe/London\", or omit timezone to use your workspace timezone.", "code": "INVALID_TIMEZONE"}
{ "error": "allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].", "code": "INVALID_ALLOWED_DAYS"}
The Try it panel runs against production (https://app.tuco.ai) with the key you paste
into it. There is no sandbox — a request from this page sends a real message from one of your lines.
This is the primary endpoint for automation tools like GetSales, n8n, Make, or your own backend.
One call = one message. Tuco handles retries, delivery verification, and fallback internally.
{ "success": true, "skippedOnly": true, "skipReason": "recipient_replied", "skipMessage": "Skipped: this contact already replied in your workspace at any time. The skipIfReplied gate prevented this send.", "repliedAt": "2026-10-13T16:59:48.131Z", "message": null, "leadId": "6ace637e30e2d7468c7bf397"}
{ "error": "sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. \"22:00\"–\"06:00\") are not supported; use \"00:00\"–\"23:59\" to send at any hour.", "code": "INVALID_SEND_WINDOW"}
{ "error": "\"EST\" is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as \"America/New_York\" or \"Europe/London\", or omit timezone to use your workspace timezone.", "code": "INVALID_TIMEZONE"}
{ "error": "allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].", "code": "INVALID_ALLOWED_DAYS"}
The text content to send. Required unlessattachmentUrls is provided (you can send attachments only, or message + attachments).Template variables are filled in at send time — on every send attempt, against the line that actually sends the message (so retries, scheduled or send-window-deferred messages, and round-robin all name the right line) and the contact’s current data. The same variables campaigns use:
Your workspace variable’s default (Settings → Variables)
Single {x} or double {{x}} braces, any case. Add a fallback after a pipe: {firstName|there}. Variables work inside links too (https://cal.com/{line_first_name}). Anything in braces that is not one of these is sent exactly as written.A blank is never sent. If a variable has no value and no fallback, the request is rejected: an empty {firstName} / {lastName} → 400 MALFORMED_NAME_TEMPLATE; any other → 400 TEMPLATE_VARIABLE_UNRESOLVED (the response lists them in unresolvedVariables). Text you already filled in yourself is unaffected; an unfilled token from another tool (e.g. {{contact_name}}, {name}) or a greeting whose name expanded to nothing ("Hey , …") is still rejected with MALFORMED_NAME_TEMPLATE.
{ "recipientPhone": "+14155550123", "message": "Hey {firstName|there}, {line_first_name} here — grab a time: https://cal.com/{line_first_name}" }
Optional array of URLs (max 2, max 25 MB each). When provided, message can be empty. Supported formats: images (PNG, JPG, GIF, WebP, HEIC), video (MP4, MOV), audio (MP3, M4A, WAV, AAC, OGG, CAF), and PDF. Supported sources: any public URL, UploadThing/Blob URLs that belong to your workspace. To send audio as a native iMessage voice note (the waveform bubble), add voiceNote: true. The audio must be a direct, publicly reachable file URL — a YouTube or Drive page is rejected with a 400. Easiest source is Leads → Uploads (/leads?tab=uploads). See Voice note requirements.With an attachment or voice note, you get status: "sent" right away and it starts sending. If it fails, you get a message.failed webhook for the same message._id.
Sending the same attachment URL repeatedly (e.g. a promo video in an automation)? Tuco caches attachments per line — the second send skips the download and upload, making it significantly faster.
Send a single audio attachment as a native iMessage voice note (the waveform bubble) instead of a generic audio file. Tuco transcodes the audio for you. Requires exactly one audio attachment in attachmentUrls — see Send with Attachments for the full rules.
The phone number to text, in E.164 format (e.g. "+12025551234"). This is how you address
almost every send — you do not need a leadId. Tuco matches an existing lead on this number, or
creates one under the Quick Sends list.Required unless you pass leadId or recipientEmail.
Send to an existing lead using their stored contact details. When provided together with
recipientPhone, the body’s phone number is the send-to address and the lead is used for linking.Required unless you pass recipientPhone or recipientEmail.
Use recipientPhone unless you specifically need this. An email address only reaches someone
over iMessage if that exact address is registered to their Apple account, which is uncommon and
impossible to assume. Addressing by phone number is what works.
Only useful in two cases: messageType: "email", or iMessage to a contact you already know is
reachable at that Apple ID. Required unless you pass recipientPhone or leadId.
ISO 8601 timestamp to send in the future (e.g. "2026-10-15T14:30:00Z"). The
response status is "scheduled". If you also set a send window and this time
falls outside it, the message is moved to the next time the window is open.
A value that can’t be parsed returns 400.
Earliest time to send, HH:mm 24-hour format (e.g. "09:00"), inclusive. Set
bothsendWindowStart and sendWindowEnd — if only one is sent, the window is
ignored. Outside the window the request still returns 201 with
status: "scheduled"; the message is held until the window opens. Use
"00:00"–"23:59" for any hour. Anything that isn’t HH:mm returns 400.
Latest time to send, HH:mm (e.g. "17:00"). The end is exclusive, and it must be
later than the start. An overnight window such as "22:00"–"06:00" returns
400 INVALID_SEND_WINDOW; use "00:00"–"23:59" to send at any hour.
IANA timezone for the send window (e.g. "America/New_York"). Optional. When
omitted, your workspace timezone is used (or America/New_York if the workspace
has none). Use a full name — an abbreviation like "EST" or an unknown name
returns 400 INVALID_TIMEZONE when a send window is set. "UTC" is accepted.
The timezone is only used together with a send window.
Days when sending is allowed, as whole numbers. 0 = Sunday, 6 = Saturday.
Example: [1,2,3,4,5] for weekdays only. An empty array means every day; any
other value returns 400 INVALID_ALLOWED_DAYS. Only applies together with
sendWindowStart and sendWindowEnd — a day list without hours is ignored. On a
day that isn’t allowed, the message waits for sendWindowStart on the next allowed
day. See Send window and allowed days.
Keep the wait between follow-ups to the same contact. When true, and an earlier
message to this contact went out late, this message is held so the original spacing
is preserved: it waits until the previous message’s actual send time plus the gap
between your two API calls. Works on its own — no send window or workspace setting
needed. Accepts true or "true"; any other value is treated as false. While
held, the response status is "scheduled". See
Keep the wait between follow-ups.
When true, if the message ends in failed status (technical error after
retries), Tuco sends a fallback SMS via your configured fallback number.
If no fallback is configured on the workspace the request is still accepted —
the iMessage send proceeds and simply has no SMS to fall back to. Check
GET /api/workspace/fallback-config
first if you need the fallback to actually fire.
When true, Tuco skips the iMessage availability check entirely and sends
the message straight via your workspace’s configured fallback — Twilio, GHL, or
a custom webhook (Settings → When iMessage isn’t available). Use it when you
already know the recipient isn’t on iMessage, or you simply want SMS.The send never touches iMessage, so it does not consume the line’s daily
cap or the availability-check budget, and the response status is "fallback".If no fallback is configured — or the fallback dispatch fails (e.g. a bad Twilio
from-number) — the message is not delivered: the response returns
"success": false with a channel-tagged error, and the message is recorded
with "fallbackSmsStatus": "failed". The request itself still succeeds — read the
success flag in the body rather than relying on the status code.Unlike sendFallbackSmsOnFailed (which is reactive — fallback only after an
iMessage send fails), forceFallback is proactive: it never attempts iMessage
in the first place.
true / "true" → skip if the contact has ever replied
a window string → skip only if they replied within that window:
"1m", "1h", "1d", "2d", "5d", "7d", "14d", "1mo", "1yr"
(m=minute, h=hour, d=day, w=week, mo=30 days, yr=365 days)
Scope is your workspace — a reply to any of your lines counts (not just
the sending line). The check never crosses workspaces. On a skip, no message
is created and the API returns 200 with skippedOnly: true (see
Skip if the contact already replied).
The check runs again right before a queued message sends: if the contact replied
while it was waiting, it is cancelled instead of sent.
An unrecognized value returns 400 INVALID_SKIP_IF_REPLIED.
Optional tracing ID. If omitted, Tuco generates one (app_…). The same ID
is preferred from the x-correlation-id request header. It flows through
every internal log event for this send so you can grep one ID and see the entire
request → gate → send → webhook chain. See
API Overview → Correlation IDs.
Request headers
Headers Tuco recognizes in addition to Authorization.
Header
Purpose
x-correlation-id
Request-scoped tracing ID (preferred over body field). Echoed back in logs under correlationId.
x-execution-id
GHL workflow execution ID. Only set when calling from a GHL workflow context.
x-ghl-workflow-id
GHL workflow definition ID. Pairs with x-execution-id.
Idempotency-Key
When supplied, Tuco caches the response and replays it on retry within the idempotency window. Use one unique key per logical send.
Create or import a lead first using POST /api/leads, then send using leadId as shown below.
curl -X POST "https://app.tuco.ai/api/messages" \ -H "Authorization: Bearer tuco_xxxxxxxxxxxxx" \ -H "Content-Type: application/json" \ -d '{ "message": "Hi, this is a test from Tuco.", "leadId": "667f1f77bcf86cd799439012" }'
Need a leadId first? Create one with POST /api/leads, then use the returned leadId in this request.
You can point a GoHighLevel Workflow → Webhook action directly at this endpoint —
no GHL Marketplace app or action secret required, just your Tuco API key in the
Authorization header. GHL’s Webhook action already includes the full contact
payload; Tuco reads GHL’s native field names so the only thing you map in Custom
Data is message.
1
Add a Webhook action to your workflow
Method POST, URL https://app.tuco.ai/api/messages.
2
Add the auth header
Authorization = Bearer tuco_xxxxxxxxxxxxx.
3
Add Custom Data
Set message (required). Optionally add lineId (pin a sending line — otherwise
Tuco round-robins) and attachmentUrls (a single URL or comma-separated list).
Tuco auto-maps GHL’s native fields onto the canonical request fields. Custom Data
always wins — set any field there to override what’s derived from the contact:
This mapping is additive and backward compatible — it only fills a field you did
not already send. Existing integrations that post canonical fields (recipientPhone,
ghlContactId, …) are completely unaffected.
If {{contact.phone}} is empty on the contact, the request fails with
missing_recipient. Make sure the contact has a phone or email before the webhook fires.
The API always returns 201 when the message is successfully created.
The status field tells you what happens next.
Pre-send checks are never errors. Line limits, time windows, device gaps,
and contact gaps cause status: "pending" or "scheduled" — the message is
accepted and will send when conditions are met.
When the recipient was matched to an existing lead (duplicate), the API returns 200 with duplicateOnly: true, existingLeadIds, and leadIds so your automation can continue without treating it as an error.
When a send window, an allowed-day rule or respectGap holds the message, the request
still succeeds. status is "scheduled" and message.scheduledDate is when it will
be released.
HTTP 201 — outside the send window, held until it opens
Tuco automatically blocks duplicate sends — no header required. Two POSTs with
identical (workspaceId, recipientPhone, recipientEmail, message) within
15 minutes are collapsed: the second one returns 200 with the original
message and does not fire a new send.
HTTP 200 — duplicate caught
{ "success": true, "duplicateOnly": true, "duplicateMessage": "Same message text already sent to this contact 42s ago — returning existing message instead of sending again", "message": { /* the original sibling message doc */ }, "leadId": "..."}
Branch on duplicateOnly === true and treat it as a no-op success. The
message._id in the response is the original send, so your CRM workflow can
keep moving without re-sending.
This works for concurrent firings (the most common cause of accidental
duplicates — an integration retrying within milliseconds) AND for upstream
retries up to 15 minutes apart. The guard is built on an atomic Mongo write,
so concurrent identical POSTs cannot both proceed.
Failed sends: if your first send ended in status: "failed" and you
immediately retry with the same body within 15 minutes, you’ll get the failed
sibling back with duplicateOnly: true. To force a fresh send: change the
body or wait 15 minutes.
For deeper detail, edge cases, and ops events, see
Atomic Duplicate Guard.Idempotency-Key is still supported and runs before the dedup guard.
Use it when your client controls retries — it gives you a 24-hour window
keyed on the exact request rather than on body content.
Set skipIfReplied to avoid following up with a contact who has already responded
to you. Tuco checks your workspace’s inbound history for this recipient (phone or
email) and, if it finds a reply, does not create or send the message. This is useful for drip
automations in n8n/Make/GHL where you don’t want to nudge someone who already wrote
back.
Skip if the contact has ever replied in your workspace.
"1m""1h""1d""2d""5d""7d""14d""1mo""1yr"
Skip only if they replied within that window.
Units: m = minute, h = hour, d = day, w = week, mo = 30 days, yr = 365 days.
General form: <number><unit> (e.g. "3d", "36h"). Note "1m" is one minute and
"1mo" is one month.
Scope is your workspace, not a single line. A reply to any of your lines counts —
which line you send from doesn’t matter. The check is strictly scoped to your workspace
and never sees another workspace’s replies.
No message is created. success is true (the request was handled — do not retry)
and skippedOnly distinguishes it from a real send.
HTTP 200 — skipped because the contact already replied
{ "success": true, "skippedOnly": true, "skipReason": "recipient_replied", "skipMessage": "Skipped: this contact already replied in your workspace within the last 7d. The skipIfReplied gate prevented this send.", "repliedAt": "2026-06-27T18:40:11.020Z", "message": null, "leadId": "667f1f77bcf86cd799439012"}
Branch on skippedOnly === true and treat it as a successful no-op. When the contact
has not replied (or replied outside the window), the request proceeds exactly as a
normal send and returns the usual 201 response.
An unrecognized skipIfReplied value returns 400 with
code: "INVALID_SKIP_IF_REPLIED". Use true, false, or one of the documented
window strings.
Every decision is logged internally (message.api.skipped_replied,
message.api.skip_if_replied_passed, message.api.skip_if_replied_invalid) under your
correlationId, so you can audit exactly why a send was or wasn’t suppressed.
skipIfReplied is evaluated when you call the API and again right before the message
is sent. If a message is waiting — for a scheduledDate, a send window, a line limit,
a line that is down, or a respectGap hold — and the contact replies in the meantime,
the message is cancelled instead of sent (its status becomes cancelled).With a window value such as "1h", the second check looks back from the moment of
sending, not from when you made the request.
Automations usually space follow-ups out: message 1, wait, message 2. If message 1 goes
out late — held by a send window, a line limit, pacing, or a line that was briefly
down — message 2 can land right behind it and the wait you designed disappears.Set respectGap: true on the follow-up to keep that wait.
Works without a send window.respectGap needs no sendWindowStart,
sendWindowEnd or timezone.
It is per contact, across all your lines. The previous message can have gone out
from a different line. Messages to other contacts are never affected.
The first message to a contact is never held — there is nothing to space it from.
“Previous message” means the latest one sent to that contact, whatever sent it. A
manual reply from the inbox in between becomes the new reference point.
The gap is a minimum. Held messages are released about once a minute, so the real
spacing is the gap plus up to a minute.
A send window still wins. If the hold ends outside sendWindowStart–sendWindowEnd
(or on a day not in allowedDaysOfWeek), the message waits for the window to open.
If the earlier message went out on time, nothing changes — the follow-up sends
normally.
Combine it with skipIfReplied to drop the follow-up if the contact answers while
it is being held.
Only true or "true" turn it on. Any other value is treated as off.
respectGap spaces a follow-up from a message that has already been sent. If the
earlier message is still waiting when the follow-up arrives, there is nothing to measure
from yet, so respectGap does not hold the follow-up. With several lines, if the
earlier message is pinned to a line that is down (fromLineId)
and the follow-up is not pinned, the follow-up can go out first on a healthy line —
pin both to the same line, or leave both unpinned, to avoid that.
Inside the window on an allowed day the response is the normal 201 with
status: "sent". Outside it you get 201 with status: "scheduled" — see
Accepted but held.
{ "error": "sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. \"22:00\"–\"06:00\") are not supported; use \"00:00\"–\"23:59\" to send at any hour.", "code": "INVALID_SEND_WINDOW"}
{ "error": "\"EST\" is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as \"America/New_York\" or \"Europe/London\", or omit timezone to use your workspace timezone.", "code": "INVALID_TIMEZONE"}
{ "error": "\"Mars/Phobos\" is not a recognized timezone. Use an IANA timezone name such as \"America/New_York\" or \"Europe/London\", or omit timezone to use your workspace timezone.", "code": "INVALID_TIMEZONE"}
{ "error": "allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].", "code": "INVALID_ALLOWED_DAYS"}
{ "error": "Invalid time format. sendWindowStart and sendWindowEnd must be in HH:mm format (e.g., 09:00, 17:00)"}
Day numbers sent as strings (["1","2","3"]) are accepted and stored as numbers.
The window is checked again every time the message is about to send
The window you put on a message is checked when you call the API and again each time
Tuco is about to send it. So if something delays the message — a failed attempt that
is retried a few minutes later, a line that was briefly down, a daily or hourly limit —
and the window has closed in the meantime, the message waits for the window to open
again instead of going out late. allowedDaysOfWeek is applied the same way: on a day
that isn’t allowed, the message waits for sendWindowStart on the next allowed day.This applies to every message sent through the API that carries its own
sendWindowStart and sendWindowEnd.These checks only run when a send window is set. Without sendWindowStart and
sendWindowEnd, timezone and allowedDaysOfWeek are ignored.
Tuco inserts a record in the messages collection with status pending
(or scheduled if scheduledDate is provided).
2
Pre-send checks (worker)
The worker checks line limits, time window, device gap, and contact gap.
If any fail, the message stays queued and is retried later — not failed.
3
Availability check
If the workspace has a line with Private API, Tuco checks whether the
recipient supports iMessage. If not → status becomes fallback and
fallback SMS fires (when configured).
forceFallback: trueskips this step entirely — the message goes
straight to the configured fallback channel and never runs an availability
check (so it doesn’t consume the availability-check budget or line cap).
4
Send
For individual messages: up to 5 send attempts with delivery
verification between each (polling for up to 90 seconds).
5
Outcome
sent → appears in Unibox + webhook fires.
failed → error recorded + optional fallback SMS.
delivered → confirmed later via device callbacks.
When you send without a leadId, Tuco resolves the recipient automatically:
Lead found by phone/email
If an existing lead in your workspace matches the recipientPhone or
recipientEmail, the message is linked to that lead. Any altPhone/altEmail
fields you pass will update the lead (merge, not overwrite).
New lead created (Quick Sends)
If no matching lead exists, Tuco creates one under a list called “Quick Sends”
(created automatically if it doesn’t exist). Alt contact fields are stored on
the new lead.
leadId provided
The lead must exist in your workspace. The message is linked to it.
recipientPhone/recipientEmail from the body override the lead’s stored
contact for this specific send.
When you pass altPhone1–altPhone3 or altEmail1–altEmail3, they are
stored on the lead (not the message). The worker uses them as fallback
addresses when the primary address fails the iMessage availability check.Priority order for messageType: "imessage":
Alt fields are merged onto the lead. If a lead already has altPhone1 set
and you send a new message without altPhone1, the existing value is preserved.
Only explicitly provided fields are overwritten.
By default, when a message fails (technical error), no SMS fallback is sent.To enable:
Configure Twilio on your workspace (GET /api/workspace/fallback-config).
Set sendFallbackSmsOnFailed: true in the request body (per-message) or
on the workspace (applies to all messages).
Setting sendFallbackSmsOnFailed: true without a configured fallback is not an error.
The request returns 201 and the iMessage send goes ahead as normal — there is simply no
SMS to fall back to if it fails. Read
GET /api/workspace/fallback-config to confirm
a fallback is set up before you rely on it.
Scenario
Fallback SMS fires?
Status = fallback (no iMessage), Twilio configured
Yes — always
Status = failed, sendFallbackSmsOnFailed: true, Twilio configured
Yes
Status = failed, sendFallbackSmsOnFailed: false (default)
No
Status = failed, flag is true but no fallback configured
No — the send is accepted, there is just nothing to fall back to
Fallback SMS requires recipientPhone on the message. Email-only messages
will not trigger fallback SMS.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"Tuco AI","colors":{"primary":"#FF3515","light":"#FFF5F2","dark":"#111827"},"logo":{"light":"https://mintcdn.com/tucoai/oqQbf84LeXHYKs-3/logo/light.svg?fit=max\u0026auto=format\u0026n=oqQbf84LeXHYKs-3\u0026q=85\u0026s=c601a209f9f05fe52c2cd2e67d63adeb","dark":"https://mintcdn.com/tucoai/oqQbf84LeXHYKs-3/logo/dark.svg?fit=max\u0026auto=format\u0026n=oqQbf84LeXHYKs-3\u0026q=85\u0026s=2d4cbb7e9dea8411a50d67377ca76578"},"favicon":"https://mintcdn.com/tucoai/oqQbf84LeXHYKs-3/images/tuco_v1_round.svg?fit=max\u0026auto=format\u0026n=oqQbf84LeXHYKs-3\u0026q=85\u0026s=0c579fbfd834a8ce1afe94ec9a63c4a6","api":{"openapi":"api-reference/openapi.json","mdx":{"auth":{"method":"bearer"},"server":"https://app.tuco.ai"}},"navbar":{"links":[{"href":"mailto:support@tuco.ai","label":"Support"}],"primary":{"type":"button","label":"Get Started","href":"https://app.tuco.ai"}},"footer":{"socials":{"x":"https://x.com/tucoai","linkedin":"https://linkedin.com/company/tuco-ai"}},"contextual":{"options":["copy","view","chatgpt","claude","perplexity","mcp","cursor","vscode"],"display":"header"},"styling":{"latex":true},"navigation":{"global":{"anchors":[{"anchor":"Dashboard","icon":"browser","href":"https://app.tuco.ai"}]},"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"tucoai","hasAudioNarration":false,"actualSubdomain":"tucoai","customDomains":["docs.tuco.ai"],"gitSource":{"type":"github","owner":"goforbg","repo":"tuco-docs","deployBranch":"master","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"liveDeploymentHistoryId":"6ae277d9aa176457dc3a2234","collectionId":"ebacd0bf-09db-4284-9b11-da57791e1639","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6ae277d9aa176457dc3a2234"},"entitlements":{},"buildId":"6ae277d9aa176457dc3a2234","clientVersion":"0.0.4021","searchFilterCounts":[{"language":"default","tag":"API Reference","count":96},{"language":"default","tag":"Documentation","count":63},{"language":"default","tag":"Lines \u0026 Leads","count":19},{"language":"default","tag":"Messages","count":14},{"language":"default","tag":"Goal Bots","count":14},{"language":"default","tag":"Webhooks","count":13},{"language":"default","tag":"iMessage Guides","count":13},{"language":"default","tag":"Agency","count":11},{"language":"default","tag":"Integrations","count":8},{"language":"default","tag":"Core Features","count":6}]},"assistantConfig":{"enableStarterQuestions":false},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/endpoint/send-message","slug":"/api-reference/endpoint/send-message","pageMetadata":{"title":"Send Message","api":"POST /api/messages","description":"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.","href":"/api-reference/endpoint/send-message"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsx(_components.p, {\n children: \"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.\"\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`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,CodeGroup,Expandable,Heading,Info,Note,ParamField,ResponseField,Step,Steps,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The Try it panel runs against production`}),` (`,_jsx(_components.code,{children:`https://app.tuco.ai`}),`) with the key you paste\ninto it. There is no sandbox — a request from this page sends a real message from one of your lines.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This is the primary endpoint for automation tools like `,_jsx(_components.strong,{children:`GetSales`}),`, `,_jsx(_components.strong,{children:`n8n`}),`, `,_jsx(_components.strong,{children:`Make`}),`, or your own backend.\nOne call = one message. Tuco handles retries, delivery verification, and fallback internally.`]})}),`\n`,`\n`,`\n`,_jsx(Heading,{level:`2`,id:`authentication`,children:`Authentication`}),`\n`,_jsx(_components.p,{children:`Pass your workspace API key as a Bearer token, or use a Clerk session token.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Authorization:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Bearer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tuco_xxxxxxxxxxxxx`})]}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request body`}),`\n`,_jsxs(ParamField,{body:`message`,type:`string`,id:`param-message`,children:[_jsxs(_components.p,{children:[`The text content to send. `,_jsx(_components.strong,{children:`Required unless`}),` `,_jsx(_components.code,{children:`attachmentUrls`}),` is provided (you can send attachments only, or message + attachments).`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Template variables`}),` are filled in `,_jsx(_components.strong,{children:`at send time`}),` — on every send attempt, against the line that actually sends the message (so retries, scheduled or send-window-deferred messages, and round-robin all name the right line) and the contact’s current data. The same variables campaigns use:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Filled with`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{line_first_name}`})}),_jsx(_components.td,{children:`First name of the sending line`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{line_name}`})}),_jsx(_components.td,{children:`Sending line’s first + last name`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`{line_email}`}),` · `,_jsx(_components.code,{children:`{line_phone}`})]}),_jsx(_components.td,{children:`Sending line’s email · phone`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`{firstName}`}),` `,_jsx(_components.code,{children:`{lastName}`}),` `,_jsx(_components.code,{children:`{companyName}`}),` `,_jsx(_components.code,{children:`{email}`}),` `,_jsx(_components.code,{children:`{phone}`}),` `,_jsx(_components.code,{children:`{jobTitle}`}),` `,_jsx(_components.code,{children:`{notes}`})]}),_jsx(_components.td,{children:`The contact’s fields`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{cf:Field Name}`})}),_jsx(_components.td,{children:`A contact custom field`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{yourVariable}`})}),_jsx(_components.td,{children:`Your workspace variable’s default (Settings → Variables)`})]})]})]}),_jsxs(_components.p,{children:[`Single `,_jsx(_components.code,{children:`{x}`}),` or double `,_jsx(_components.code,{children:`{{x}}`}),` braces, any case. Add a fallback after a pipe: `,_jsx(_components.code,{children:`{firstName|there}`}),`. Variables work inside links too (`,_jsx(_components.code,{children:`https://cal.com/{line_first_name}`}),`). Anything in braces that is `,_jsx(_components.strong,{children:`not`}),` one of these is sent exactly as written.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A blank is never sent.`}),` If a variable has no value and no fallback, the request is rejected: an empty `,_jsx(_components.code,{children:`{firstName}`}),` / `,_jsx(_components.code,{children:`{lastName}`}),` → `,_jsx(_components.code,{children:`400 MALFORMED_NAME_TEMPLATE`}),`; any other → `,_jsx(_components.code,{children:`400 TEMPLATE_VARIABLE_UNRESOLVED`}),` (the response lists them in `,_jsx(_components.code,{children:`unresolvedVariables`}),`). Text you already filled in yourself is unaffected; an unfilled token from another tool (e.g. `,_jsx(_components.code,{children:`{{contact_name}}`}),`, `,_jsx(_components.code,{children:`{name}`}),`) or a greeting whose name expanded to nothing (`,_jsx(_components.code,{children:`\"Hey , …\"`}),`) is still rejected with `,_jsx(_components.code,{children:`MALFORMED_NAME_TEMPLATE`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+14155550123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},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:`\"Hey {firstName|there}, {line_first_name} here — grab a time: https://cal.com/{line_first_name}\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})})]}),`\n`,_jsxs(ParamField,{body:`attachmentUrls`,type:`string[]`,id:`param-attachment-urls`,children:[_jsxs(_components.p,{children:[`Optional array of URLs (max 2, max 25 MB each). When provided, `,_jsx(_components.code,{children:`message`}),` can be empty. Supported formats: images (PNG, JPG, GIF, WebP, HEIC), video (MP4, MOV), audio (MP3, M4A, WAV, AAC, OGG, CAF), and PDF. Supported sources: any public URL, UploadThing/Blob URLs that belong to your workspace. To send audio as a native iMessage voice note (the waveform bubble), add `,_jsx(_components.code,{children:`voiceNote: true`}),`. The audio must be a `,_jsx(_components.strong,{children:`direct, publicly reachable file URL`}),` — a YouTube or Drive page is rejected with a 400. Easiest source is `,_jsx(_components.strong,{children:`Leads → Uploads`}),` (`,_jsx(_components.code,{children:`/leads?tab=uploads`}),`). See `,_jsx(_components.a,{href:`/api-reference/endpoint/send-with-attachments#voice-note-requirements`,children:`Voice note requirements`}),`.`]}),_jsxs(_components.p,{children:[`With an attachment or voice note, you get `,_jsx(_components.code,{children:`status: \"sent\"`}),` right away and it starts sending. If it fails, you get a `,_jsx(_components.code,{children:`message.failed`}),` webhook for the same `,_jsx(_components.code,{children:`message._id`}),`.`]}),_jsx(Tip,{children:_jsx(_components.p,{children:`Sending the same attachment URL repeatedly (e.g. a promo video in an automation)? Tuco caches attachments per line — the second send skips the download and upload, making it significantly faster.`})})]}),`\n`,_jsx(ParamField,{body:`attachmentNames`,type:`string[]`,id:`param-attachment-names`,children:_jsxs(_components.p,{children:[`Optional display names for the attachments, aligned 1:1 with `,_jsx(_components.code,{children:`attachmentUrls`}),`. Omit and Tuco uses the filename from the URL.`]})}),`\n`,_jsx(ParamField,{body:`voiceNote`,type:`boolean`,default:`false`,id:`param-voice-note`,children:_jsxs(_components.p,{children:[`Send a single audio attachment as a `,_jsx(_components.strong,{children:`native iMessage voice note`}),` (the waveform bubble) instead of a generic audio file. Tuco transcodes the audio for you. Requires exactly one audio attachment in `,_jsx(_components.code,{children:`attachmentUrls`}),` — see `,_jsx(_components.a,{href:`/api-reference/endpoint/send-with-attachments#voice-note-requirements`,children:`Send with Attachments`}),` for the full rules.`]})}),`\n`,_jsxs(ParamField,{body:`recipientPhone`,type:`string`,id:`param-recipient-phone`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The phone number to text, in E.164 format`}),` (e.g. `,_jsx(_components.code,{children:`\"+12025551234\"`}),`). This is how you address\nalmost every send — you do not need a `,_jsx(_components.code,{children:`leadId`}),`. Tuco matches an existing lead on this number, or\ncreates one under the `,_jsx(_components.strong,{children:`Quick Sends`}),` list.`]}),_jsxs(_components.p,{children:[`Required unless you pass `,_jsx(_components.code,{children:`leadId`}),` or `,_jsx(_components.code,{children:`recipientEmail`}),`.`]})]}),`\n`,_jsxs(ParamField,{body:`leadId`,type:`string`,id:`param-lead-id`,children:[_jsxs(_components.p,{children:[`Send to an existing lead using their stored contact details. When provided together with\n`,_jsx(_components.code,{children:`recipientPhone`}),`, the body’s phone number is the send-to address and the lead is used for linking.`]}),_jsxs(_components.p,{children:[`Required unless you pass `,_jsx(_components.code,{children:`recipientPhone`}),` or `,_jsx(_components.code,{children:`recipientEmail`}),`.`]})]}),`\n`,_jsxs(ParamField,{body:`recipientEmail`,type:`string`,id:`param-recipient-email`,children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Use `,_jsx(_components.code,{children:`recipientPhone`}),` unless you specifically need this.`]}),` An email address only reaches someone\nover iMessage if that exact address is registered to their Apple account, which is uncommon and\nimpossible to assume. Addressing by phone number is what works.`]})}),_jsxs(_components.p,{children:[`Only useful in two cases: `,_jsx(_components.code,{children:`messageType: \"email\"`}),`, or iMessage to a contact you already know is\nreachable at that Apple ID. Required unless you pass `,_jsx(_components.code,{children:`recipientPhone`}),` or `,_jsx(_components.code,{children:`leadId`}),`.`]})]}),`\n`,_jsxs(ParamField,{body:`messageType`,type:`string`,default:`imessage`,id:`param-message-type`,children:[_jsxs(_components.p,{children:[`Channel to use. When omitted, defaults to `,_jsx(_components.code,{children:`\"imessage\"`}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`Channel`}),_jsx(_components.th,{children:`Addresses tried (from lead)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"imessage\"`})}),_jsx(_components.td,{children:`iMessage via device relay`}),_jsx(_components.td,{children:`phone → altPhone1-3 → email → altEmail1-3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"sms\"`})}),_jsx(_components.td,{children:`SMS via Twilio`}),_jsx(_components.td,{children:`phone → altPhone1-3 only`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"email\"`})}),_jsx(_components.td,{children:`Email`}),_jsx(_components.td,{children:`email → altEmail1-3 only`})]})]})]})]}),`\n`,_jsx(ParamField,{body:`fromLineId`,type:`string`,id:`param-from-line-id`,children:_jsxs(_components.p,{children:[`Tuco line ID to send from. `,_jsx(_components.strong,{children:`Optional`}),` — when omitted, Tuco round-robins\nacross your workspace’s active lines automatically.`]})}),`\n`,_jsx(ParamField,{body:`recipientName`,type:`string`,id:`param-recipient-name`,children:_jsx(_components.p,{children:`Display name for the recipient. Derived from the lead when omitted.`})}),`\n`,_jsx(Heading,{level:`3`,id:`alternate-contact-fields`,children:`Alternate contact fields`}),`\n`,_jsx(_components.p,{children:`Stored on the lead (created or found). The worker tries these in priority\norder when the primary address fails iMessage availability.`}),`\n`,_jsx(ParamField,{body:`altPhone1`,type:`string`,id:`param-alt-phone1`,children:`Alternate phone number 1`}),`\n`,_jsx(ParamField,{body:`altPhone2`,type:`string`,id:`param-alt-phone2`,children:`Alternate phone number 2`}),`\n`,_jsx(ParamField,{body:`altPhone3`,type:`string`,id:`param-alt-phone3`,children:`Alternate phone number 3`}),`\n`,_jsx(ParamField,{body:`altEmail1`,type:`string`,id:`param-alt-email1`,children:`Alternate email 1`}),`\n`,_jsx(ParamField,{body:`altEmail2`,type:`string`,id:`param-alt-email2`,children:`Alternate email 2`}),`\n`,_jsx(ParamField,{body:`altEmail3`,type:`string`,id:`param-alt-email3`,children:`Alternate email 3`}),`\n`,_jsx(Heading,{level:`3`,id:`scheduling-\u0026-time-window`,children:`Scheduling \u0026 time window`}),`\n`,_jsxs(_components.p,{children:[`Control `,_jsx(_components.strong,{children:`when`}),` the message is sent. All fields are optional.\nWhen omitted, the message sends immediately (subject to line limits and device gaps).`]}),`\n`,_jsx(ParamField,{body:`scheduledDate`,type:`string`,id:`param-scheduled-date`,children:_jsxs(_components.p,{children:[`ISO 8601 timestamp to send in the future (e.g. `,_jsx(_components.code,{children:`\"2026-10-15T14:30:00Z\"`}),`). The\nresponse `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`\"scheduled\"`}),`. If you also set a send window and this time\nfalls outside it, the message is moved to the next time the window is open.\nA value that can’t be parsed returns `,_jsx(_components.code,{children:`400`}),`.`]})}),`\n`,_jsx(ParamField,{body:`sendWindowStart`,type:`string`,id:`param-send-window-start`,children:_jsxs(_components.p,{children:[`Earliest time to send, `,_jsx(_components.code,{children:`HH:mm`}),` 24-hour format (e.g. `,_jsx(_components.code,{children:`\"09:00\"`}),`), inclusive. Set\n`,_jsx(_components.strong,{children:`both`}),` `,_jsx(_components.code,{children:`sendWindowStart`}),` and `,_jsx(_components.code,{children:`sendWindowEnd`}),` — if only one is sent, the window is\nignored. Outside the window the request still returns `,_jsx(_components.code,{children:`201`}),` with\n`,_jsx(_components.code,{children:`status: \"scheduled\"`}),`; the message is held until the window opens. Use\n`,_jsx(_components.code,{children:`\"00:00\"`}),`–`,_jsx(_components.code,{children:`\"23:59\"`}),` for any hour. Anything that isn’t `,_jsx(_components.code,{children:`HH:mm`}),` returns `,_jsx(_components.code,{children:`400`}),`.`]})}),`\n`,_jsx(ParamField,{body:`sendWindowEnd`,type:`string`,id:`param-send-window-end`,children:_jsxs(_components.p,{children:[`Latest time to send, `,_jsx(_components.code,{children:`HH:mm`}),` (e.g. `,_jsx(_components.code,{children:`\"17:00\"`}),`). The end is exclusive, and it must be\nlater than the start. An overnight window such as `,_jsx(_components.code,{children:`\"22:00\"`}),`–`,_jsx(_components.code,{children:`\"06:00\"`}),` returns\n`,_jsx(_components.code,{children:`400 INVALID_SEND_WINDOW`}),`; use `,_jsx(_components.code,{children:`\"00:00\"`}),`–`,_jsx(_components.code,{children:`\"23:59\"`}),` to send at any hour.`]})}),`\n`,_jsx(ParamField,{body:`timezone`,type:`string`,id:`param-timezone`,children:_jsxs(_components.p,{children:[`IANA timezone for the send window (e.g. `,_jsx(_components.code,{children:`\"America/New_York\"`}),`). `,_jsx(_components.strong,{children:`Optional.`}),` When\nomitted, your workspace timezone is used (or `,_jsx(_components.code,{children:`America/New_York`}),` if the workspace\nhas none). Use a full name — an abbreviation like `,_jsx(_components.code,{children:`\"EST\"`}),` or an unknown name\nreturns `,_jsx(_components.code,{children:`400 INVALID_TIMEZONE`}),` when a send window is set. `,_jsx(_components.code,{children:`\"UTC\"`}),` is accepted.\nThe timezone is only used together with a send window.`]})}),`\n`,_jsx(ParamField,{body:`allowedDaysOfWeek`,type:`number[]`,id:`param-allowed-days-of-week`,children:_jsxs(_components.p,{children:[`Days when sending is allowed, as whole numbers. `,_jsx(_components.code,{children:`0`}),` = Sunday, `,_jsx(_components.code,{children:`6`}),` = Saturday.\nExample: `,_jsx(_components.code,{children:`[1,2,3,4,5]`}),` for weekdays only. An empty array means every day; any\nother value returns `,_jsx(_components.code,{children:`400 INVALID_ALLOWED_DAYS`}),`. `,_jsxs(_components.strong,{children:[`Only applies together with\n`,_jsx(_components.code,{children:`sendWindowStart`}),` and `,_jsx(_components.code,{children:`sendWindowEnd`})]}),` — a day list without hours is ignored. On a\nday that isn’t allowed, the message waits for `,_jsx(_components.code,{children:`sendWindowStart`}),` on the next allowed\nday. See `,_jsx(_components.a,{href:`#send-window-and-allowed-days`,children:`Send window and allowed days`}),`.`]})}),`\n`,_jsx(ParamField,{body:`respectGap`,type:`boolean`,default:`false`,id:`param-respect-gap`,children:_jsxs(_components.p,{children:[`Keep the wait between follow-ups to the same contact. When `,_jsx(_components.code,{children:`true`}),`, and an earlier\nmessage to this contact went out late, this message is held so the original spacing\nis preserved: it waits until the previous message’s actual send time plus the gap\nbetween your two API calls. Works on its own — no send window or workspace setting\nneeded. Accepts `,_jsx(_components.code,{children:`true`}),` or `,_jsx(_components.code,{children:`\"true\"`}),`; any other value is treated as `,_jsx(_components.code,{children:`false`}),`. While\nheld, the response `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`\"scheduled\"`}),`. See\n`,_jsx(_components.a,{href:`#keep-the-wait-between-follow-ups`,children:`Keep the wait between follow-ups`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`fallback-\u0026-advanced`,children:`Fallback \u0026 advanced`}),`\n`,_jsx(ParamField,{body:`sendFallbackSmsOnFailed`,type:`boolean`,default:`false`,id:`param-send-fallback-sms-on-failed`,children:_jsxs(_components.p,{children:[`When `,_jsx(_components.code,{children:`true`}),`, if the message ends in `,_jsx(_components.code,{children:`failed`}),` status (technical error after\nretries), Tuco sends a fallback SMS via your configured fallback number.\nIf no fallback is configured on the workspace the request is `,_jsx(_components.strong,{children:`still accepted`}),` —\nthe iMessage send proceeds and simply has no SMS to fall back to. Check\n`,_jsx(_components.a,{href:`/api-reference/endpoint/fallback-config`,children:_jsx(_components.code,{children:`GET /api/workspace/fallback-config`})}),`\nfirst if you need the fallback to actually fire.`]})}),`\n`,_jsxs(ParamField,{body:`forceFallback`,type:`boolean`,default:`false`,id:`param-force-fallback`,children:[_jsxs(_components.p,{children:[`When `,_jsx(_components.code,{children:`true`}),`, Tuco `,_jsx(_components.strong,{children:`skips the iMessage availability check entirely`}),` and sends\nthe message straight via your workspace’s configured fallback — Twilio, GHL, or\na custom webhook (Settings → `,_jsx(_components.em,{children:`When iMessage isn’t available`}),`). Use it when you\nalready know the recipient isn’t on iMessage, or you simply want SMS.`]}),_jsxs(_components.p,{children:[`The send never touches iMessage, so it does `,_jsx(_components.strong,{children:`not`}),` consume the line’s daily\ncap or the availability-check budget, and the response status is `,_jsx(_components.code,{children:`\"fallback\"`}),`.`]}),_jsxs(_components.p,{children:[`If no fallback is configured — or the fallback dispatch fails (e.g. a bad Twilio\nfrom-number) — the message is `,_jsx(_components.strong,{children:`not`}),` delivered: the response returns\n`,_jsx(_components.code,{children:`\"success\": false`}),` with a channel-tagged `,_jsx(_components.code,{children:`error`}),`, and the message is recorded\nwith `,_jsx(_components.code,{children:`\"fallbackSmsStatus\": \"failed\"`}),`. The request itself still succeeds — read the\n`,_jsx(_components.code,{children:`success`}),` flag in the body rather than relying on the status code.`]}),_jsxs(_components.p,{children:[`Unlike `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed`}),` (which is `,_jsx(_components.em,{children:`reactive`}),` — fallback only after an\niMessage send fails), `,_jsx(_components.code,{children:`forceFallback`}),` is `,_jsx(_components.em,{children:`proactive`}),`: it never attempts iMessage\nin the first place.`]})]}),`\n`,_jsxs(ParamField,{body:`skipIfReplied`,type:`string | boolean`,default:`false`,id:`param-skip-if-replied`,children:[_jsxs(_components.p,{children:[`Workspace-level reply gate. When set, Tuco `,_jsx(_components.strong,{children:`suppresses this send if the\ncontact has already replied in your workspace`}),`.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`false`}),` / `,_jsx(_components.code,{children:`\"false\"`}),` / omitted → always send (default, backward compatible)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`true`}),` / `,_jsx(_components.code,{children:`\"true\"`}),` → skip if the contact has `,_jsx(_components.strong,{children:`ever`}),` replied`]}),`\n`,_jsxs(_components.li,{children:[`a window string → skip only if they replied `,_jsx(_components.strong,{children:`within`}),` that window:\n`,_jsx(_components.code,{children:`\"1m\"`}),`, `,_jsx(_components.code,{children:`\"1h\"`}),`, `,_jsx(_components.code,{children:`\"1d\"`}),`, `,_jsx(_components.code,{children:`\"2d\"`}),`, `,_jsx(_components.code,{children:`\"5d\"`}),`, `,_jsx(_components.code,{children:`\"7d\"`}),`, `,_jsx(_components.code,{children:`\"14d\"`}),`, `,_jsx(_components.code,{children:`\"1mo\"`}),`, `,_jsx(_components.code,{children:`\"1yr\"`}),`\n(`,_jsx(_components.code,{children:`m`}),`=minute, `,_jsx(_components.code,{children:`h`}),`=hour, `,_jsx(_components.code,{children:`d`}),`=day, `,_jsx(_components.code,{children:`w`}),`=week, `,_jsx(_components.code,{children:`mo`}),`=30 days, `,_jsx(_components.code,{children:`yr`}),`=365 days)`]}),`\n`]}),_jsxs(_components.p,{children:[`Scope is your `,_jsx(_components.strong,{children:`workspace`}),` — a reply to `,_jsx(_components.em,{children:`any`}),` of your lines counts (not just\nthe sending line). The check never crosses workspaces. On a skip, `,_jsx(_components.strong,{children:`no message\nis created`}),` and the API returns `,_jsx(_components.code,{children:`200`}),` with `,_jsx(_components.code,{children:`skippedOnly: true`}),` (see\n`,_jsx(_components.a,{href:`#skip-if-the-contact-already-replied`,children:`Skip if the contact already replied`}),`).\nThe check runs again right before a queued message sends: if the contact replied\nwhile it was waiting, it is cancelled instead of sent.\nAn unrecognized value returns `,_jsx(_components.code,{children:`400 INVALID_SKIP_IF_REPLIED`}),`.`]})]}),`\n`,_jsx(ParamField,{body:`batchId`,type:`string`,id:`param-batch-id`,children:_jsx(_components.p,{children:`Free-form string to group related messages for reporting.`})}),`\n`,_jsx(ParamField,{body:`correlationId`,type:`string`,id:`param-correlation-id`,children:_jsxs(_components.p,{children:[`Optional tracing ID. If omitted, Tuco generates one (`,_jsx(_components.code,{children:`app_…`}),`). The same ID\nis preferred from the `,_jsx(_components.code,{children:`x-correlation-id`}),` request header. It flows through\nevery internal log event for this send so you can grep one ID and see the entire\nrequest → gate → send → webhook chain. See\n`,_jsx(_components.a,{href:`/api-reference/introduction#correlation-ids-request-tracing`,children:`API Overview → Correlation IDs`}),`.`]})}),`\n`,_jsxs(Accordion,{title:`Request headers`,id:`request-headers`,children:[_jsxs(_components.p,{children:[`Headers Tuco recognizes in addition to `,_jsx(_components.code,{children:`Authorization`}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Header`}),_jsx(_components.th,{children:`Purpose`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`x-correlation-id`})}),_jsxs(_components.td,{children:[`Request-scoped tracing ID (preferred over body field). Echoed back in logs under `,_jsx(_components.code,{children:`correlationId`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`x-execution-id`})}),_jsx(_components.td,{children:`GHL workflow execution ID. Only set when calling from a GHL workflow context.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`x-ghl-workflow-id`})}),_jsxs(_components.td,{children:[`GHL workflow definition ID. Pairs with `,_jsx(_components.code,{children:`x-execution-id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Idempotency-Key`})}),_jsx(_components.td,{children:`When supplied, Tuco caches the response and replays it on retry within the idempotency window. Use one unique key per logical send.`})]})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`examples`,children:`Examples`}),`\n`,_jsxs(_components.p,{children:[`Create or import a lead first using `,_jsx(_components.a,{href:`https://docs.tuco.ai/api-reference/leads`,children:_jsx(_components.code,{children:`POST /api/leads`})}),`, then send using `,_jsx(_components.code,{children:`leadId`}),` as shown below.`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Minimal using leadId (defaults to iMessage)`,numberOfLines:`7`,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:`7`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Hi, this is a test from Tuco.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439012\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Need a `,_jsx(_components.code,{children:`leadId`}),` first? Create one with `,_jsx(_components.a,{href:`https://docs.tuco.ai/api-reference/leads`,children:_jsx(_components.code,{children:`POST /api/leads`})}),`, then use the returned `,_jsx(_components.code,{children:`leadId`}),` in this request.`]}),_jsx(CodeBlock,{filename:`HubSpot lead`,numberOfLines:`9`,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:`9`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Hi from Tuco.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439013\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"hsContactId\": \"120001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"hsPortalId\": \"991001\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`GHL lead`,numberOfLines:`9`,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:`9`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Hi from Tuco.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439014\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ghlContactId\": \"ghl_contact_001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ghlLocationId\": \"eL7DD22BdZ0rismu7qCA\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`With attachments`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Here is the file.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439012\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"attachmentUrls\": [\"https://example.com/doc.pdf\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`GoHighLevel webhook (raw payload)`,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:`# The exact body GoHighLevel's \"Webhook\" workflow action posts. You only fill in`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# customData.message — Tuco derives the recipient + GHL identity from the rest.`})}),`\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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"contact_id\": \"KWqc16yBbIV7hLfiRTse\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"full_name\": \"Matheus Maia\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"email\": \"alex@example.com\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"phone\": \"+13055550100\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"location\": { \"id\": \"57m52yUR4RkI2k1VuHhL\" },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customData\": { \"message\": \"Hi Matheus\" }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Send window, weekdays only`,numberOfLines:`11`,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:`11`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Morning! Quick question about your quote.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"allowedDaysOfWeek\": [1, 2, 3, 4, 5]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Follow-up that keeps its gap`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Just checking you saw my last note\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Follow-up: keep the gap, skip if they replied`,numberOfLines:`12`,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:`12`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Still interested? Happy to hold your slot.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"skipIfReplied\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`send-straight-from-a-gohighlevel-webhook`,children:`Send straight from a GoHighLevel webhook`}),`\n`,_jsxs(_components.p,{children:[`You can point a GoHighLevel `,_jsx(_components.strong,{children:`Workflow → Webhook`}),` action directly at this endpoint —\nno GHL Marketplace app or action secret required, just your Tuco API key in the\n`,_jsx(_components.code,{children:`Authorization`}),` header. GHL’s Webhook action already includes the full contact\npayload; Tuco reads GHL’s native field names so `,_jsxs(_components.strong,{children:[`the only thing you map in Custom\nData is `,_jsx(_components.code,{children:`message`})]}),`.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add a Webhook action to your workflow`,children:_jsxs(_components.p,{children:[`Method `,_jsx(_components.code,{children:`POST`}),`, URL `,_jsx(_components.code,{children:`https://app.tuco.ai/api/messages`}),`.`]})}),_jsx(Step,{title:`Add the auth header`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Authorization`}),` = `,_jsx(_components.code,{children:`Bearer tuco_xxxxxxxxxxxxx`}),`.`]})}),_jsx(Step,{title:`Add Custom Data`,children:_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`message`}),` (required). Optionally add `,_jsx(_components.code,{children:`lineId`}),` (pin a sending line — otherwise\nTuco round-robins) and `,_jsx(_components.code,{children:`attachmentUrls`}),` (a single URL or comma-separated list).`]})})]}),`\n`,_jsxs(_components.p,{children:[`Tuco auto-maps GHL’s native fields onto the canonical request fields. `,_jsx(_components.strong,{children:`Custom Data\nalways wins`}),` — set any field there to override what’s derived from the contact:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Canonical field`}),_jsx(_components.th,{children:`Filled from (Custom Data first, then GHL native)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`message`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`customData.message`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`fromLineId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`customData.lineId`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`attachmentUrls`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.attachmentUrls`}),` (string or CSV → array)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recipientPhone`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.recipientPhone`}),` → top-level `,_jsx(_components.code,{children:`phone`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recipientEmail`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.recipientEmail`}),` → top-level `,_jsx(_components.code,{children:`email`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recipientName`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.recipientName`}),` → `,_jsx(_components.code,{children:`full_name`}),` → `,_jsx(_components.code,{children:`first_name`}),` + `,_jsx(_components.code,{children:`last_name`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ghlContactId`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.ghlContactId`}),` → `,_jsx(_components.code,{children:`contact_id`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ghlLocationId`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.ghlLocationId`}),` → `,_jsx(_components.code,{children:`location.id`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`contactOwnerEmail`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.contactOwnerEmail`}),` → `,_jsx(_components.code,{children:`user.email`})]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This mapping is `,_jsx(_components.strong,{children:`additive and backward compatible`}),` — it only fills a field you did\nnot already send. Existing integrations that post canonical fields (`,_jsx(_components.code,{children:`recipientPhone`}),`,\n`,_jsx(_components.code,{children:`ghlContactId`}),`, …) are completely unaffected.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`{{contact.phone}}`}),` is empty on the contact, the request fails with\n`,_jsx(_components.code,{children:`missing_recipient`}),`. Make sure the contact has a phone or email before the webhook fires.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[`The API always returns `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`201`})}),` when the message is successfully created.\nThe `,_jsx(_components.code,{children:`status`}),` field tells you what happens next.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Pre-send checks are never errors.`}),` Line limits, time windows, device gaps,\nand contact gaps cause `,_jsx(_components.code,{children:`status: \"pending\"`}),` or `,_jsx(_components.code,{children:`\"scheduled\"`}),` — the message is\naccepted and will send when conditions are met.`]})}),`\n`,_jsxs(Heading,{level:`3`,id:`success-201-created-or-200-ok-when-duplicate-lead-used`,children:[`Success (`,_jsx(_components.code,{children:`201 Created`}),` or `,_jsx(_components.code,{children:`200 OK`}),` when duplicate lead used)`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`25`,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:`25`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"sent\"`}),_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:`: {`})]}),`\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:`\"69b344bc6dae1d942ece4d0e\"`}),_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:`\"Here's your document.\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69ab427ac1feb77d7f46462e\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+919876543210\"`}),_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:` \"recipientEmail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"jane@example.com\"`}),_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:` \"recipientName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Jane Doe\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69b2c41d352a78479d2c623b\"`}),_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:` \"workspaceId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"org_3AZs4H8UsfFxVFONr6H4K75okaG\"`}),_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:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-12T22:57:00.856Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-12T22:57:02.892Z\"`}),_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:` \"sentAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-12T22:57:02.892Z\"`}),_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:` \"externalMessageId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5CA93911-F0FE-4D1F-8D8C-1E3495A124F6\"`})]}),`\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:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69b2c41d352a78479d2c623b\"`}),_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:` \"ghlContactId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"aMUQn0u0Z7cw0NQ7tJ5R\"`}),_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:` \"ghlLocationId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"eL7DD22BdZ0rismu7qCA\"`}),_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:` \"hsPortalId\"`}),_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:` \"hsContactId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`When the recipient was matched to an existing lead (duplicate), the API returns `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`200`})}),` with `,_jsx(_components.code,{children:`duplicateOnly: true`}),`, `,_jsx(_components.code,{children:`existingLeadIds`}),`, and `,_jsx(_components.code,{children:`leadIds`}),` so your automation can continue without treating it as an error.`]}),`\n`,_jsx(ResponseField,{name:`success`,type:`boolean`,id:`param-success`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`true`}),` when the message was created.`]})}),`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:_jsx(_components.p,{children:`Current status of the message. See the status table below.`})}),`\n`,_jsxs(ResponseField,{name:`message`,type:`object`,id:`param-message-1`,children:[_jsx(_components.p,{children:`The full message document. Key fields:`}),_jsxs(Expandable,{title:`Message fields`,children:[_jsx(ResponseField,{name:`_id`,type:`string`,id:`param-id`,children:`Unique message ID`}),_jsx(ResponseField,{name:`message`,type:`string`,id:`param-message-2`,children:`Body text`}),_jsxs(ResponseField,{name:`messageType`,type:`string`,id:`param-message-type-1`,children:[`Channel (`,_jsx(_components.code,{children:`imessage`}),`, `,_jsx(_components.code,{children:`sms`}),`, `,_jsx(_components.code,{children:`email`}),`)`]}),_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status-1`,children:`Lifecycle status`}),_jsx(ResponseField,{name:`fromLineId`,type:`string`,id:`param-from-line-id-1`,children:`Line used to send`}),_jsx(ResponseField,{name:`recipientPhone`,type:`string`,id:`param-recipient-phone-1`,children:`Recipient phone`}),_jsx(ResponseField,{name:`recipientEmail`,type:`string`,id:`param-recipient-email-1`,children:`Recipient email`}),_jsx(ResponseField,{name:`leadId`,type:`string`,id:`param-lead-id-1`,children:`Linked lead ID`}),_jsx(ResponseField,{name:`scheduledDate`,type:`string`,id:`param-scheduled-date-1`,children:`When the message will send (if scheduled)`}),_jsx(ResponseField,{name:`sentAt`,type:`string`,id:`param-sent-at`,children:`When actually sent`}),_jsx(ResponseField,{name:`deliveredAt`,type:`string`,id:`param-delivered-at`,children:`When delivery confirmed`}),_jsx(ResponseField,{name:`createdAt`,type:`string`,id:`param-created-at`,children:`Creation timestamp`})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`accepted-but-held`,children:`Accepted but held`}),`\n`,_jsxs(_components.p,{children:[`When a send window, an allowed-day rule or `,_jsx(_components.code,{children:`respectGap`}),` holds the message, the request\nstill succeeds. `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`\"scheduled\"`}),` and `,_jsx(_components.code,{children:`message.scheduledDate`}),` is when it will\nbe released.`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 201 — outside the send window, held until it opens`,numberOfLines:`24`,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:`24`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"scheduled\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f58e350b3be067aef80\"`}),_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:`: {`})]}),`\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:`\"6ace9f59e350b3be067aef81\"`}),_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:`\"Morning! Quick question about your quote.\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+12025551234\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f5622264a6eecd4b333\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f58e350b3be067aef80\"`}),_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:`\"scheduled\"`}),_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:` \"scheduledDate\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-14T13:00:00.000Z\"`}),_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:` \"settings\"`}),_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:` \"timezone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"America/New_York\"`}),_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:` \"sendWindowStart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"09:00\"`}),_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:` \"sendWindowEnd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"18:00\"`}),_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:` \"allowedDaysOfWeek\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_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:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T23:15:05.519Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T23:15:05.771Z\"`})]}),`\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:[_jsx(_components.code,{children:`message.settings`}),` echoes the window Tuco stored: the resolved timezone, and\n`,_jsx(_components.code,{children:`allowedDaysOfWeek`}),` as numbers.`]}),`\n`,_jsx(Heading,{level:`3`,id:`status-values`,children:`Status values`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Meaning`}),_jsx(_components.th,{children:`Is it an error?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"sent\"`})}),_jsx(_components.td,{children:`Message sent immediately (sync path)`}),_jsx(_components.td,{children:`No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"pending\"`})}),_jsx(_components.td,{children:`Created, worker will process. Line limits / time window / device gap may delay it.`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`No`}),` — it will send when checks pass`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"scheduled\"`})}),_jsxs(_components.td,{children:[`Held until `,_jsx(_components.code,{children:`message.scheduledDate`}),`: your own `,_jsx(_components.code,{children:`scheduledDate`}),`, a send window or allowed-day rule, a `,_jsx(_components.code,{children:`respectGap`}),` hold, a line limit, or a retry`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`No`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"cancelled\"`})}),_jsxs(_components.td,{children:[`A queued message that was dropped before sending — for example `,_jsx(_components.code,{children:`skipIfReplied`}),` was set and the contact replied while it waited`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`No`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"fallback\"`})}),_jsx(_components.td,{children:`Recipient has no iMessage; fallback SMS sent if configured`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`No`}),` (business rule)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"failed\"`})}),_jsx(_components.td,{children:`All retries exhausted or availability API error`}),_jsx(_components.td,{children:`Yes (technical)`})]})]})]}),`\n`,_jsxs(Info,{children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`\"pending\"`}),` and `,_jsx(_components.code,{children:`\"scheduled\"`}),` mean the message is accepted and queued. The worker sends it when:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Time window`}),` is satisfied (inside `,_jsx(_components.code,{children:`sendWindowStart`}),`–`,_jsx(_components.code,{children:`sendWindowEnd`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Allowed day`}),` is satisfied (today is in `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Follow-up gap`}),` has passed (only when `,_jsx(_components.code,{children:`respectGap`}),` is `,_jsx(_components.code,{children:`true`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Line limits`}),` reset (daily total or new conversations limit)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Device gap`}),` is met (default 30s between sends from same device)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Contact gap`}),` is met (default 45s between first messages to different contacts on same line)`]}),`\n`]}),_jsx(_components.p,{children:`None of these cause an error response.`})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`duplicate-protection`,children:`Duplicate protection`}),`\n`,_jsxs(_components.p,{children:[`Tuco automatically blocks duplicate sends — no header required. Two POSTs with\nidentical `,_jsx(_components.code,{children:`(workspaceId, recipientPhone, recipientEmail, message)`}),` within\n`,_jsx(_components.strong,{children:`15 minutes`}),` are collapsed: the second one returns `,_jsx(_components.code,{children:`200`}),` with the original\nmessage and `,_jsx(_components.strong,{children:`does not fire a new send`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 200 — duplicate caught`,numberOfLines:`7`,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:`7`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"duplicateOnly\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"duplicateMessage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Same message text already sent to this contact 42s ago — returning existing message instead of sending again\"`}),_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:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`/* the original sibling message doc */`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"...\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Branch on `,_jsx(_components.code,{children:`duplicateOnly === true`}),` and treat it as a no-op success. The\n`,_jsx(_components.code,{children:`message._id`}),` in the response is the original send, so your CRM workflow can\nkeep moving without re-sending.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`This works for concurrent firings (the most common cause of accidental\nduplicates — an integration retrying within milliseconds) AND for upstream\nretries up to 15 minutes apart. The guard is built on an atomic Mongo write,\nso concurrent identical POSTs cannot both proceed.`})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Failed sends:`}),` if your first send ended in `,_jsx(_components.code,{children:`status: \"failed\"`}),` and you\nimmediately retry with the same body within 15 minutes, you’ll get the failed\nsibling back with `,_jsx(_components.code,{children:`duplicateOnly: true`}),`. To force a fresh send: change the\nbody or wait 15 minutes.`]})}),`\n`,_jsxs(_components.p,{children:[`For deeper detail, edge cases, and ops events, see\n`,_jsx(_components.a,{href:`/imessage-double-send-guard`,children:`Atomic Duplicate Guard`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Idempotency-Key`}),` is still supported and runs `,_jsx(_components.strong,{children:`before`}),` the dedup guard.\nUse it when your client controls retries — it gives you a 24-hour window\nkeyed on the exact request rather than on body content.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`skip-if-the-contact-already-replied`,children:`Skip if the contact already replied`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`skipIfReplied`}),` to avoid following up with a contact who has already responded\nto you. Tuco checks your workspace’s inbound history for this recipient (phone or\nemail) and, if it finds a reply, `,_jsx(_components.strong,{children:`does not create or send the message`}),`. This is useful for drip\nautomations in n8n/Make/GHL where you don’t want to nudge someone who already wrote\nback.`]}),`\n`,_jsx(Heading,{level:`3`,id:`values`,children:`Values`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`skipIfReplied`})}),_jsx(_components.th,{children:`Behavior`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`omitted / `,_jsx(_components.code,{children:`false`}),` / `,_jsx(_components.code,{children:`\"false\"`})]}),_jsx(_components.td,{children:`Always send (default).`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),` / `,_jsx(_components.code,{children:`\"true\"`})]}),_jsxs(_components.td,{children:[`Skip if the contact has `,_jsx(_components.strong,{children:`ever`}),` replied in your workspace.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`\"1m\"`}),` `,_jsx(_components.code,{children:`\"1h\"`}),` `,_jsx(_components.code,{children:`\"1d\"`}),` `,_jsx(_components.code,{children:`\"2d\"`}),` `,_jsx(_components.code,{children:`\"5d\"`}),` `,_jsx(_components.code,{children:`\"7d\"`}),` `,_jsx(_components.code,{children:`\"14d\"`}),` `,_jsx(_components.code,{children:`\"1mo\"`}),` `,_jsx(_components.code,{children:`\"1yr\"`})]}),_jsxs(_components.td,{children:[`Skip only if they replied `,_jsx(_components.strong,{children:`within`}),` that window.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Units: `,_jsx(_components.code,{children:`m`}),` = minute, `,_jsx(_components.code,{children:`h`}),` = hour, `,_jsx(_components.code,{children:`d`}),` = day, `,_jsx(_components.code,{children:`w`}),` = week, `,_jsx(_components.code,{children:`mo`}),` = 30 days, `,_jsx(_components.code,{children:`yr`}),` = 365 days.\nGeneral form: `,_jsx(_components.code,{children:`\u003cnumber>\u003cunit>`}),` (e.g. `,_jsx(_components.code,{children:`\"3d\"`}),`, `,_jsx(_components.code,{children:`\"36h\"`}),`). Note `,_jsx(_components.code,{children:`\"1m\"`}),` is one `,_jsx(_components.strong,{children:`minute`}),` and\n`,_jsx(_components.code,{children:`\"1mo\"`}),` is one `,_jsx(_components.strong,{children:`month`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scope is your workspace, not a single line.`}),` A reply to `,_jsx(_components.em,{children:`any`}),` of your lines counts —\nwhich line you send from doesn’t matter. The check is strictly scoped to your workspace\nand never sees another workspace’s replies.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`request`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:`Skip the follow-up if they replied in the last 7 days`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Just following up — still interested?\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"skipIfReplied\": \"7d\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(Heading,{level:`3`,id:`response-when-the-send-is-skipped-200-ok`,children:[`Response when the send is skipped (`,_jsx(_components.code,{children:`200 OK`}),`)`]}),`\n`,_jsxs(_components.p,{children:[`No message is created. `,_jsx(_components.code,{children:`success`}),` is `,_jsx(_components.code,{children:`true`}),` (the request was handled — do `,_jsx(_components.strong,{children:`not`}),` retry)\nand `,_jsx(_components.code,{children:`skippedOnly`}),` distinguishes it from a real send.`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 200 — skipped because the contact already replied`,numberOfLines:`9`,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:`9`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"skippedOnly\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"skipReason\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"recipient_replied\"`}),_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:` \"skipMessage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Skipped: this contact already replied in your workspace within the last 7d. The skipIfReplied gate prevented this send.\"`}),_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:` \"repliedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-06-27T18:40:11.020Z\"`}),_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:`#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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"667f1f77bcf86cd799439012\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Branch on `,_jsx(_components.code,{children:`skippedOnly === true`}),` and treat it as a successful no-op. When the contact\nhas `,_jsx(_components.strong,{children:`not`}),` replied (or replied outside the window), the request proceeds exactly as a\nnormal send and returns the usual `,_jsx(_components.code,{children:`201`}),` response.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`An unrecognized `,_jsx(_components.code,{children:`skipIfReplied`}),` value returns `,_jsx(_components.strong,{children:`400`}),` with\n`,_jsx(_components.code,{children:`code: \"INVALID_SKIP_IF_REPLIED\"`}),`. Use `,_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`}),`, or one of the documented\nwindow strings.`]})}),`\n`,_jsxs(_components.p,{children:[`Every decision is logged internally (`,_jsx(_components.code,{children:`message.api.skipped_replied`}),`,\n`,_jsx(_components.code,{children:`message.api.skip_if_replied_passed`}),`, `,_jsx(_components.code,{children:`message.api.skip_if_replied_invalid`}),`) under your\n`,_jsx(_components.code,{children:`correlationId`}),`, so you can audit exactly why a send was or wasn’t suppressed.`]}),`\n`,_jsx(Heading,{level:`3`,id:`a-queued-message-is-checked-again-before-it-sends`,children:`A queued message is checked again before it sends`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`skipIfReplied`}),` is evaluated when you call the API `,_jsx(_components.strong,{children:`and again right before the message\nis sent`}),`. If a message is waiting — for a `,_jsx(_components.code,{children:`scheduledDate`}),`, a send window, a line limit,\na line that is down, or a `,_jsx(_components.code,{children:`respectGap`}),` hold — and the contact replies in the meantime,\nthe message is `,_jsx(_components.strong,{children:`cancelled`}),` instead of sent (its status becomes `,_jsx(_components.code,{children:`cancelled`}),`).`]}),`\n`,_jsxs(_components.p,{children:[`With a window value such as `,_jsx(_components.code,{children:`\"1h\"`}),`, the second check looks back from the moment of\nsending, not from when you made the request.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`keep-the-wait-between-follow-ups`,children:`Keep the wait between follow-ups`}),`\n`,_jsx(_components.p,{children:`Automations usually space follow-ups out: message 1, wait, message 2. If message 1 goes\nout late — held by a send window, a line limit, pacing, or a line that was briefly\ndown — message 2 can land right behind it and the wait you designed disappears.`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`respectGap: true`}),` on the follow-up to keep that wait.`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-the-hold-is-calculated`,children:`How the hold is calculated`}),`\n`,_jsx(_components.p,{children:`Tuco looks at the most recent message already sent to the same contact in your\nworkspace and holds the new one until:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`previous message's actual send time + (this request's time − previous request's time)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`So the gap between your two `,_jsx(_components.strong,{children:`API calls`}),` is preserved, measured from when the previous\nmessage `,_jsx(_components.strong,{children:`really went out`}),`. It does not use `,_jsx(_components.code,{children:`scheduledDate`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:`Request made`}),_jsx(_components.th,{children:`Actually sent`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Message 1`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`10:00:00`}),_jsx(_components.td,{children:`10:07:00 (held 7 minutes)`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Message 2, `,_jsx(_components.code,{children:`respectGap: true`})]}),_jsx(_components.td,{children:`10:05:00 (5 minutes after message 1)`}),_jsx(_components.td,{children:`held until 10:12:00, then sent`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Message 2, no `,_jsx(_components.code,{children:`respectGap`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`10:05:00`}),_jsx(_components.td,{children:`sent as soon as it is free — right behind message 1`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`request-2`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:`Follow-up that keeps its spacing`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Just checking you saw my last note\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The response is the usual `,_jsx(_components.code,{children:`201`}),`. When the message is being held, `,_jsx(_components.code,{children:`status`}),` is\n`,_jsx(_components.code,{children:`\"scheduled\"`}),` and `,_jsx(_components.code,{children:`scheduledDate`}),` is the time it is held until:`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 201 — held to keep the gap`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"scheduled\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace83280fadae5820a37ae4\"`}),_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:`: {`})]}),`\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:`\"6ace83bd0fadae5820a37b01\"`}),_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:`\"Just checking you saw my last note\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+12025551234\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace832115ae149cfdf83db7\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace83280fadae5820a37ae4\"`}),_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:`\"scheduled\"`}),_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:` \"respectGap\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"scheduledDate\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T19:18:29.579Z\"`}),_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:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T19:17:17.937Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T19:17:18.274Z\"`})]}),`\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:`3`,id:`what-to-expect`,children:`What to expect`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Works without a send window.`}),` `,_jsx(_components.code,{children:`respectGap`}),` needs no `,_jsx(_components.code,{children:`sendWindowStart`}),`,\n`,_jsx(_components.code,{children:`sendWindowEnd`}),` or `,_jsx(_components.code,{children:`timezone`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`It is per contact, across all your lines.`}),` The previous message can have gone out\nfrom a different line. Messages to other contacts are never affected.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The first message to a contact is never held`}),` — there is nothing to space it from.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`“Previous message” means the latest one sent to that contact`}),`, whatever sent it. A\nmanual reply from the inbox in between becomes the new reference point.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The gap is a minimum.`}),` Held messages are released about once a minute, so the real\nspacing is the gap plus up to a minute.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A send window still wins.`}),` If the hold ends outside `,_jsx(_components.code,{children:`sendWindowStart`}),`–`,_jsx(_components.code,{children:`sendWindowEnd`}),`\n(or on a day not in `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),`), the message waits for the window to open.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`If the earlier message went out on time, nothing changes`}),` — the follow-up sends\nnormally.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Combine it with `,_jsx(_components.code,{children:`skipIfReplied`})]}),` to drop the follow-up if the contact answers while\nit is being held.`]}),`\n`,_jsxs(_components.li,{children:[`Only `,_jsx(_components.code,{children:`true`}),` or `,_jsx(_components.code,{children:`\"true\"`}),` turn it on. Any other value is treated as off.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`respectGap`}),` spaces a follow-up from a message that has `,_jsx(_components.strong,{children:`already been sent`}),`. If the\nearlier message is still waiting when the follow-up arrives, there is nothing to measure\nfrom yet, so `,_jsx(_components.code,{children:`respectGap`}),` does not hold the follow-up. With several lines, if the\nearlier message is pinned to a line that is down (`,_jsx(_components.code,{children:`fromLineId`}),`)\nand the follow-up is not pinned, the follow-up can go out first on a healthy line —\npin both to the same line, or leave both unpinned, to avoid that.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`send-window-and-allowed-days`,children:`Send window and allowed days`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`You send`}),_jsx(_components.th,{children:`What happens`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No window fields`}),_jsx(_components.td,{children:`Sends immediately (subject to line limits and pacing).`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`sendWindowStart`}),` + `,_jsx(_components.code,{children:`sendWindowEnd`}),`, inside the window`]}),_jsx(_components.td,{children:`Sends immediately.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`sendWindowStart`}),` + `,_jsx(_components.code,{children:`sendWindowEnd`}),`, outside the window`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`201`}),`, `,_jsx(_components.code,{children:`status: \"scheduled\"`}),`, held until the window next opens.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Only one of the two`}),_jsx(_components.td,{children:`The window is ignored.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`No `,_jsx(_components.code,{children:`timezone`})]}),_jsxs(_components.td,{children:[`Workspace timezone, then `,_jsx(_components.code,{children:`America/New_York`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`An unknown `,_jsx(_components.code,{children:`timezone`}),`, or an abbreviation like `,_jsx(_components.code,{children:`\"EST\"`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`400 INVALID_TIMEZONE`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`allowedDaysOfWeek`}),` without both window times`]}),_jsx(_components.td,{children:`The day list is ignored.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`A time that isn’t `,_jsx(_components.code,{children:`HH:mm`}),` (e.g. `,_jsx(_components.code,{children:`\"9am\"`}),`, `,_jsx(_components.code,{children:`\"25:00\"`}),`)`]}),_jsxs(_components.td,{\"data-numeric\":`true`,children:[_jsx(_components.code,{children:`400`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Start not earlier than end (`,_jsx(_components.code,{children:`\"22:00\"`}),`–`,_jsx(_components.code,{children:`\"06:00\"`}),`, `,_jsx(_components.code,{children:`\"09:00\"`}),`–`,_jsx(_components.code,{children:`\"09:00\"`}),`)`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`400 INVALID_SEND_WINDOW`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`allowedDaysOfWeek`}),` that isn’t whole numbers `,_jsx(_components.code,{children:`0`}),`–`,_jsx(_components.code,{children:`6`}),` (e.g. `,_jsx(_components.code,{children:`[7]`}),`, `,_jsx(_components.code,{children:`[1.5]`}),`, `,_jsx(_components.code,{children:`\"monday\"`}),`)`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`400 INVALID_ALLOWED_DAYS`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`request-3`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:`Weekdays, 9am–6pm New York`,numberOfLines:`11`,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:`11`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Morning! Quick question about your quote.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"allowedDaysOfWeek\": [1, 2, 3, 4, 5]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Inside the window on an allowed day the response is the normal `,_jsx(_components.code,{children:`201`}),` with\n`,_jsx(_components.code,{children:`status: \"sent\"`}),`. Outside it you get `,_jsx(_components.code,{children:`201`}),` with `,_jsx(_components.code,{children:`status: \"scheduled\"`}),` — see\n`,_jsx(_components.a,{href:`#accepted-but-held`,children:`Accepted but held`}),`.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`rejected-values-400`,children:[`Rejected values (`,_jsx(_components.code,{children:`400`}),`)`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Overnight window`,numberOfLines:`4`,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:`4`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`22:00`}),_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:`06:00`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`) are not supported; use `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`00:00`}),_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:`23:59`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to send at any hour.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_SEND_WINDOW\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Timezone abbreviation`,numberOfLines:`4`,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:`4`,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:` \"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:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`EST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`America/New_York`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` or `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Europe/London`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`, or omit timezone to use your workspace timezone.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_TIMEZONE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Unknown timezone`,numberOfLines:`4`,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:`4`,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:` \"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:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Mars/Phobos`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` is not a recognized timezone. Use an IANA timezone name such as `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`America/New_York`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` or `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Europe/London`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`, or omit timezone to use your workspace timezone.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_TIMEZONE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Bad day list`,numberOfLines:`4`,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:`4`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_ALLOWED_DAYS\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Bad time format`,numberOfLines:`3`,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:`3`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid time format. sendWindowStart and sendWindowEnd must be in HH:mm format (e.g., 09:00, 17:00)\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[`Day numbers sent as strings (`,_jsx(_components.code,{children:`[\"1\",\"2\",\"3\"]`}),`) are accepted and stored as numbers.`]}),`\n`,_jsx(Heading,{level:`3`,id:`the-window-is-checked-again-every-time-the-message-is-about-to-send`,children:`The window is checked again every time the message is about to send`}),`\n`,_jsxs(_components.p,{children:[`The window you put on a message is checked when you call the API `,_jsx(_components.strong,{children:`and again each time\nTuco is about to send it`}),`. So if something delays the message — a failed attempt that\nis retried a few minutes later, a line that was briefly down, a daily or hourly limit —\nand the window has closed in the meantime, the message waits for the window to open\nagain instead of going out late. `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),` is applied the same way: on a day\nthat isn’t allowed, the message waits for `,_jsx(_components.code,{children:`sendWindowStart`}),` on the next allowed day.`]}),`\n`,_jsxs(_components.p,{children:[`This applies to every message sent through the API that carries its own\n`,_jsx(_components.code,{children:`sendWindowStart`}),` and `,_jsx(_components.code,{children:`sendWindowEnd`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`These checks only run when a send window is set. Without `,_jsx(_components.code,{children:`sendWindowStart`}),` and\n`,_jsx(_components.code,{children:`sendWindowEnd`}),`, `,_jsx(_components.code,{children:`timezone`}),` and `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),` are ignored.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(_components.p,{children:[`Errors are returned only for `,_jsx(_components.strong,{children:`validation failures`}),` — never for pre-send checks.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`When`}),_jsx(_components.th,{children:`Example`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Message and attachments both empty`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Message and attachmentUrls cannot both be empty\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`Invalid `,_jsx(_components.code,{children:`messageType`})]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Invalid messageType. Must be email, sms, or imessage\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`No active lines + no `,_jsx(_components.code,{children:`fromLineId`})]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"No active lines in workspace...\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`No recipient anywhere`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Either recipientEmail or recipientPhone is required...\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`Unrecognized `,_jsx(_components.code,{children:`skipIfReplied`}),` value`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_SKIP_IF_REPLIED\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`{firstName}`}),`/`,_jsx(_components.code,{children:`{lastName}`}),` has no value and no fallback, an unfilled non-Tuco token (`,_jsx(_components.code,{children:`{{contact_name}}`}),`), or a name expanded to nothing`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Malformed message: name template variable is empty...\", \"code\": \"MALFORMED_NAME_TEMPLATE\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Any other template variable has no value and no fallback`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Template variable(s) have no value...\", \"code\": \"TEMPLATE_VARIABLE_UNRESOLVED\", \"unresolvedVariables\": [\"line_email\"] }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`voiceNote: true`}),` with no attachment`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"voiceNote: true needs an audio attachment...\", \"code\": \"VOICE_NOTE_NO_ATTACHMENT\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`voiceNote: true`}),` with a non-audio attachment`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"voiceNote: true needs a direct link to an audio file...\", \"code\": \"VOICE_NOTE_NOT_AUDIO\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`fromLineId`}),` is not a line in your workspace`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"The specified line does not belong to this workspace.\", \"code\": \"LINE_NOT_FOUND\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`More than 2 attachments`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Maximum 2 attachments per message\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Attachment URL belongs to another workspace`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Attachment URL does not belong to this organization\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Every attachment is unreachable and there is no text`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"No attachment is sendable and the message text is empty...\", \"code\": \"ATTACHMENT_UNSENDABLE_NO_TEXT\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`recipientPhone`}),` can’t be dialled (bad NANP area/exchange code)`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"That number can't receive messages (exchange code 019 cannot start with 0 or 1). Message not sent.\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`Bad `,_jsx(_components.code,{children:`scheduledDate`}),` or `,_jsx(_components.code,{children:`sendWindowStart`}),`/`,_jsx(_components.code,{children:`sendWindowEnd`}),` format`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Invalid scheduledDate format\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Send window start not earlier than end`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_SEND_WINDOW\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Timezone abbreviation or unknown timezone (with a send window)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_TIMEZONE\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`allowedDaysOfWeek`}),` not whole numbers 0–6 (with a send window)`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_ALLOWED_DAYS\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`401`})}),_jsx(_components.td,{children:`Invalid or missing API key`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Unauthorized\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`402`})}),_jsx(_components.td,{children:`Subscription past due (workspace read-only)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"READ_ONLY\", \"code\": \"READ_ONLY\", \"reason\": \"past_due\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`leadId`}),` provided but not found`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Lead not found or access denied\" }`})})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-happens-after-the-api-call`,children:`What happens after the API call`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Message created`,children:_jsxs(_components.p,{children:[`Tuco inserts a record in the `,_jsx(_components.code,{children:`messages`}),` collection with status `,_jsx(_components.code,{children:`pending`}),`\n(or `,_jsx(_components.code,{children:`scheduled`}),` if `,_jsx(_components.code,{children:`scheduledDate`}),` is provided).`]})}),_jsx(Step,{title:`Pre-send checks (worker)`,children:_jsxs(_components.p,{children:[`The worker checks line limits, time window, device gap, and contact gap.\nIf any fail, the message stays `,_jsx(_components.strong,{children:`queued`}),` and is retried later — not failed.`]})}),_jsxs(Step,{title:`Availability check`,children:[_jsxs(_components.p,{children:[`If the workspace has a line with Private API, Tuco checks whether the\nrecipient supports iMessage. If not → status becomes `,_jsx(_components.code,{children:`fallback`}),` and\nfallback SMS fires (when configured).`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`forceFallback: true`}),` `,_jsx(_components.strong,{children:`skips this step entirely`}),` — the message goes\nstraight to the configured fallback channel and never runs an availability\ncheck (so it doesn’t consume the availability-check budget or line cap).`]})})]}),_jsx(Step,{title:`Send`,children:_jsxs(_components.p,{children:[`For individual messages: up to `,_jsx(_components.strong,{children:`5 send attempts`}),` with delivery\nverification between each (polling for up to 90 seconds).`]})}),_jsx(Step,{title:`Outcome`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`sent`}),` → appears in Unibox + webhook fires.\n`,_jsx(_components.code,{children:`failed`}),` → error recorded + optional fallback SMS.\n`,_jsx(_components.code,{children:`delivered`}),` → confirmed later via device callbacks.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`lead-resolution`,children:`Lead resolution`}),`\n`,_jsxs(_components.p,{children:[`When you send without a `,_jsx(_components.code,{children:`leadId`}),`, Tuco resolves the recipient automatically:`]}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Lead found by phone/email`,id:`lead-found-by-phone-email`,children:_jsxs(_components.p,{children:[`If an existing lead in your workspace matches the `,_jsx(_components.code,{children:`recipientPhone`}),` or\n`,_jsx(_components.code,{children:`recipientEmail`}),`, the message is linked to that lead. Any `,_jsx(_components.code,{children:`altPhone`}),`/`,_jsx(_components.code,{children:`altEmail`}),`\nfields you pass will `,_jsx(_components.strong,{children:`update`}),` the lead (merge, not overwrite).`]})}),_jsx(Accordion,{title:`New lead created (Quick Sends)`,id:`new-lead-created-quick-sends`,children:_jsxs(_components.p,{children:[`If no matching lead exists, Tuco creates one under a list called `,_jsx(_components.strong,{children:`“Quick Sends”`}),`\n(created automatically if it doesn’t exist). Alt contact fields are stored on\nthe new lead.`]})}),_jsx(Accordion,{title:`leadId provided`,id:`leadid-provided`,children:_jsxs(_components.p,{children:[`The lead must exist in your workspace. The message is linked to it.\n`,_jsx(_components.code,{children:`recipientPhone`}),`/`,_jsx(_components.code,{children:`recipientEmail`}),` from the body override the lead’s stored\ncontact for this specific send.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`alt-contact-fields`,children:`Alt contact fields`}),`\n`,_jsxs(_components.p,{children:[`When you pass `,_jsx(_components.code,{children:`altPhone1`}),`–`,_jsx(_components.code,{children:`altPhone3`}),` or `,_jsx(_components.code,{children:`altEmail1`}),`–`,_jsx(_components.code,{children:`altEmail3`}),`, they are\nstored on the `,_jsx(_components.strong,{children:`lead`}),` (not the message). The worker uses them as fallback\naddresses when the primary address fails the iMessage availability check.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`Priority order for `,_jsx(_components.code,{children:`messageType: \"imessage\"`}),`:`]})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`phone → altPhone1 → altPhone2 → altPhone3 → email → altEmail1 → altEmail2 → altEmail3`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Alt fields are `,_jsx(_components.strong,{children:`merged`}),` onto the lead. If a lead already has `,_jsx(_components.code,{children:`altPhone1`}),` set\nand you send a new message without `,_jsx(_components.code,{children:`altPhone1`}),`, the existing value is preserved.\nOnly explicitly provided fields are overwritten.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`fallback-sms-on-failure`,children:`Fallback SMS on failure`}),`\n`,_jsx(_components.p,{children:`By default, when a message fails (technical error), no SMS fallback is sent.`}),`\n`,_jsx(_components.p,{children:`To enable:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Configure Twilio on your workspace (`,_jsx(_components.code,{children:`GET /api/workspace/fallback-config`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: true`}),` in the request body (per-message) or\non the workspace (applies to all messages).`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Setting `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: true`}),` without a configured fallback is `,_jsx(_components.strong,{children:`not an error`}),`.\nThe request returns `,_jsx(_components.code,{children:`201`}),` and the iMessage send goes ahead as normal — there is simply no\nSMS to fall back to if it fails. Read\n`,_jsx(_components.a,{href:`/api-reference/endpoint/fallback-config`,children:_jsx(_components.code,{children:`GET /api/workspace/fallback-config`})}),` to confirm\na fallback is set up before you rely on it.`]})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scenario`}),_jsx(_components.th,{children:`Fallback SMS fires?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`fallback`}),` (no iMessage), Twilio configured`]}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Yes`}),` — always`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`failed`}),`, `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: true`}),`, Twilio configured`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Yes`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`failed`}),`, `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: false`}),` (default)`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`No`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`failed`}),`, flag is `,_jsx(_components.code,{children:`true`}),` but no fallback configured`]}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`No`}),` — the send is accepted, there is just nothing to fall back to`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Fallback SMS requires `,_jsx(_components.code,{children:`recipientPhone`}),` on the message. Email-only messages\nwill not trigger fallback SMS.`]})})]})}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 Message","api":"POST /api/messages","description":"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.","href":"/api-reference/endpoint/send-message"}}},"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`,em:`em`,hr:`hr`,li:`li`,ol:`ol`,p:`p`,pre:`pre`,span:`span`,strong:`strong`,tbody:`tbody`,td:`td`,th:`th`,thead:`thead`,tr:`tr`,ul:`ul`,..._provideComponents(),...props.components},{Accordion,AccordionGroup,CodeBlock,CodeGroup,Expandable,Heading,Info,Note,ParamField,RequestExample,ResponseExample,ResponseField,Step,Steps,Table,Tip,Warning}=_components;if(!Accordion)_missingMdxReference(`Accordion`,true);if(!AccordionGroup)_missingMdxReference(`AccordionGroup`,true);if(!CodeBlock)_missingMdxReference(`CodeBlock`,true);if(!CodeGroup)_missingMdxReference(`CodeGroup`,true);if(!Expandable)_missingMdxReference(`Expandable`,true);if(!Heading)_missingMdxReference(`Heading`,true);if(!Info)_missingMdxReference(`Info`,true);if(!Note)_missingMdxReference(`Note`,true);if(!ParamField)_missingMdxReference(`ParamField`,true);if(!RequestExample)_missingMdxReference(`RequestExample`,true);if(!ResponseExample)_missingMdxReference(`ResponseExample`,true);if(!ResponseField)_missingMdxReference(`ResponseField`,true);if(!Step)_missingMdxReference(`Step`,true);if(!Steps)_missingMdxReference(`Steps`,true);if(!Table)_missingMdxReference(`Table`,true);if(!Tip)_missingMdxReference(`Tip`,true);if(!Warning)_missingMdxReference(`Warning`,true);return _jsxs(_Fragment,{children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The Try it panel runs against production`}),` (`,_jsx(_components.code,{children:`https://app.tuco.ai`}),`) with the key you paste\ninto it. There is no sandbox — a request from this page sends a real message from one of your lines.`]})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This is the primary endpoint for automation tools like `,_jsx(_components.strong,{children:`GetSales`}),`, `,_jsx(_components.strong,{children:`n8n`}),`, `,_jsx(_components.strong,{children:`Make`}),`, or your own backend.\nOne call = one message. Tuco handles retries, delivery verification, and fallback internally.`]})}),`\n`,_jsxs(RequestExample,{children:[_jsx(CodeBlock,{filename:`Minimal`,numberOfLines:`7`,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:`7`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Hi from Tuco.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Send window, weekdays`,numberOfLines:`11`,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:`11`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Morning! Quick question about your quote.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"allowedDaysOfWeek\": [1, 2, 3, 4, 5]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Follow-up, keep the gap`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Just checking you saw my last note\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Gap + skip if replied`,numberOfLines:`12`,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:`12`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Still interested? Happy to hold your slot.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"skipIfReplied\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})]}),`\n`,_jsxs(ResponseExample,{children:[_jsx(CodeBlock,{filename:`201 Sent`,numberOfLines:`18`,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:`18`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"sent\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69b2c41d352a78479d2c623b\"`}),_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:`: {`})]}),`\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:`\"69b344bc6dae1d942ece4d0e\"`}),_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:`\"Hi from Tuco.\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+12025551234\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69ab427ac1feb77d7f46462e\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69b2c41d352a78479d2c623b\"`}),_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:`\"sent\"`}),_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:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T16:57:58.468Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T16:58:00.016Z\"`}),_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:` \"sentAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T16:58:00.016Z\"`})]}),`\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`]})})}),_jsx(CodeBlock,{filename:`201 Held`,numberOfLines:`24`,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:`24`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"scheduled\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f58e350b3be067aef80\"`}),_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:`: {`})]}),`\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:`\"6ace9f59e350b3be067aef81\"`}),_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:`\"Morning! Quick question about your quote.\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+12025551234\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f5622264a6eecd4b333\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f58e350b3be067aef80\"`}),_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:`\"scheduled\"`}),_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:` \"scheduledDate\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-14T13:00:00.000Z\"`}),_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:` \"settings\"`}),_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:` \"timezone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"America/New_York\"`}),_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:` \"sendWindowStart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"09:00\"`}),_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:` \"sendWindowEnd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"18:00\"`}),_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:` \"allowedDaysOfWeek\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_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:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T23:15:05.519Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T23:15:05.771Z\"`})]}),`\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`]})})}),_jsx(CodeBlock,{filename:`200 Skipped`,numberOfLines:`9`,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:`9`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"skippedOnly\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"skipReason\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"recipient_replied\"`}),_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:` \"skipMessage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Skipped: this contact already replied in your workspace at any time. The skipIfReplied gate prevented this send.\"`}),_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:` \"repliedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T16:59:48.131Z\"`}),_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:`#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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace637e30e2d7468c7bf397\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`400 Window`,numberOfLines:`4`,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:`4`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`22:00`}),_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:`06:00`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`) are not supported; use `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`00:00`}),_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:`23:59`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to send at any hour.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_SEND_WINDOW\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`400 Timezone`,numberOfLines:`4`,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:`4`,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:` \"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:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`EST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`America/New_York`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` or `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Europe/London`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`, or omit timezone to use your workspace timezone.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_TIMEZONE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`400 Days`,numberOfLines:`4`,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:`4`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_ALLOWED_DAYS\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsx(Heading,{level:`2`,id:`authentication`,children:`Authentication`}),`\n`,_jsx(_components.p,{children:`Pass your workspace API key as a Bearer token, or use a Clerk session token.`}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#953800`,\"--shiki-dark\":`#DCDCAA`},children:`Authorization:`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` Bearer`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` tuco_xxxxxxxxxxxxx`})]}),`\n`]})})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`request-body`,children:`Request body`}),`\n`,_jsxs(ParamField,{body:`message`,type:`string`,id:`param-message`,children:[_jsxs(_components.p,{children:[`The text content to send. `,_jsx(_components.strong,{children:`Required unless`}),` `,_jsx(_components.code,{children:`attachmentUrls`}),` is provided (you can send attachments only, or message + attachments).`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Template variables`}),` are filled in `,_jsx(_components.strong,{children:`at send time`}),` — on every send attempt, against the line that actually sends the message (so retries, scheduled or send-window-deferred messages, and round-robin all name the right line) and the contact’s current data. The same variables campaigns use:`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Variable`}),_jsx(_components.th,{children:`Filled with`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{line_first_name}`})}),_jsx(_components.td,{children:`First name of the sending line`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{line_name}`})}),_jsx(_components.td,{children:`Sending line’s first + last name`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`{line_email}`}),` · `,_jsx(_components.code,{children:`{line_phone}`})]}),_jsx(_components.td,{children:`Sending line’s email · phone`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`{firstName}`}),` `,_jsx(_components.code,{children:`{lastName}`}),` `,_jsx(_components.code,{children:`{companyName}`}),` `,_jsx(_components.code,{children:`{email}`}),` `,_jsx(_components.code,{children:`{phone}`}),` `,_jsx(_components.code,{children:`{jobTitle}`}),` `,_jsx(_components.code,{children:`{notes}`})]}),_jsx(_components.td,{children:`The contact’s fields`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{cf:Field Name}`})}),_jsx(_components.td,{children:`A contact custom field`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`{yourVariable}`})}),_jsx(_components.td,{children:`Your workspace variable’s default (Settings → Variables)`})]})]})]}),_jsxs(_components.p,{children:[`Single `,_jsx(_components.code,{children:`{x}`}),` or double `,_jsx(_components.code,{children:`{{x}}`}),` braces, any case. Add a fallback after a pipe: `,_jsx(_components.code,{children:`{firstName|there}`}),`. Variables work inside links too (`,_jsx(_components.code,{children:`https://cal.com/{line_first_name}`}),`). Anything in braces that is `,_jsx(_components.strong,{children:`not`}),` one of these is sent exactly as written.`]}),_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`A blank is never sent.`}),` If a variable has no value and no fallback, the request is rejected: an empty `,_jsx(_components.code,{children:`{firstName}`}),` / `,_jsx(_components.code,{children:`{lastName}`}),` → `,_jsx(_components.code,{children:`400 MALFORMED_NAME_TEMPLATE`}),`; any other → `,_jsx(_components.code,{children:`400 TEMPLATE_VARIABLE_UNRESOLVED`}),` (the response lists them in `,_jsx(_components.code,{children:`unresolvedVariables`}),`). Text you already filled in yourself is unaffected; an unfilled token from another tool (e.g. `,_jsx(_components.code,{children:`{{contact_name}}`}),`, `,_jsx(_components.code,{children:`{name}`}),`) or a greeting whose name expanded to nothing (`,_jsx(_components.code,{children:`\"Hey , …\"`}),`) is still rejected with `,_jsx(_components.code,{children:`MALFORMED_NAME_TEMPLATE`}),`.`]}),_jsx(CodeBlock,{filename:``,numberOfLines:`1`,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:`1`,children:[_jsxs(_components.span,{className:`line`,children:[_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`{ `}),_jsx(_components.span,{style:{color:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:`\"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+14155550123\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},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:`\"Hey {firstName|there}, {line_first_name} here — grab a time: https://cal.com/{line_first_name}\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:` }`})]}),`\n`]})})})]}),`\n`,_jsxs(ParamField,{body:`attachmentUrls`,type:`string[]`,id:`param-attachment-urls`,children:[_jsxs(_components.p,{children:[`Optional array of URLs (max 2, max 25 MB each). When provided, `,_jsx(_components.code,{children:`message`}),` can be empty. Supported formats: images (PNG, JPG, GIF, WebP, HEIC), video (MP4, MOV), audio (MP3, M4A, WAV, AAC, OGG, CAF), and PDF. Supported sources: any public URL, UploadThing/Blob URLs that belong to your workspace. To send audio as a native iMessage voice note (the waveform bubble), add `,_jsx(_components.code,{children:`voiceNote: true`}),`. The audio must be a `,_jsx(_components.strong,{children:`direct, publicly reachable file URL`}),` — a YouTube or Drive page is rejected with a 400. Easiest source is `,_jsx(_components.strong,{children:`Leads → Uploads`}),` (`,_jsx(_components.code,{children:`/leads?tab=uploads`}),`). See `,_jsx(_components.a,{href:`/api-reference/endpoint/send-with-attachments#voice-note-requirements`,children:`Voice note requirements`}),`.`]}),_jsxs(_components.p,{children:[`With an attachment or voice note, you get `,_jsx(_components.code,{children:`status: \"sent\"`}),` right away and it starts sending. If it fails, you get a `,_jsx(_components.code,{children:`message.failed`}),` webhook for the same `,_jsx(_components.code,{children:`message._id`}),`.`]}),_jsx(Tip,{children:_jsx(_components.p,{children:`Sending the same attachment URL repeatedly (e.g. a promo video in an automation)? Tuco caches attachments per line — the second send skips the download and upload, making it significantly faster.`})})]}),`\n`,_jsx(ParamField,{body:`attachmentNames`,type:`string[]`,id:`param-attachment-names`,children:_jsxs(_components.p,{children:[`Optional display names for the attachments, aligned 1:1 with `,_jsx(_components.code,{children:`attachmentUrls`}),`. Omit and Tuco uses the filename from the URL.`]})}),`\n`,_jsx(ParamField,{body:`voiceNote`,type:`boolean`,default:`false`,id:`param-voice-note`,children:_jsxs(_components.p,{children:[`Send a single audio attachment as a `,_jsx(_components.strong,{children:`native iMessage voice note`}),` (the waveform bubble) instead of a generic audio file. Tuco transcodes the audio for you. Requires exactly one audio attachment in `,_jsx(_components.code,{children:`attachmentUrls`}),` — see `,_jsx(_components.a,{href:`/api-reference/endpoint/send-with-attachments#voice-note-requirements`,children:`Send with Attachments`}),` for the full rules.`]})}),`\n`,_jsxs(ParamField,{body:`recipientPhone`,type:`string`,id:`param-recipient-phone`,children:[_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`The phone number to text, in E.164 format`}),` (e.g. `,_jsx(_components.code,{children:`\"+12025551234\"`}),`). This is how you address\nalmost every send — you do not need a `,_jsx(_components.code,{children:`leadId`}),`. Tuco matches an existing lead on this number, or\ncreates one under the `,_jsx(_components.strong,{children:`Quick Sends`}),` list.`]}),_jsxs(_components.p,{children:[`Required unless you pass `,_jsx(_components.code,{children:`leadId`}),` or `,_jsx(_components.code,{children:`recipientEmail`}),`.`]})]}),`\n`,_jsxs(ParamField,{body:`leadId`,type:`string`,id:`param-lead-id`,children:[_jsxs(_components.p,{children:[`Send to an existing lead using their stored contact details. When provided together with\n`,_jsx(_components.code,{children:`recipientPhone`}),`, the body’s phone number is the send-to address and the lead is used for linking.`]}),_jsxs(_components.p,{children:[`Required unless you pass `,_jsx(_components.code,{children:`recipientPhone`}),` or `,_jsx(_components.code,{children:`recipientEmail`}),`.`]})]}),`\n`,_jsxs(ParamField,{body:`recipientEmail`,type:`string`,id:`param-recipient-email`,children:[_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsxs(_components.strong,{children:[`Use `,_jsx(_components.code,{children:`recipientPhone`}),` unless you specifically need this.`]}),` An email address only reaches someone\nover iMessage if that exact address is registered to their Apple account, which is uncommon and\nimpossible to assume. Addressing by phone number is what works.`]})}),_jsxs(_components.p,{children:[`Only useful in two cases: `,_jsx(_components.code,{children:`messageType: \"email\"`}),`, or iMessage to a contact you already know is\nreachable at that Apple ID. Required unless you pass `,_jsx(_components.code,{children:`recipientPhone`}),` or `,_jsx(_components.code,{children:`leadId`}),`.`]})]}),`\n`,_jsxs(ParamField,{body:`messageType`,type:`string`,default:`imessage`,id:`param-message-type`,children:[_jsxs(_components.p,{children:[`Channel to use. When omitted, defaults to `,_jsx(_components.code,{children:`\"imessage\"`}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Value`}),_jsx(_components.th,{children:`Channel`}),_jsx(_components.th,{children:`Addresses tried (from lead)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"imessage\"`})}),_jsx(_components.td,{children:`iMessage via device relay`}),_jsx(_components.td,{children:`phone → altPhone1-3 → email → altEmail1-3`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"sms\"`})}),_jsx(_components.td,{children:`SMS via Twilio`}),_jsx(_components.td,{children:`phone → altPhone1-3 only`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"email\"`})}),_jsx(_components.td,{children:`Email`}),_jsx(_components.td,{children:`email → altEmail1-3 only`})]})]})]})]}),`\n`,_jsx(ParamField,{body:`fromLineId`,type:`string`,id:`param-from-line-id`,children:_jsxs(_components.p,{children:[`Tuco line ID to send from. `,_jsx(_components.strong,{children:`Optional`}),` — when omitted, Tuco round-robins\nacross your workspace’s active lines automatically.`]})}),`\n`,_jsx(ParamField,{body:`recipientName`,type:`string`,id:`param-recipient-name`,children:_jsx(_components.p,{children:`Display name for the recipient. Derived from the lead when omitted.`})}),`\n`,_jsx(Heading,{level:`3`,id:`alternate-contact-fields`,children:`Alternate contact fields`}),`\n`,_jsx(_components.p,{children:`Stored on the lead (created or found). The worker tries these in priority\norder when the primary address fails iMessage availability.`}),`\n`,_jsx(ParamField,{body:`altPhone1`,type:`string`,id:`param-alt-phone1`,children:`Alternate phone number 1`}),`\n`,_jsx(ParamField,{body:`altPhone2`,type:`string`,id:`param-alt-phone2`,children:`Alternate phone number 2`}),`\n`,_jsx(ParamField,{body:`altPhone3`,type:`string`,id:`param-alt-phone3`,children:`Alternate phone number 3`}),`\n`,_jsx(ParamField,{body:`altEmail1`,type:`string`,id:`param-alt-email1`,children:`Alternate email 1`}),`\n`,_jsx(ParamField,{body:`altEmail2`,type:`string`,id:`param-alt-email2`,children:`Alternate email 2`}),`\n`,_jsx(ParamField,{body:`altEmail3`,type:`string`,id:`param-alt-email3`,children:`Alternate email 3`}),`\n`,_jsx(Heading,{level:`3`,id:`scheduling-\u0026-time-window`,children:`Scheduling \u0026 time window`}),`\n`,_jsxs(_components.p,{children:[`Control `,_jsx(_components.strong,{children:`when`}),` the message is sent. All fields are optional.\nWhen omitted, the message sends immediately (subject to line limits and device gaps).`]}),`\n`,_jsx(ParamField,{body:`scheduledDate`,type:`string`,id:`param-scheduled-date`,children:_jsxs(_components.p,{children:[`ISO 8601 timestamp to send in the future (e.g. `,_jsx(_components.code,{children:`\"2026-10-15T14:30:00Z\"`}),`). The\nresponse `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`\"scheduled\"`}),`. If you also set a send window and this time\nfalls outside it, the message is moved to the next time the window is open.\nA value that can’t be parsed returns `,_jsx(_components.code,{children:`400`}),`.`]})}),`\n`,_jsx(ParamField,{body:`sendWindowStart`,type:`string`,id:`param-send-window-start`,children:_jsxs(_components.p,{children:[`Earliest time to send, `,_jsx(_components.code,{children:`HH:mm`}),` 24-hour format (e.g. `,_jsx(_components.code,{children:`\"09:00\"`}),`), inclusive. Set\n`,_jsx(_components.strong,{children:`both`}),` `,_jsx(_components.code,{children:`sendWindowStart`}),` and `,_jsx(_components.code,{children:`sendWindowEnd`}),` — if only one is sent, the window is\nignored. Outside the window the request still returns `,_jsx(_components.code,{children:`201`}),` with\n`,_jsx(_components.code,{children:`status: \"scheduled\"`}),`; the message is held until the window opens. Use\n`,_jsx(_components.code,{children:`\"00:00\"`}),`–`,_jsx(_components.code,{children:`\"23:59\"`}),` for any hour. Anything that isn’t `,_jsx(_components.code,{children:`HH:mm`}),` returns `,_jsx(_components.code,{children:`400`}),`.`]})}),`\n`,_jsx(ParamField,{body:`sendWindowEnd`,type:`string`,id:`param-send-window-end`,children:_jsxs(_components.p,{children:[`Latest time to send, `,_jsx(_components.code,{children:`HH:mm`}),` (e.g. `,_jsx(_components.code,{children:`\"17:00\"`}),`). The end is exclusive, and it must be\nlater than the start. An overnight window such as `,_jsx(_components.code,{children:`\"22:00\"`}),`–`,_jsx(_components.code,{children:`\"06:00\"`}),` returns\n`,_jsx(_components.code,{children:`400 INVALID_SEND_WINDOW`}),`; use `,_jsx(_components.code,{children:`\"00:00\"`}),`–`,_jsx(_components.code,{children:`\"23:59\"`}),` to send at any hour.`]})}),`\n`,_jsx(ParamField,{body:`timezone`,type:`string`,id:`param-timezone`,children:_jsxs(_components.p,{children:[`IANA timezone for the send window (e.g. `,_jsx(_components.code,{children:`\"America/New_York\"`}),`). `,_jsx(_components.strong,{children:`Optional.`}),` When\nomitted, your workspace timezone is used (or `,_jsx(_components.code,{children:`America/New_York`}),` if the workspace\nhas none). Use a full name — an abbreviation like `,_jsx(_components.code,{children:`\"EST\"`}),` or an unknown name\nreturns `,_jsx(_components.code,{children:`400 INVALID_TIMEZONE`}),` when a send window is set. `,_jsx(_components.code,{children:`\"UTC\"`}),` is accepted.\nThe timezone is only used together with a send window.`]})}),`\n`,_jsx(ParamField,{body:`allowedDaysOfWeek`,type:`number[]`,id:`param-allowed-days-of-week`,children:_jsxs(_components.p,{children:[`Days when sending is allowed, as whole numbers. `,_jsx(_components.code,{children:`0`}),` = Sunday, `,_jsx(_components.code,{children:`6`}),` = Saturday.\nExample: `,_jsx(_components.code,{children:`[1,2,3,4,5]`}),` for weekdays only. An empty array means every day; any\nother value returns `,_jsx(_components.code,{children:`400 INVALID_ALLOWED_DAYS`}),`. `,_jsxs(_components.strong,{children:[`Only applies together with\n`,_jsx(_components.code,{children:`sendWindowStart`}),` and `,_jsx(_components.code,{children:`sendWindowEnd`})]}),` — a day list without hours is ignored. On a\nday that isn’t allowed, the message waits for `,_jsx(_components.code,{children:`sendWindowStart`}),` on the next allowed\nday. See `,_jsx(_components.a,{href:`#send-window-and-allowed-days`,children:`Send window and allowed days`}),`.`]})}),`\n`,_jsx(ParamField,{body:`respectGap`,type:`boolean`,default:`false`,id:`param-respect-gap`,children:_jsxs(_components.p,{children:[`Keep the wait between follow-ups to the same contact. When `,_jsx(_components.code,{children:`true`}),`, and an earlier\nmessage to this contact went out late, this message is held so the original spacing\nis preserved: it waits until the previous message’s actual send time plus the gap\nbetween your two API calls. Works on its own — no send window or workspace setting\nneeded. Accepts `,_jsx(_components.code,{children:`true`}),` or `,_jsx(_components.code,{children:`\"true\"`}),`; any other value is treated as `,_jsx(_components.code,{children:`false`}),`. While\nheld, the response `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`\"scheduled\"`}),`. See\n`,_jsx(_components.a,{href:`#keep-the-wait-between-follow-ups`,children:`Keep the wait between follow-ups`}),`.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`fallback-\u0026-advanced`,children:`Fallback \u0026 advanced`}),`\n`,_jsx(ParamField,{body:`sendFallbackSmsOnFailed`,type:`boolean`,default:`false`,id:`param-send-fallback-sms-on-failed`,children:_jsxs(_components.p,{children:[`When `,_jsx(_components.code,{children:`true`}),`, if the message ends in `,_jsx(_components.code,{children:`failed`}),` status (technical error after\nretries), Tuco sends a fallback SMS via your configured fallback number.\nIf no fallback is configured on the workspace the request is `,_jsx(_components.strong,{children:`still accepted`}),` —\nthe iMessage send proceeds and simply has no SMS to fall back to. Check\n`,_jsx(_components.a,{href:`/api-reference/endpoint/fallback-config`,children:_jsx(_components.code,{children:`GET /api/workspace/fallback-config`})}),`\nfirst if you need the fallback to actually fire.`]})}),`\n`,_jsxs(ParamField,{body:`forceFallback`,type:`boolean`,default:`false`,id:`param-force-fallback`,children:[_jsxs(_components.p,{children:[`When `,_jsx(_components.code,{children:`true`}),`, Tuco `,_jsx(_components.strong,{children:`skips the iMessage availability check entirely`}),` and sends\nthe message straight via your workspace’s configured fallback — Twilio, GHL, or\na custom webhook (Settings → `,_jsx(_components.em,{children:`When iMessage isn’t available`}),`). Use it when you\nalready know the recipient isn’t on iMessage, or you simply want SMS.`]}),_jsxs(_components.p,{children:[`The send never touches iMessage, so it does `,_jsx(_components.strong,{children:`not`}),` consume the line’s daily\ncap or the availability-check budget, and the response status is `,_jsx(_components.code,{children:`\"fallback\"`}),`.`]}),_jsxs(_components.p,{children:[`If no fallback is configured — or the fallback dispatch fails (e.g. a bad Twilio\nfrom-number) — the message is `,_jsx(_components.strong,{children:`not`}),` delivered: the response returns\n`,_jsx(_components.code,{children:`\"success\": false`}),` with a channel-tagged `,_jsx(_components.code,{children:`error`}),`, and the message is recorded\nwith `,_jsx(_components.code,{children:`\"fallbackSmsStatus\": \"failed\"`}),`. The request itself still succeeds — read the\n`,_jsx(_components.code,{children:`success`}),` flag in the body rather than relying on the status code.`]}),_jsxs(_components.p,{children:[`Unlike `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed`}),` (which is `,_jsx(_components.em,{children:`reactive`}),` — fallback only after an\niMessage send fails), `,_jsx(_components.code,{children:`forceFallback`}),` is `,_jsx(_components.em,{children:`proactive`}),`: it never attempts iMessage\nin the first place.`]})]}),`\n`,_jsxs(ParamField,{body:`skipIfReplied`,type:`string | boolean`,default:`false`,id:`param-skip-if-replied`,children:[_jsxs(_components.p,{children:[`Workspace-level reply gate. When set, Tuco `,_jsx(_components.strong,{children:`suppresses this send if the\ncontact has already replied in your workspace`}),`.`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`false`}),` / `,_jsx(_components.code,{children:`\"false\"`}),` / omitted → always send (default, backward compatible)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.code,{children:`true`}),` / `,_jsx(_components.code,{children:`\"true\"`}),` → skip if the contact has `,_jsx(_components.strong,{children:`ever`}),` replied`]}),`\n`,_jsxs(_components.li,{children:[`a window string → skip only if they replied `,_jsx(_components.strong,{children:`within`}),` that window:\n`,_jsx(_components.code,{children:`\"1m\"`}),`, `,_jsx(_components.code,{children:`\"1h\"`}),`, `,_jsx(_components.code,{children:`\"1d\"`}),`, `,_jsx(_components.code,{children:`\"2d\"`}),`, `,_jsx(_components.code,{children:`\"5d\"`}),`, `,_jsx(_components.code,{children:`\"7d\"`}),`, `,_jsx(_components.code,{children:`\"14d\"`}),`, `,_jsx(_components.code,{children:`\"1mo\"`}),`, `,_jsx(_components.code,{children:`\"1yr\"`}),`\n(`,_jsx(_components.code,{children:`m`}),`=minute, `,_jsx(_components.code,{children:`h`}),`=hour, `,_jsx(_components.code,{children:`d`}),`=day, `,_jsx(_components.code,{children:`w`}),`=week, `,_jsx(_components.code,{children:`mo`}),`=30 days, `,_jsx(_components.code,{children:`yr`}),`=365 days)`]}),`\n`]}),_jsxs(_components.p,{children:[`Scope is your `,_jsx(_components.strong,{children:`workspace`}),` — a reply to `,_jsx(_components.em,{children:`any`}),` of your lines counts (not just\nthe sending line). The check never crosses workspaces. On a skip, `,_jsx(_components.strong,{children:`no message\nis created`}),` and the API returns `,_jsx(_components.code,{children:`200`}),` with `,_jsx(_components.code,{children:`skippedOnly: true`}),` (see\n`,_jsx(_components.a,{href:`#skip-if-the-contact-already-replied`,children:`Skip if the contact already replied`}),`).\nThe check runs again right before a queued message sends: if the contact replied\nwhile it was waiting, it is cancelled instead of sent.\nAn unrecognized value returns `,_jsx(_components.code,{children:`400 INVALID_SKIP_IF_REPLIED`}),`.`]})]}),`\n`,_jsx(ParamField,{body:`batchId`,type:`string`,id:`param-batch-id`,children:_jsx(_components.p,{children:`Free-form string to group related messages for reporting.`})}),`\n`,_jsx(ParamField,{body:`correlationId`,type:`string`,id:`param-correlation-id`,children:_jsxs(_components.p,{children:[`Optional tracing ID. If omitted, Tuco generates one (`,_jsx(_components.code,{children:`app_…`}),`). The same ID\nis preferred from the `,_jsx(_components.code,{children:`x-correlation-id`}),` request header. It flows through\nevery internal log event for this send so you can grep one ID and see the entire\nrequest → gate → send → webhook chain. See\n`,_jsx(_components.a,{href:`/api-reference/introduction#correlation-ids-request-tracing`,children:`API Overview → Correlation IDs`}),`.`]})}),`\n`,_jsxs(Accordion,{title:`Request headers`,id:`request-headers`,children:[_jsxs(_components.p,{children:[`Headers Tuco recognizes in addition to `,_jsx(_components.code,{children:`Authorization`}),`.`]}),_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Header`}),_jsx(_components.th,{children:`Purpose`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`x-correlation-id`})}),_jsxs(_components.td,{children:[`Request-scoped tracing ID (preferred over body field). Echoed back in logs under `,_jsx(_components.code,{children:`correlationId`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`x-execution-id`})}),_jsx(_components.td,{children:`GHL workflow execution ID. Only set when calling from a GHL workflow context.`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`x-ghl-workflow-id`})}),_jsxs(_components.td,{children:[`GHL workflow definition ID. Pairs with `,_jsx(_components.code,{children:`x-execution-id`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`Idempotency-Key`})}),_jsx(_components.td,{children:`When supplied, Tuco caches the response and replays it on retry within the idempotency window. Use one unique key per logical send.`})]})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`examples`,children:`Examples`}),`\n`,_jsxs(_components.p,{children:[`Create or import a lead first using `,_jsx(_components.a,{href:`https://docs.tuco.ai/api-reference/leads`,children:_jsx(_components.code,{children:`POST /api/leads`})}),`, then send using `,_jsx(_components.code,{children:`leadId`}),` as shown below.`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Minimal using leadId (defaults to iMessage)`,numberOfLines:`7`,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:`7`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Hi, this is a test from Tuco.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439012\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsxs(_components.p,{children:[`Need a `,_jsx(_components.code,{children:`leadId`}),` first? Create one with `,_jsx(_components.a,{href:`https://docs.tuco.ai/api-reference/leads`,children:_jsx(_components.code,{children:`POST /api/leads`})}),`, then use the returned `,_jsx(_components.code,{children:`leadId`}),` in this request.`]}),_jsx(CodeBlock,{filename:`HubSpot lead`,numberOfLines:`9`,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:`9`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Hi from Tuco.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439013\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"hsContactId\": \"120001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"hsPortalId\": \"991001\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`GHL lead`,numberOfLines:`9`,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:`9`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Hi from Tuco.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439014\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ghlContactId\": \"ghl_contact_001\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"ghlLocationId\": \"eL7DD22BdZ0rismu7qCA\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`With attachments`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Here is the file.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"leadId\": \"667f1f77bcf86cd799439012\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"attachmentUrls\": [\"https://example.com/doc.pdf\"]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`GoHighLevel webhook (raw payload)`,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:`# The exact body GoHighLevel's \"Webhook\" workflow action posts. You only fill in`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`# customData.message — Tuco derives the recipient + GHL identity from the rest.`})}),`\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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"contact_id\": \"KWqc16yBbIV7hLfiRTse\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"full_name\": \"Matheus Maia\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"email\": \"alex@example.com\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"phone\": \"+13055550100\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"location\": { \"id\": \"57m52yUR4RkI2k1VuHhL\" },`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"customData\": { \"message\": \"Hi Matheus\" }`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Send window, weekdays only`,numberOfLines:`11`,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:`11`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Morning! Quick question about your quote.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"allowedDaysOfWeek\": [1, 2, 3, 4, 5]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Follow-up that keeps its gap`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Just checking you saw my last note\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Follow-up: keep the gap, skip if they replied`,numberOfLines:`12`,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:`12`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Still interested? Happy to hold your slot.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"skipIfReplied\": true,`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`send-straight-from-a-gohighlevel-webhook`,children:`Send straight from a GoHighLevel webhook`}),`\n`,_jsxs(_components.p,{children:[`You can point a GoHighLevel `,_jsx(_components.strong,{children:`Workflow → Webhook`}),` action directly at this endpoint —\nno GHL Marketplace app or action secret required, just your Tuco API key in the\n`,_jsx(_components.code,{children:`Authorization`}),` header. GHL’s Webhook action already includes the full contact\npayload; Tuco reads GHL’s native field names so `,_jsxs(_components.strong,{children:[`the only thing you map in Custom\nData is `,_jsx(_components.code,{children:`message`})]}),`.`]}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Add a Webhook action to your workflow`,children:_jsxs(_components.p,{children:[`Method `,_jsx(_components.code,{children:`POST`}),`, URL `,_jsx(_components.code,{children:`https://app.tuco.ai/api/messages`}),`.`]})}),_jsx(Step,{title:`Add the auth header`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Authorization`}),` = `,_jsx(_components.code,{children:`Bearer tuco_xxxxxxxxxxxxx`}),`.`]})}),_jsx(Step,{title:`Add Custom Data`,children:_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`message`}),` (required). Optionally add `,_jsx(_components.code,{children:`lineId`}),` (pin a sending line — otherwise\nTuco round-robins) and `,_jsx(_components.code,{children:`attachmentUrls`}),` (a single URL or comma-separated list).`]})})]}),`\n`,_jsxs(_components.p,{children:[`Tuco auto-maps GHL’s native fields onto the canonical request fields. `,_jsx(_components.strong,{children:`Custom Data\nalways wins`}),` — set any field there to override what’s derived from the contact:`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Canonical field`}),_jsx(_components.th,{children:`Filled from (Custom Data first, then GHL native)`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`message`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`customData.message`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`fromLineId`})}),_jsx(_components.td,{children:_jsx(_components.code,{children:`customData.lineId`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`attachmentUrls`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.attachmentUrls`}),` (string or CSV → array)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recipientPhone`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.recipientPhone`}),` → top-level `,_jsx(_components.code,{children:`phone`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recipientEmail`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.recipientEmail`}),` → top-level `,_jsx(_components.code,{children:`email`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`recipientName`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.recipientName`}),` → `,_jsx(_components.code,{children:`full_name`}),` → `,_jsx(_components.code,{children:`first_name`}),` + `,_jsx(_components.code,{children:`last_name`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ghlContactId`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.ghlContactId`}),` → `,_jsx(_components.code,{children:`contact_id`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`ghlLocationId`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.ghlLocationId`}),` → `,_jsx(_components.code,{children:`location.id`})]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`contactOwnerEmail`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`customData.contactOwnerEmail`}),` → `,_jsx(_components.code,{children:`user.email`})]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`This mapping is `,_jsx(_components.strong,{children:`additive and backward compatible`}),` — it only fills a field you did\nnot already send. Existing integrations that post canonical fields (`,_jsx(_components.code,{children:`recipientPhone`}),`,\n`,_jsx(_components.code,{children:`ghlContactId`}),`, …) are completely unaffected.`]})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`If `,_jsx(_components.code,{children:`{{contact.phone}}`}),` is empty on the contact, the request fails with\n`,_jsx(_components.code,{children:`missing_recipient`}),`. Make sure the contact has a phone or email before the webhook fires.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`response`,children:`Response`}),`\n`,_jsxs(_components.p,{children:[`The API always returns `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`201`})}),` when the message is successfully created.\nThe `,_jsx(_components.code,{children:`status`}),` field tells you what happens next.`]}),`\n`,_jsx(Tip,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Pre-send checks are never errors.`}),` Line limits, time windows, device gaps,\nand contact gaps cause `,_jsx(_components.code,{children:`status: \"pending\"`}),` or `,_jsx(_components.code,{children:`\"scheduled\"`}),` — the message is\naccepted and will send when conditions are met.`]})}),`\n`,_jsxs(Heading,{level:`3`,id:`success-201-created-or-200-ok-when-duplicate-lead-used`,children:[`Success (`,_jsx(_components.code,{children:`201 Created`}),` or `,_jsx(_components.code,{children:`200 OK`}),` when duplicate lead used)`]}),`\n`,_jsx(CodeBlock,{filename:``,numberOfLines:`25`,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:`25`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"sent\"`}),_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:`: {`})]}),`\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:`\"69b344bc6dae1d942ece4d0e\"`}),_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:`\"Here's your document.\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69ab427ac1feb77d7f46462e\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+919876543210\"`}),_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:` \"recipientEmail\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"jane@example.com\"`}),_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:` \"recipientName\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Jane Doe\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69b2c41d352a78479d2c623b\"`}),_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:` \"workspaceId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"org_3AZs4H8UsfFxVFONr6H4K75okaG\"`}),_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:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-12T22:57:00.856Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-12T22:57:02.892Z\"`}),_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:` \"sentAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-03-12T22:57:02.892Z\"`}),_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:` \"externalMessageId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"5CA93911-F0FE-4D1F-8D8C-1E3495A124F6\"`})]}),`\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:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"69b2c41d352a78479d2c623b\"`}),_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:` \"ghlContactId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"aMUQn0u0Z7cw0NQ7tJ5R\"`}),_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:` \"ghlLocationId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"eL7DD22BdZ0rismu7qCA\"`}),_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:` \"hsPortalId\"`}),_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:` \"hsContactId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`null`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`When the recipient was matched to an existing lead (duplicate), the API returns `,_jsx(_components.strong,{children:_jsx(_components.code,{children:`200`})}),` with `,_jsx(_components.code,{children:`duplicateOnly: true`}),`, `,_jsx(_components.code,{children:`existingLeadIds`}),`, and `,_jsx(_components.code,{children:`leadIds`}),` so your automation can continue without treating it as an error.`]}),`\n`,_jsx(ResponseField,{name:`success`,type:`boolean`,id:`param-success`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`true`}),` when the message was created.`]})}),`\n`,_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status`,children:_jsx(_components.p,{children:`Current status of the message. See the status table below.`})}),`\n`,_jsxs(ResponseField,{name:`message`,type:`object`,id:`param-message-1`,children:[_jsx(_components.p,{children:`The full message document. Key fields:`}),_jsxs(Expandable,{title:`Message fields`,children:[_jsx(ResponseField,{name:`_id`,type:`string`,id:`param-id`,children:`Unique message ID`}),_jsx(ResponseField,{name:`message`,type:`string`,id:`param-message-2`,children:`Body text`}),_jsxs(ResponseField,{name:`messageType`,type:`string`,id:`param-message-type-1`,children:[`Channel (`,_jsx(_components.code,{children:`imessage`}),`, `,_jsx(_components.code,{children:`sms`}),`, `,_jsx(_components.code,{children:`email`}),`)`]}),_jsx(ResponseField,{name:`status`,type:`string`,id:`param-status-1`,children:`Lifecycle status`}),_jsx(ResponseField,{name:`fromLineId`,type:`string`,id:`param-from-line-id-1`,children:`Line used to send`}),_jsx(ResponseField,{name:`recipientPhone`,type:`string`,id:`param-recipient-phone-1`,children:`Recipient phone`}),_jsx(ResponseField,{name:`recipientEmail`,type:`string`,id:`param-recipient-email-1`,children:`Recipient email`}),_jsx(ResponseField,{name:`leadId`,type:`string`,id:`param-lead-id-1`,children:`Linked lead ID`}),_jsx(ResponseField,{name:`scheduledDate`,type:`string`,id:`param-scheduled-date-1`,children:`When the message will send (if scheduled)`}),_jsx(ResponseField,{name:`sentAt`,type:`string`,id:`param-sent-at`,children:`When actually sent`}),_jsx(ResponseField,{name:`deliveredAt`,type:`string`,id:`param-delivered-at`,children:`When delivery confirmed`}),_jsx(ResponseField,{name:`createdAt`,type:`string`,id:`param-created-at`,children:`Creation timestamp`})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`accepted-but-held`,children:`Accepted but held`}),`\n`,_jsxs(_components.p,{children:[`When a send window, an allowed-day rule or `,_jsx(_components.code,{children:`respectGap`}),` holds the message, the request\nstill succeeds. `,_jsx(_components.code,{children:`status`}),` is `,_jsx(_components.code,{children:`\"scheduled\"`}),` and `,_jsx(_components.code,{children:`message.scheduledDate`}),` is when it will\nbe released.`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 201 — outside the send window, held until it opens`,numberOfLines:`24`,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:`24`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"scheduled\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f58e350b3be067aef80\"`}),_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:`: {`})]}),`\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:`\"6ace9f59e350b3be067aef81\"`}),_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:`\"Morning! Quick question about your quote.\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+12025551234\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f5622264a6eecd4b333\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace9f58e350b3be067aef80\"`}),_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:`\"scheduled\"`}),_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:` \"scheduledDate\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-14T13:00:00.000Z\"`}),_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:` \"settings\"`}),_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:` \"timezone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"America/New_York\"`}),_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:` \"sendWindowStart\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"09:00\"`}),_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:` \"sendWindowEnd\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"18:00\"`}),_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:` \"allowedDaysOfWeek\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: [`}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`1`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`2`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`3`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`4`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`, `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#B5CEA8`},children:`5`}),_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:`#116329`,\"--shiki-dark\":`#9CDCFE`},children:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T23:15:05.519Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T23:15:05.771Z\"`})]}),`\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:[_jsx(_components.code,{children:`message.settings`}),` echoes the window Tuco stored: the resolved timezone, and\n`,_jsx(_components.code,{children:`allowedDaysOfWeek`}),` as numbers.`]}),`\n`,_jsx(Heading,{level:`3`,id:`status-values`,children:`Status values`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`Meaning`}),_jsx(_components.th,{children:`Is it an error?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"sent\"`})}),_jsx(_components.td,{children:`Message sent immediately (sync path)`}),_jsx(_components.td,{children:`No`})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"pending\"`})}),_jsx(_components.td,{children:`Created, worker will process. Line limits / time window / device gap may delay it.`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`No`}),` — it will send when checks pass`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"scheduled\"`})}),_jsxs(_components.td,{children:[`Held until `,_jsx(_components.code,{children:`message.scheduledDate`}),`: your own `,_jsx(_components.code,{children:`scheduledDate`}),`, a send window or allowed-day rule, a `,_jsx(_components.code,{children:`respectGap`}),` hold, a line limit, or a retry`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`No`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"cancelled\"`})}),_jsxs(_components.td,{children:[`A queued message that was dropped before sending — for example `,_jsx(_components.code,{children:`skipIfReplied`}),` was set and the contact replied while it waited`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`No`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"fallback\"`})}),_jsx(_components.td,{children:`Recipient has no iMessage; fallback SMS sent if configured`}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`No`}),` (business rule)`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:_jsx(_components.code,{children:`\"failed\"`})}),_jsx(_components.td,{children:`All retries exhausted or availability API error`}),_jsx(_components.td,{children:`Yes (technical)`})]})]})]}),`\n`,_jsxs(Info,{children:[_jsxs(_components.p,{children:[_jsx(_components.code,{children:`\"pending\"`}),` and `,_jsx(_components.code,{children:`\"scheduled\"`}),` mean the message is accepted and queued. The worker sends it when:`]}),_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Time window`}),` is satisfied (inside `,_jsx(_components.code,{children:`sendWindowStart`}),`–`,_jsx(_components.code,{children:`sendWindowEnd`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Allowed day`}),` is satisfied (today is in `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Follow-up gap`}),` has passed (only when `,_jsx(_components.code,{children:`respectGap`}),` is `,_jsx(_components.code,{children:`true`}),`)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Line limits`}),` reset (daily total or new conversations limit)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Device gap`}),` is met (default 30s between sends from same device)`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Contact gap`}),` is met (default 45s between first messages to different contacts on same line)`]}),`\n`]}),_jsx(_components.p,{children:`None of these cause an error response.`})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`duplicate-protection`,children:`Duplicate protection`}),`\n`,_jsxs(_components.p,{children:[`Tuco automatically blocks duplicate sends — no header required. Two POSTs with\nidentical `,_jsx(_components.code,{children:`(workspaceId, recipientPhone, recipientEmail, message)`}),` within\n`,_jsx(_components.strong,{children:`15 minutes`}),` are collapsed: the second one returns `,_jsx(_components.code,{children:`200`}),` with the original\nmessage and `,_jsx(_components.strong,{children:`does not fire a new send`}),`.`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 200 — duplicate caught`,numberOfLines:`7`,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:`7`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"duplicateOnly\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"duplicateMessage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Same message text already sent to this contact 42s ago — returning existing message instead of sending again\"`}),_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:`#6E7781`,\"--shiki-dark\":`#6A9955`},children:`/* the original sibling message doc */`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"...\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Branch on `,_jsx(_components.code,{children:`duplicateOnly === true`}),` and treat it as a no-op success. The\n`,_jsx(_components.code,{children:`message._id`}),` in the response is the original send, so your CRM workflow can\nkeep moving without re-sending.`]}),`\n`,_jsx(Tip,{children:_jsx(_components.p,{children:`This works for concurrent firings (the most common cause of accidental\nduplicates — an integration retrying within milliseconds) AND for upstream\nretries up to 15 minutes apart. The guard is built on an atomic Mongo write,\nso concurrent identical POSTs cannot both proceed.`})}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Failed sends:`}),` if your first send ended in `,_jsx(_components.code,{children:`status: \"failed\"`}),` and you\nimmediately retry with the same body within 15 minutes, you’ll get the failed\nsibling back with `,_jsx(_components.code,{children:`duplicateOnly: true`}),`. To force a fresh send: change the\nbody or wait 15 minutes.`]})}),`\n`,_jsxs(_components.p,{children:[`For deeper detail, edge cases, and ops events, see\n`,_jsx(_components.a,{href:`/imessage-double-send-guard`,children:`Atomic Duplicate Guard`}),`.`]}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`Idempotency-Key`}),` is still supported and runs `,_jsx(_components.strong,{children:`before`}),` the dedup guard.\nUse it when your client controls retries — it gives you a 24-hour window\nkeyed on the exact request rather than on body content.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`skip-if-the-contact-already-replied`,children:`Skip if the contact already replied`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`skipIfReplied`}),` to avoid following up with a contact who has already responded\nto you. Tuco checks your workspace’s inbound history for this recipient (phone or\nemail) and, if it finds a reply, `,_jsx(_components.strong,{children:`does not create or send the message`}),`. This is useful for drip\nautomations in n8n/Make/GHL where you don’t want to nudge someone who already wrote\nback.`]}),`\n`,_jsx(Heading,{level:`3`,id:`values`,children:`Values`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:_jsx(_components.code,{children:`skipIfReplied`})}),_jsx(_components.th,{children:`Behavior`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`omitted / `,_jsx(_components.code,{children:`false`}),` / `,_jsx(_components.code,{children:`\"false\"`})]}),_jsx(_components.td,{children:`Always send (default).`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`true`}),` / `,_jsx(_components.code,{children:`\"true\"`})]}),_jsxs(_components.td,{children:[`Skip if the contact has `,_jsx(_components.strong,{children:`ever`}),` replied in your workspace.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`\"1m\"`}),` `,_jsx(_components.code,{children:`\"1h\"`}),` `,_jsx(_components.code,{children:`\"1d\"`}),` `,_jsx(_components.code,{children:`\"2d\"`}),` `,_jsx(_components.code,{children:`\"5d\"`}),` `,_jsx(_components.code,{children:`\"7d\"`}),` `,_jsx(_components.code,{children:`\"14d\"`}),` `,_jsx(_components.code,{children:`\"1mo\"`}),` `,_jsx(_components.code,{children:`\"1yr\"`})]}),_jsxs(_components.td,{children:[`Skip only if they replied `,_jsx(_components.strong,{children:`within`}),` that window.`]})]})]})]}),`\n`,_jsxs(_components.p,{children:[`Units: `,_jsx(_components.code,{children:`m`}),` = minute, `,_jsx(_components.code,{children:`h`}),` = hour, `,_jsx(_components.code,{children:`d`}),` = day, `,_jsx(_components.code,{children:`w`}),` = week, `,_jsx(_components.code,{children:`mo`}),` = 30 days, `,_jsx(_components.code,{children:`yr`}),` = 365 days.\nGeneral form: `,_jsx(_components.code,{children:`\u003cnumber>\u003cunit>`}),` (e.g. `,_jsx(_components.code,{children:`\"3d\"`}),`, `,_jsx(_components.code,{children:`\"36h\"`}),`). Note `,_jsx(_components.code,{children:`\"1m\"`}),` is one `,_jsx(_components.strong,{children:`minute`}),` and\n`,_jsx(_components.code,{children:`\"1mo\"`}),` is one `,_jsx(_components.strong,{children:`month`}),`.`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.strong,{children:`Scope is your workspace, not a single line.`}),` A reply to `,_jsx(_components.em,{children:`any`}),` of your lines counts —\nwhich line you send from doesn’t matter. The check is strictly scoped to your workspace\nand never sees another workspace’s replies.`]})}),`\n`,_jsx(Heading,{level:`3`,id:`request`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:`Skip the follow-up if they replied in the last 7 days`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Just following up — still interested?\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"skipIfReplied\": \"7d\"`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(Heading,{level:`3`,id:`response-when-the-send-is-skipped-200-ok`,children:[`Response when the send is skipped (`,_jsx(_components.code,{children:`200 OK`}),`)`]}),`\n`,_jsxs(_components.p,{children:[`No message is created. `,_jsx(_components.code,{children:`success`}),` is `,_jsx(_components.code,{children:`true`}),` (the request was handled — do `,_jsx(_components.strong,{children:`not`}),` retry)\nand `,_jsx(_components.code,{children:`skippedOnly`}),` distinguishes it from a real send.`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 200 — skipped because the contact already replied`,numberOfLines:`9`,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:`9`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"skippedOnly\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"skipReason\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"recipient_replied\"`}),_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:` \"skipMessage\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Skipped: this contact already replied in your workspace within the last 7d. The skipIfReplied gate prevented this send.\"`}),_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:` \"repliedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-06-27T18:40:11.020Z\"`}),_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:`#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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"667f1f77bcf86cd799439012\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Branch on `,_jsx(_components.code,{children:`skippedOnly === true`}),` and treat it as a successful no-op. When the contact\nhas `,_jsx(_components.strong,{children:`not`}),` replied (or replied outside the window), the request proceeds exactly as a\nnormal send and returns the usual `,_jsx(_components.code,{children:`201`}),` response.`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`An unrecognized `,_jsx(_components.code,{children:`skipIfReplied`}),` value returns `,_jsx(_components.strong,{children:`400`}),` with\n`,_jsx(_components.code,{children:`code: \"INVALID_SKIP_IF_REPLIED\"`}),`. Use `,_jsx(_components.code,{children:`true`}),`, `,_jsx(_components.code,{children:`false`}),`, or one of the documented\nwindow strings.`]})}),`\n`,_jsxs(_components.p,{children:[`Every decision is logged internally (`,_jsx(_components.code,{children:`message.api.skipped_replied`}),`,\n`,_jsx(_components.code,{children:`message.api.skip_if_replied_passed`}),`, `,_jsx(_components.code,{children:`message.api.skip_if_replied_invalid`}),`) under your\n`,_jsx(_components.code,{children:`correlationId`}),`, so you can audit exactly why a send was or wasn’t suppressed.`]}),`\n`,_jsx(Heading,{level:`3`,id:`a-queued-message-is-checked-again-before-it-sends`,children:`A queued message is checked again before it sends`}),`\n`,_jsxs(_components.p,{children:[_jsx(_components.code,{children:`skipIfReplied`}),` is evaluated when you call the API `,_jsx(_components.strong,{children:`and again right before the message\nis sent`}),`. If a message is waiting — for a `,_jsx(_components.code,{children:`scheduledDate`}),`, a send window, a line limit,\na line that is down, or a `,_jsx(_components.code,{children:`respectGap`}),` hold — and the contact replies in the meantime,\nthe message is `,_jsx(_components.strong,{children:`cancelled`}),` instead of sent (its status becomes `,_jsx(_components.code,{children:`cancelled`}),`).`]}),`\n`,_jsxs(_components.p,{children:[`With a window value such as `,_jsx(_components.code,{children:`\"1h\"`}),`, the second check looks back from the moment of\nsending, not from when you made the request.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`keep-the-wait-between-follow-ups`,children:`Keep the wait between follow-ups`}),`\n`,_jsx(_components.p,{children:`Automations usually space follow-ups out: message 1, wait, message 2. If message 1 goes\nout late — held by a send window, a line limit, pacing, or a line that was briefly\ndown — message 2 can land right behind it and the wait you designed disappears.`}),`\n`,_jsxs(_components.p,{children:[`Set `,_jsx(_components.code,{children:`respectGap: true`}),` on the follow-up to keep that wait.`]}),`\n`,_jsx(Heading,{level:`3`,id:`how-the-hold-is-calculated`,children:`How the hold is calculated`}),`\n`,_jsx(_components.p,{children:`Tuco looks at the most recent message already sent to the same contact in your\nworkspace and holds the new one until:`}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`previous message's actual send time + (this request's time − previous request's time)`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsxs(_components.p,{children:[`So the gap between your two `,_jsx(_components.strong,{children:`API calls`}),` is preserved, measured from when the previous\nmessage `,_jsx(_components.strong,{children:`really went out`}),`. It does not use `,_jsx(_components.code,{children:`scheduledDate`}),`.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{}),_jsx(_components.th,{children:`Request made`}),_jsx(_components.th,{children:`Actually sent`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Message 1`}),_jsx(_components.td,{\"data-numeric\":`true`,children:`10:00:00`}),_jsx(_components.td,{children:`10:07:00 (held 7 minutes)`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Message 2, `,_jsx(_components.code,{children:`respectGap: true`})]}),_jsx(_components.td,{children:`10:05:00 (5 minutes after message 1)`}),_jsx(_components.td,{children:`held until 10:12:00, then sent`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Message 2, no `,_jsx(_components.code,{children:`respectGap`})]}),_jsx(_components.td,{\"data-numeric\":`true`,children:`10:05:00`}),_jsx(_components.td,{children:`sent as soon as it is free — right behind message 1`})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`request-2`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:`Follow-up that keeps its spacing`,numberOfLines:`8`,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:`8`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Just checking you saw my last note\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"respectGap\": true`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`The response is the usual `,_jsx(_components.code,{children:`201`}),`. When the message is being held, `,_jsx(_components.code,{children:`status`}),` is\n`,_jsx(_components.code,{children:`\"scheduled\"`}),` and `,_jsx(_components.code,{children:`scheduledDate`}),` is the time it is held until:`]}),`\n`,_jsx(CodeBlock,{filename:`HTTP 201 — held to keep the gap`,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:` \"success\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:`\"scheduled\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace83280fadae5820a37ae4\"`}),_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:`: {`})]}),`\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:`\"6ace83bd0fadae5820a37b01\"`}),_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:`\"Just checking you saw my last note\"`}),_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:` \"messageType\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"imessage\"`}),_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:`\"sent\"`}),_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:` \"recipientPhone\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"+12025551234\"`}),_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:` \"fromLineId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace832115ae149cfdf83db7\"`}),_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:` \"leadId\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"6ace83280fadae5820a37ae4\"`}),_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:`\"scheduled\"`}),_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:` \"respectGap\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0550AE`,\"--shiki-dark\":`#569CD6`},children:`true`}),_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:` \"scheduledDate\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T19:18:29.579Z\"`}),_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:` \"createdAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T19:17:17.937Z\"`}),_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:` \"updatedAt\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"2026-10-13T19:17:18.274Z\"`})]}),`\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:`3`,id:`what-to-expect`,children:`What to expect`}),`\n`,_jsxs(_components.ul,{children:[`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`Works without a send window.`}),` `,_jsx(_components.code,{children:`respectGap`}),` needs no `,_jsx(_components.code,{children:`sendWindowStart`}),`,\n`,_jsx(_components.code,{children:`sendWindowEnd`}),` or `,_jsx(_components.code,{children:`timezone`}),`.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`It is per contact, across all your lines.`}),` The previous message can have gone out\nfrom a different line. Messages to other contacts are never affected.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The first message to a contact is never held`}),` — there is nothing to space it from.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`“Previous message” means the latest one sent to that contact`}),`, whatever sent it. A\nmanual reply from the inbox in between becomes the new reference point.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`The gap is a minimum.`}),` Held messages are released about once a minute, so the real\nspacing is the gap plus up to a minute.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`A send window still wins.`}),` If the hold ends outside `,_jsx(_components.code,{children:`sendWindowStart`}),`–`,_jsx(_components.code,{children:`sendWindowEnd`}),`\n(or on a day not in `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),`), the message waits for the window to open.`]}),`\n`,_jsxs(_components.li,{children:[_jsx(_components.strong,{children:`If the earlier message went out on time, nothing changes`}),` — the follow-up sends\nnormally.`]}),`\n`,_jsxs(_components.li,{children:[_jsxs(_components.strong,{children:[`Combine it with `,_jsx(_components.code,{children:`skipIfReplied`})]}),` to drop the follow-up if the contact answers while\nit is being held.`]}),`\n`,_jsxs(_components.li,{children:[`Only `,_jsx(_components.code,{children:`true`}),` or `,_jsx(_components.code,{children:`\"true\"`}),` turn it on. Any other value is treated as off.`]}),`\n`]}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`respectGap`}),` spaces a follow-up from a message that has `,_jsx(_components.strong,{children:`already been sent`}),`. If the\nearlier message is still waiting when the follow-up arrives, there is nothing to measure\nfrom yet, so `,_jsx(_components.code,{children:`respectGap`}),` does not hold the follow-up. With several lines, if the\nearlier message is pinned to a line that is down (`,_jsx(_components.code,{children:`fromLineId`}),`)\nand the follow-up is not pinned, the follow-up can go out first on a healthy line —\npin both to the same line, or leave both unpinned, to avoid that.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`send-window-and-allowed-days`,children:`Send window and allowed days`}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`You send`}),_jsx(_components.th,{children:`What happens`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`No window fields`}),_jsx(_components.td,{children:`Sends immediately (subject to line limits and pacing).`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`sendWindowStart`}),` + `,_jsx(_components.code,{children:`sendWindowEnd`}),`, inside the window`]}),_jsx(_components.td,{children:`Sends immediately.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`sendWindowStart`}),` + `,_jsx(_components.code,{children:`sendWindowEnd`}),`, outside the window`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`201`}),`, `,_jsx(_components.code,{children:`status: \"scheduled\"`}),`, held until the window next opens.`]})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{children:`Only one of the two`}),_jsx(_components.td,{children:`The window is ignored.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`No `,_jsx(_components.code,{children:`timezone`})]}),_jsxs(_components.td,{children:[`Workspace timezone, then `,_jsx(_components.code,{children:`America/New_York`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`An unknown `,_jsx(_components.code,{children:`timezone`}),`, or an abbreviation like `,_jsx(_components.code,{children:`\"EST\"`})]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`400 INVALID_TIMEZONE`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`allowedDaysOfWeek`}),` without both window times`]}),_jsx(_components.td,{children:`The day list is ignored.`})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`A time that isn’t `,_jsx(_components.code,{children:`HH:mm`}),` (e.g. `,_jsx(_components.code,{children:`\"9am\"`}),`, `,_jsx(_components.code,{children:`\"25:00\"`}),`)`]}),_jsxs(_components.td,{\"data-numeric\":`true`,children:[_jsx(_components.code,{children:`400`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Start not earlier than end (`,_jsx(_components.code,{children:`\"22:00\"`}),`–`,_jsx(_components.code,{children:`\"06:00\"`}),`, `,_jsx(_components.code,{children:`\"09:00\"`}),`–`,_jsx(_components.code,{children:`\"09:00\"`}),`)`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`400 INVALID_SEND_WINDOW`}),`.`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[_jsx(_components.code,{children:`allowedDaysOfWeek`}),` that isn’t whole numbers `,_jsx(_components.code,{children:`0`}),`–`,_jsx(_components.code,{children:`6`}),` (e.g. `,_jsx(_components.code,{children:`[7]`}),`, `,_jsx(_components.code,{children:`[1.5]`}),`, `,_jsx(_components.code,{children:`\"monday\"`}),`)`]}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`400 INVALID_ALLOWED_DAYS`}),`.`]})]})]})]}),`\n`,_jsx(Heading,{level:`3`,id:`request-3`,children:`Request`}),`\n`,_jsx(CodeBlock,{filename:`Weekdays, 9am–6pm New York`,numberOfLines:`11`,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:`11`,children:[_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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"`}),_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`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"message\": \"Morning! Quick question about your quote.\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"recipientPhone\": \"+12025551234\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowStart\": \"09:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"sendWindowEnd\": \"18:00\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"timezone\": \"America/New_York\",`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` \"allowedDaysOfWeek\": [1, 2, 3, 4, 5]`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` }'`})}),`\n`]})})}),`\n`,_jsxs(_components.p,{children:[`Inside the window on an allowed day the response is the normal `,_jsx(_components.code,{children:`201`}),` with\n`,_jsx(_components.code,{children:`status: \"sent\"`}),`. Outside it you get `,_jsx(_components.code,{children:`201`}),` with `,_jsx(_components.code,{children:`status: \"scheduled\"`}),` — see\n`,_jsx(_components.a,{href:`#accepted-but-held`,children:`Accepted but held`}),`.`]}),`\n`,_jsxs(Heading,{level:`3`,id:`rejected-values-400`,children:[`Rejected values (`,_jsx(_components.code,{children:`400`}),`)`]}),`\n`,_jsxs(CodeGroup,{children:[_jsx(CodeBlock,{filename:`Overnight window`,numberOfLines:`4`,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:`4`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`22:00`}),_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:`06:00`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`) are not supported; use `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`00:00`}),_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:`23:59`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` to send at any hour.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_SEND_WINDOW\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Timezone abbreviation`,numberOfLines:`4`,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:`4`,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:` \"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:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`EST`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`America/New_York`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` or `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Europe/London`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`, or omit timezone to use your workspace timezone.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_TIMEZONE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Unknown timezone`,numberOfLines:`4`,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:`4`,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:` \"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:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Mars/Phobos`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` is not a recognized timezone. Use an IANA timezone name such as `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`America/New_York`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:` or `}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`Europe/London`}),_jsx(_components.span,{style:{color:`#CF222E`,\"--shiki-dark\":`#D7BA7D`},children:`\\\\\"`}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`, or omit timezone to use your workspace timezone.\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_TIMEZONE\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Bad day list`,numberOfLines:`4`,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:`4`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].\"`}),_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:` \"code\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"INVALID_ALLOWED_DAYS\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})}),_jsx(CodeBlock,{filename:`Bad time format`,numberOfLines:`3`,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:`3`,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:` \"error\"`}),_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`: `}),_jsx(_components.span,{style:{color:`#0A3069`,\"--shiki-dark\":`#CE9178`},children:`\"Invalid time format. sendWindowStart and sendWindowEnd must be in HH:mm format (e.g., 09:00, 17:00)\"`})]}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{style:{color:`#1F2328`,\"--shiki-dark\":`#D4D4D4`},children:`}`})}),`\n`]})})})]}),`\n`,_jsxs(_components.p,{children:[`Day numbers sent as strings (`,_jsx(_components.code,{children:`[\"1\",\"2\",\"3\"]`}),`) are accepted and stored as numbers.`]}),`\n`,_jsx(Heading,{level:`3`,id:`the-window-is-checked-again-every-time-the-message-is-about-to-send`,children:`The window is checked again every time the message is about to send`}),`\n`,_jsxs(_components.p,{children:[`The window you put on a message is checked when you call the API `,_jsx(_components.strong,{children:`and again each time\nTuco is about to send it`}),`. So if something delays the message — a failed attempt that\nis retried a few minutes later, a line that was briefly down, a daily or hourly limit —\nand the window has closed in the meantime, the message waits for the window to open\nagain instead of going out late. `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),` is applied the same way: on a day\nthat isn’t allowed, the message waits for `,_jsx(_components.code,{children:`sendWindowStart`}),` on the next allowed day.`]}),`\n`,_jsxs(_components.p,{children:[`This applies to every message sent through the API that carries its own\n`,_jsx(_components.code,{children:`sendWindowStart`}),` and `,_jsx(_components.code,{children:`sendWindowEnd`}),`.`]}),`\n`,_jsxs(_components.p,{children:[`These checks only run when a send window is set. Without `,_jsx(_components.code,{children:`sendWindowStart`}),` and\n`,_jsx(_components.code,{children:`sendWindowEnd`}),`, `,_jsx(_components.code,{children:`timezone`}),` and `,_jsx(_components.code,{children:`allowedDaysOfWeek`}),` are ignored.`]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`errors`,children:`Errors`}),`\n`,_jsxs(_components.p,{children:[`Errors are returned only for `,_jsx(_components.strong,{children:`validation failures`}),` — never for pre-send checks.`]}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Status`}),_jsx(_components.th,{children:`When`}),_jsx(_components.th,{children:`Example`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Message and attachments both empty`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Message and attachmentUrls cannot both be empty\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`Invalid `,_jsx(_components.code,{children:`messageType`})]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Invalid messageType. Must be email, sms, or imessage\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`No active lines + no `,_jsx(_components.code,{children:`fromLineId`})]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"No active lines in workspace...\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`No recipient anywhere`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Either recipientEmail or recipientPhone is required...\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`Unrecognized `,_jsx(_components.code,{children:`skipIfReplied`}),` value`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_SKIP_IF_REPLIED\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`{firstName}`}),`/`,_jsx(_components.code,{children:`{lastName}`}),` has no value and no fallback, an unfilled non-Tuco token (`,_jsx(_components.code,{children:`{{contact_name}}`}),`), or a name expanded to nothing`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Malformed message: name template variable is empty...\", \"code\": \"MALFORMED_NAME_TEMPLATE\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Any other template variable has no value and no fallback`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Template variable(s) have no value...\", \"code\": \"TEMPLATE_VARIABLE_UNRESOLVED\", \"unresolvedVariables\": [\"line_email\"] }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`voiceNote: true`}),` with no attachment`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"voiceNote: true needs an audio attachment...\", \"code\": \"VOICE_NOTE_NO_ATTACHMENT\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`voiceNote: true`}),` with a non-audio attachment`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"voiceNote: true needs a direct link to an audio file...\", \"code\": \"VOICE_NOTE_NOT_AUDIO\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`fromLineId`}),` is not a line in your workspace`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"The specified line does not belong to this workspace.\", \"code\": \"LINE_NOT_FOUND\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`More than 2 attachments`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Maximum 2 attachments per message\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Attachment URL belongs to another workspace`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Attachment URL does not belong to this organization\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Every attachment is unreachable and there is no text`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"No attachment is sendable and the message text is empty...\", \"code\": \"ATTACHMENT_UNSENDABLE_NO_TEXT\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`recipientPhone`}),` can’t be dialled (bad NANP area/exchange code)`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"That number can't receive messages (exchange code 019 cannot start with 0 or 1). Message not sent.\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[`Bad `,_jsx(_components.code,{children:`scheduledDate`}),` or `,_jsx(_components.code,{children:`sendWindowStart`}),`/`,_jsx(_components.code,{children:`sendWindowEnd`}),` format`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Invalid scheduledDate format\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Send window start not earlier than end`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_SEND_WINDOW\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsx(_components.td,{children:`Timezone abbreviation or unknown timezone (with a send window)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_TIMEZONE\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`400`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`allowedDaysOfWeek`}),` not whole numbers 0–6 (with a send window)`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"...\", \"code\": \"INVALID_ALLOWED_DAYS\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`401`})}),_jsx(_components.td,{children:`Invalid or missing API key`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Unauthorized\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`402`})}),_jsx(_components.td,{children:`Subscription past due (workspace read-only)`}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"READ_ONLY\", \"code\": \"READ_ONLY\", \"reason\": \"past_due\" }`})})]}),_jsxs(_components.tr,{children:[_jsx(_components.td,{\"data-numeric\":`true`,children:_jsx(_components.code,{children:`404`})}),_jsxs(_components.td,{children:[_jsx(_components.code,{children:`leadId`}),` provided but not found`]}),_jsx(_components.td,{children:_jsx(_components.code,{children:`{ \"error\": \"Lead not found or access denied\" }`})})]})]})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`what-happens-after-the-api-call`,children:`What happens after the API call`}),`\n`,_jsxs(Steps,{children:[_jsx(Step,{title:`Message created`,children:_jsxs(_components.p,{children:[`Tuco inserts a record in the `,_jsx(_components.code,{children:`messages`}),` collection with status `,_jsx(_components.code,{children:`pending`}),`\n(or `,_jsx(_components.code,{children:`scheduled`}),` if `,_jsx(_components.code,{children:`scheduledDate`}),` is provided).`]})}),_jsx(Step,{title:`Pre-send checks (worker)`,children:_jsxs(_components.p,{children:[`The worker checks line limits, time window, device gap, and contact gap.\nIf any fail, the message stays `,_jsx(_components.strong,{children:`queued`}),` and is retried later — not failed.`]})}),_jsxs(Step,{title:`Availability check`,children:[_jsxs(_components.p,{children:[`If the workspace has a line with Private API, Tuco checks whether the\nrecipient supports iMessage. If not → status becomes `,_jsx(_components.code,{children:`fallback`}),` and\nfallback SMS fires (when configured).`]}),_jsx(Note,{children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`forceFallback: true`}),` `,_jsx(_components.strong,{children:`skips this step entirely`}),` — the message goes\nstraight to the configured fallback channel and never runs an availability\ncheck (so it doesn’t consume the availability-check budget or line cap).`]})})]}),_jsx(Step,{title:`Send`,children:_jsxs(_components.p,{children:[`For individual messages: up to `,_jsx(_components.strong,{children:`5 send attempts`}),` with delivery\nverification between each (polling for up to 90 seconds).`]})}),_jsx(Step,{title:`Outcome`,children:_jsxs(_components.p,{children:[_jsx(_components.code,{children:`sent`}),` → appears in Unibox + webhook fires.\n`,_jsx(_components.code,{children:`failed`}),` → error recorded + optional fallback SMS.\n`,_jsx(_components.code,{children:`delivered`}),` → confirmed later via device callbacks.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`lead-resolution`,children:`Lead resolution`}),`\n`,_jsxs(_components.p,{children:[`When you send without a `,_jsx(_components.code,{children:`leadId`}),`, Tuco resolves the recipient automatically:`]}),`\n`,_jsxs(AccordionGroup,{children:[_jsx(Accordion,{title:`Lead found by phone/email`,id:`lead-found-by-phone-email`,children:_jsxs(_components.p,{children:[`If an existing lead in your workspace matches the `,_jsx(_components.code,{children:`recipientPhone`}),` or\n`,_jsx(_components.code,{children:`recipientEmail`}),`, the message is linked to that lead. Any `,_jsx(_components.code,{children:`altPhone`}),`/`,_jsx(_components.code,{children:`altEmail`}),`\nfields you pass will `,_jsx(_components.strong,{children:`update`}),` the lead (merge, not overwrite).`]})}),_jsx(Accordion,{title:`New lead created (Quick Sends)`,id:`new-lead-created-quick-sends`,children:_jsxs(_components.p,{children:[`If no matching lead exists, Tuco creates one under a list called `,_jsx(_components.strong,{children:`“Quick Sends”`}),`\n(created automatically if it doesn’t exist). Alt contact fields are stored on\nthe new lead.`]})}),_jsx(Accordion,{title:`leadId provided`,id:`leadid-provided`,children:_jsxs(_components.p,{children:[`The lead must exist in your workspace. The message is linked to it.\n`,_jsx(_components.code,{children:`recipientPhone`}),`/`,_jsx(_components.code,{children:`recipientEmail`}),` from the body override the lead’s stored\ncontact for this specific send.`]})})]}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`alt-contact-fields`,children:`Alt contact fields`}),`\n`,_jsxs(_components.p,{children:[`When you pass `,_jsx(_components.code,{children:`altPhone1`}),`–`,_jsx(_components.code,{children:`altPhone3`}),` or `,_jsx(_components.code,{children:`altEmail1`}),`–`,_jsx(_components.code,{children:`altEmail3`}),`, they are\nstored on the `,_jsx(_components.strong,{children:`lead`}),` (not the message). The worker uses them as fallback\naddresses when the primary address fails the iMessage availability check.`]}),`\n`,_jsx(_components.p,{children:_jsxs(_components.strong,{children:[`Priority order for `,_jsx(_components.code,{children:`messageType: \"imessage\"`}),`:`]})}),`\n`,_jsx(CodeBlock,{numberOfLines:`2`,language:`text`,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:`text`,children:_jsxs(_components.code,{language:`text`,numberOfLines:`2`,children:[_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{children:`phone → altPhone1 → altPhone2 → altPhone3 → email → altEmail1 → altEmail2 → altEmail3`})}),`\n`,_jsx(_components.span,{className:`line`,children:_jsx(_components.span,{})})]})})}),`\n`,_jsx(Warning,{children:_jsxs(_components.p,{children:[`Alt fields are `,_jsx(_components.strong,{children:`merged`}),` onto the lead. If a lead already has `,_jsx(_components.code,{children:`altPhone1`}),` set\nand you send a new message without `,_jsx(_components.code,{children:`altPhone1`}),`, the existing value is preserved.\nOnly explicitly provided fields are overwritten.`]})}),`\n`,_jsx(_components.hr,{}),`\n`,_jsx(Heading,{level:`2`,id:`fallback-sms-on-failure`,children:`Fallback SMS on failure`}),`\n`,_jsx(_components.p,{children:`By default, when a message fails (technical error), no SMS fallback is sent.`}),`\n`,_jsx(_components.p,{children:`To enable:`}),`\n`,_jsxs(_components.ol,{children:[`\n`,_jsxs(_components.li,{children:[`Configure Twilio on your workspace (`,_jsx(_components.code,{children:`GET /api/workspace/fallback-config`}),`).`]}),`\n`,_jsxs(_components.li,{children:[`Set `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: true`}),` in the request body (per-message) or\non the workspace (applies to all messages).`]}),`\n`]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Setting `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: true`}),` without a configured fallback is `,_jsx(_components.strong,{children:`not an error`}),`.\nThe request returns `,_jsx(_components.code,{children:`201`}),` and the iMessage send goes ahead as normal — there is simply no\nSMS to fall back to if it fails. Read\n`,_jsx(_components.a,{href:`/api-reference/endpoint/fallback-config`,children:_jsx(_components.code,{children:`GET /api/workspace/fallback-config`})}),` to confirm\na fallback is set up before you rely on it.`]})}),`\n`,_jsxs(Table,{children:[_jsx(_components.thead,{children:_jsxs(_components.tr,{children:[_jsx(_components.th,{children:`Scenario`}),_jsx(_components.th,{children:`Fallback SMS fires?`})]})}),_jsxs(_components.tbody,{children:[_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`fallback`}),` (no iMessage), Twilio configured`]}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`Yes`}),` — always`]})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`failed`}),`, `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: true`}),`, Twilio configured`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`Yes`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`failed`}),`, `,_jsx(_components.code,{children:`sendFallbackSmsOnFailed: false`}),` (default)`]}),_jsx(_components.td,{children:_jsx(_components.strong,{children:`No`})})]}),_jsxs(_components.tr,{children:[_jsxs(_components.td,{children:[`Status = `,_jsx(_components.code,{children:`failed`}),`, flag is `,_jsx(_components.code,{children:`true`}),` but no fallback configured`]}),_jsxs(_components.td,{children:[_jsx(_components.strong,{children:`No`}),` — the send is accepted, there is just nothing to fall back to`]})]})]})]}),`\n`,_jsx(Note,{children:_jsxs(_components.p,{children:[`Fallback SMS requires `,_jsx(_components.code,{children:`recipientPhone`}),` on the message. Email-only messages\nwill not trigger fallback SMS.`]})})]})}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 Message","api":"POST /api/messages","description":"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.","href":"/api-reference/endpoint/send-message"}}}},"mdxExtracts":{"tableOfContents":[{"title":"Authentication","slug":"authentication","depth":2,"children":[]},{"title":"Request body","slug":"request-body","depth":2,"children":[{"title":"Alternate contact fields","slug":"alternate-contact-fields","depth":3,"children":[]},{"title":"Scheduling \u0026 time window","slug":"scheduling-\u0026-time-window","depth":3,"children":[]},{"title":"Fallback \u0026 advanced","slug":"fallback-\u0026-advanced","depth":3,"children":[]}]},{"title":"Examples","slug":"examples","depth":2,"children":[]},{"title":"Send straight from a GoHighLevel webhook","slug":"send-straight-from-a-gohighlevel-webhook","depth":2,"children":[]},{"title":"Response","slug":"response","depth":2,"children":[{"title":"Success (201 Created or 200 OK when duplicate lead used)","slug":"success-201-created-or-200-ok-when-duplicate-lead-used","depth":3,"children":[]},{"title":"Accepted but held","slug":"accepted-but-held","depth":3,"children":[]},{"title":"Status values","slug":"status-values","depth":3,"children":[]}]},{"title":"Duplicate protection","slug":"duplicate-protection","depth":2,"children":[]},{"title":"Skip if the contact already replied","slug":"skip-if-the-contact-already-replied","depth":2,"children":[{"title":"Values","slug":"values","depth":3,"children":[]},{"title":"Request","slug":"request","depth":3,"children":[]},{"title":"Response when the send is skipped (200 OK)","slug":"response-when-the-send-is-skipped-200-ok","depth":3,"children":[]},{"title":"A queued message is checked again before it sends","slug":"a-queued-message-is-checked-again-before-it-sends","depth":3,"children":[]}]},{"title":"Keep the wait between follow-ups","slug":"keep-the-wait-between-follow-ups","depth":2,"children":[{"title":"How the hold is calculated","slug":"how-the-hold-is-calculated","depth":3,"children":[]},{"title":"Request","slug":"request-2","depth":3,"children":[]},{"title":"What to expect","slug":"what-to-expect","depth":3,"children":[]}]},{"title":"Send window and allowed days","slug":"send-window-and-allowed-days","depth":2,"children":[{"title":"Request","slug":"request-3","depth":3,"children":[]},{"title":"Rejected values (400)","slug":"rejected-values-400","depth":3,"children":[]},{"title":"The window is checked again every time the message is about to send","slug":"the-window-is-checked-again-every-time-the-message-is-about-to-send","depth":3,"children":[]}]},{"title":"Errors","slug":"errors","depth":2,"children":[]},{"title":"What happens after the API call","slug":"what-happens-after-the-api-call","depth":2,"children":[]},{"title":"Lead resolution","slug":"lead-resolution","depth":2,"children":[]},{"title":"Alt contact fields","slug":"alt-contact-fields","depth":2,"children":[]},{"title":"Fallback SMS on failure","slug":"fallback-sms-on-failure","depth":2,"children":[]}],"codeExamples":{"request":{"type":"RequestExample","children":[{"filename":"Minimal","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=\"7\">\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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"\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:#0A3069;--shiki-dark:#CE9178\"> \"message\": \"Hi from Tuco.\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"recipientPhone\": \"+12025551234\"\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":"Send window, weekdays","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=\"11\">\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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"\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:#0A3069;--shiki-dark:#CE9178\"> \"message\": \"Morning! Quick question about your quote.\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"recipientPhone\": \"+12025551234\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"sendWindowStart\": \"09:00\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"sendWindowEnd\": \"18:00\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"timezone\": \"America/New_York\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"allowedDaysOfWeek\": [1, 2, 3, 4, 5]\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":"Follow-up, keep the gap","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=\"8\">\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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"\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:#0A3069;--shiki-dark:#CE9178\"> \"message\": \"Just checking you saw my last note\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"recipientPhone\": \"+12025551234\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"respectGap\": true\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":"Gap + skip if replied","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=\"12\">\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://app.tuco.ai/api/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 tuco_xxxxxxxxxxxxx\"\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:#0A3069;--shiki-dark:#CE9178\"> \"message\": \"Still interested? Happy to hold your slot.\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"recipientPhone\": \"+12025551234\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"respectGap\": true,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"skipIfReplied\": true,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"sendWindowStart\": \"09:00\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"sendWindowEnd\": \"18:00\",\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> \"timezone\": \"America/New_York\"\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> }'\u003c/span>\u003c/span>\n\u003c/code>\u003c/pre>"}],"attributes":[]},"response":{"type":"ResponseExample","children":[{"filename":"201 Sent","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=\"18\">\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\"> \"success\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">true\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\">\"sent\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"leadId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"69b2c41d352a78479d2c623b\"\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>\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\">\"69b344bc6dae1d942ece4d0e\"\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\">\"Hi from Tuco.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"messageType\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"imessage\"\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\">\"sent\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"recipientPhone\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"+12025551234\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"fromLineId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"69ab427ac1feb77d7f46462e\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"leadId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"69b2c41d352a78479d2c623b\"\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\">\"sent\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"createdAt\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-13T16:57:58.468Z\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"updatedAt\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-13T16:58:00.016Z\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"sentAt\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-13T16:58:00.016Z\"\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>"},{"filename":"201 Held","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=\"24\">\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\"> \"success\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">true\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\">\"scheduled\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"leadId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"6ace9f58e350b3be067aef80\"\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>\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\">\"6ace9f59e350b3be067aef81\"\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\">\"Morning! Quick question about your quote.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"messageType\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"imessage\"\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\">\"sent\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"recipientPhone\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"+12025551234\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"fromLineId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"6ace9f5622264a6eecd4b333\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"leadId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"6ace9f58e350b3be067aef80\"\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\">\"scheduled\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"scheduledDate\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-14T13:00:00.000Z\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"settings\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: {\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"timezone\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"America/New_York\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"sendWindowStart\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"09:00\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"sendWindowEnd\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"18:00\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"allowedDaysOfWeek\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: [\u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">1\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">2\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">3\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">4\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">, \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#B5CEA8\">5\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:#116329;--shiki-dark:#9CDCFE\"> \"createdAt\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-13T23:15:05.519Z\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"updatedAt\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-13T23:15:05.771Z\"\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>"},{"filename":"200 Skipped","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=\"9\">\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\"> \"success\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">true\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"skippedOnly\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0550AE;--shiki-dark:#569CD6\">true\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"skipReason\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"recipient_replied\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"skipMessage\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"Skipped: this contact already replied in your workspace at any time. The skipIfReplied gate prevented this send.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"repliedAt\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"2026-10-13T16:59:48.131Z\"\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:#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\"> \"leadId\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"6ace637e30e2d7468c7bf397\"\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":"400 Window","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=\"4\">\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\"> \"error\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"sendWindowStart must be earlier than sendWindowEnd. Overnight windows (e.g. \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">22:00\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\">06:00\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">) are not supported; use \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">00:00\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\">23:59\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> to send at any hour.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"code\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"INVALID_SEND_WINDOW\"\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":"400 Timezone","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=\"4\">\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\"> \"error\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \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\">EST\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> is an abbreviation with a fixed offset that ignores daylight saving. Use an IANA timezone name such as \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">America/New_York\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\"> or \u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">Europe/London\u003c/span>\u003cspan style=\"color:#CF222E;--shiki-dark:#D7BA7D\">\\\"\u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">, or omit timezone to use your workspace timezone.\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"code\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"INVALID_TIMEZONE\"\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":"400 Days","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=\"4\">\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\"> \"error\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"allowedDaysOfWeek must be an array of whole numbers from 0 (Sunday) to 6 (Saturday), e.g. [1,2,3,4,5].\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">,\u003c/span>\u003c/span>\n\u003cspan class=\"line\">\u003cspan style=\"color:#116329;--shiki-dark:#9CDCFE\"> \"code\"\u003c/span>\u003cspan style=\"color:#1F2328;--shiki-dark:#D4D4D4\">: \u003c/span>\u003cspan style=\"color:#0A3069;--shiki-dark:#CE9178\">\"INVALID_ALLOWED_DAYS\"\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":[]}},"endpoint":{"title":"Send Message","path":"/api/messages","servers":[{"url":"https://app.tuco.ai"}],"method":"post","request":{"security":[{"title":"Bearer Auth","parameters":{"header":{"Authorization":{"type":"http","scheme":"bearer","description":"Bearer authentication header of the form `Bearer \u003ctoken>`, where `\u003ctoken>` is your auth token."}},"query":{},"cookie":{}}}],"parameters":{"query":{},"header":{},"cookie":{},"path":{}},"body":{"application/json":{"schemaArray":[{"type":"object","properties":{"message":[{"type":"string","description":"The text content to send. Required unless `attachmentUrls` is provided (you can send attachments only, or message + attachments). Template variables are filled in at send time — on every send attempt, against the line that actually sends the message (so retries, scheduled or send-window-deferred messages, and round-robin all name the right line) and the contact’s current data. The same variables campaigns use: Variable Filled with `{line_first_name}` First name of the sending line `{line_name}` Sending line’s first + last name `{line_email}` · `{line_phone}` Sending line’s email · phone `{firstName}` `{lastName}` `{companyName}` `{email}` `{phone}` `{jobTitle}` `{notes}` The contact’s fields `{cf:Field Name}` A contact custom field `{yourVariable}` Your workspace variable’s default (Settings → Variables) Single `{x}` or double `{{x}}` braces, any case. Add a fallback after a pipe: `{firstName|there}` . Variables work inside links too ( `https://cal.com/{line_first_name}` ). Anything in braces that is not one of these is sent exactly as written. A blank is never sent. If a variable has no value and no fallback, the request is rejected: an empty `{firstName}` / `{lastName}` → `400 MALFORMED_NAME_TEMPLATE` ; any other → `400 TEMPLATE_VARIABLE_UNRESOLVED` (the response lists them in `unresolvedVariables` ). Text you already filled in yourself is unaffected; an unfilled token from another tool (e.g. `{{contact_name}}` , `{name}` ) or a greeting whose name expanded to nothing ( `\"Hey , …\"` ) is still rejected with `MALFORMED_NAME_TEMPLATE` ."}],"attachmentUrls":[{"type":"array","items":[{"type":"string"}],"description":"Optional array of URLs (max 2, max 25 MB each). When provided, `message` can be empty. Supported formats: images (PNG, JPG, GIF, WebP, HEIC), video (MP4, MOV), audio (MP3, M4A, WAV, AAC, OGG, CAF), and PDF. Supported sources: any public URL, UploadThing/Blob URLs that belong to your workspace. To send audio as a native iMessage voice note (the waveform bubble), add `voiceNote: true` . The audio must be a direct, publicly reachable file URL — a YouTube or Drive page is rejected with a 400. Easiest source is Leads → Uploads ( `/leads?tab=uploads` ). See Voice note requirements . With an attachment or voice note, you get `status: \"sent\"` right away and it starts sending. If it fails, you get a `message.failed` webhook for the same `message._id` ."}],"attachmentNames":[{"type":"array","items":[{"type":"string"}],"description":"Optional display names for the attachments, aligned 1:1 with `attachmentUrls` . Omit and Tuco uses the filename from the URL."}],"voiceNote":[{"type":"boolean","description":"Send a single audio attachment as a native iMessage voice note (the waveform bubble) instead of a generic audio file. Tuco transcodes the audio for you. Requires exactly one audio attachment in `attachmentUrls` — see Send with Attachments for the full rules."}],"recipientPhone":[{"type":"string","description":"The phone number to text, in E.164 format (e.g. `\"+12025551234\"` ). This is how you address almost every send — you do not need a `leadId` . Tuco matches an existing lead on this number, or creates one under the Quick Sends list. Required unless you pass `leadId` or `recipientEmail` ."}],"leadId":[{"type":"string","description":"Send to an existing lead using their stored contact details. When provided together with `recipientPhone` , the body’s phone number is the send-to address and the lead is used for linking. Required unless you pass `recipientPhone` or `recipientEmail` ."}],"recipientEmail":[{"type":"string","description":"Only useful in two cases: `messageType: \"email\"` , or iMessage to a contact you already know is reachable at that Apple ID. Required unless you pass `recipientPhone` or `leadId` ."}],"messageType":[{"type":"string","description":"Channel to use. When omitted, defaults to `\"imessage\"` . Value Channel Addresses tried (from lead) `\"imessage\"` iMessage via device relay phone → altPhone1-3 → email → altEmail1-3 `\"sms\"` SMS via Twilio phone → altPhone1-3 only `\"email\"` Email email → altEmail1-3 only"}],"fromLineId":[{"type":"string","description":"Tuco line ID to send from. Optional — when omitted, Tuco round-robins across your workspace’s active lines automatically."}],"recipientName":[{"type":"string","description":"Display name for the recipient. Derived from the lead when omitted."}],"altPhone1":[{"type":"string","description":"Alternate phone number 1"}],"altPhone2":[{"type":"string","description":"Alternate phone number 2"}],"altPhone3":[{"type":"string","description":"Alternate phone number 3"}],"altEmail1":[{"type":"string","description":"Alternate email 1"}],"altEmail2":[{"type":"string","description":"Alternate email 2"}],"altEmail3":[{"type":"string","description":"Alternate email 3"}],"scheduledDate":[{"type":"string","description":"ISO 8601 timestamp to send in the future (e.g. `\"2026-10-15T14:30:00Z\"` ). The response `status` is `\"scheduled\"` . If you also set a send window and this time falls outside it, the message is moved to the next time the window is open. A value that can’t be parsed returns `400` ."}],"sendWindowStart":[{"type":"string","description":"Earliest time to send, `HH:mm` 24-hour format (e.g. `\"09:00\"` ), inclusive. Set both `sendWindowStart` and `sendWindowEnd` — if only one is sent, the window is ignored. Outside the window the request still returns `201` with `status: \"scheduled\"` ; the message is held until the window opens. Use `\"00:00\"` – `\"23:59\"` for any hour. Anything that isn’t `HH:mm` returns `400` ."}],"sendWindowEnd":[{"type":"string","description":"Latest time to send, `HH:mm` (e.g. `\"17:00\"` ). The end is exclusive, and it must be later than the start. An overnight window such as `\"22:00\"` – `\"06:00\"` returns `400 INVALID_SEND_WINDOW` ; use `\"00:00\"` – `\"23:59\"` to send at any hour."}],"timezone":[{"type":"string","description":"IANA timezone for the send window (e.g. `\"America/New_York\"` ). Optional. When omitted, your workspace timezone is used (or `America/New_York` if the workspace has none). Use a full name — an abbreviation like `\"EST\"` or an unknown name returns `400 INVALID_TIMEZONE` when a send window is set. `\"UTC\"` is accepted. The timezone is only used together with a send window."}],"allowedDaysOfWeek":[{"type":"array","items":[{"type":"number"}],"description":"Days when sending is allowed, as whole numbers. `0` = Sunday, `6` = Saturday. Example: `[1,2,3,4,5]` for weekdays only. An empty array means every day; any other value returns `400 INVALID_ALLOWED_DAYS` . Only applies together with `sendWindowStart` and `sendWindowEnd` — a day list without hours is ignored. On a day that isn’t allowed, the message waits for `sendWindowStart` on the next allowed day. See Send window and allowed days ."}],"respectGap":[{"type":"boolean","description":"Keep the wait between follow-ups to the same contact. When `true` , and an earlier message to this contact went out late, this message is held so the original spacing is preserved: it waits until the previous message’s actual send time plus the gap between your two API calls. Works on its own — no send window or workspace setting needed. Accepts `true` or `\"true\"` ; any other value is treated as `false` . While held, the response `status` is `\"scheduled\"` . See Keep the wait between follow-ups ."}],"sendFallbackSmsOnFailed":[{"type":"boolean","description":"When `true` , if the message ends in `failed` status (technical error after retries), Tuco sends a fallback SMS via your configured fallback number. If no fallback is configured on the workspace the request is still accepted — the iMessage send proceeds and simply has no SMS to fall back to. Check `GET /api/workspace/fallback-config` first if you need the fallback to actually fire."}],"forceFallback":[{"type":"boolean","description":"When `true` , Tuco skips the iMessage availability check entirely and sends the message straight via your workspace’s configured fallback — Twilio, GHL, or a custom webhook (Settings → When iMessage isn’t available ). Use it when you already know the recipient isn’t on iMessage, or you simply want SMS. The send never touches iMessage, so it does not consume the line’s daily cap or the availability-check budget, and the response status is `\"fallback\"` . If no fallback is configured — or the fallback dispatch fails (e.g. a bad Twilio from-number) — the message is not delivered: the response returns `\"success\": false` with a channel-tagged `error` , and the message is recorded with `\"fallbackSmsStatus\": \"failed\"` . The request itself still succeeds — read the `success` flag in the body rather than relying on the status code. Unlike `sendFallbackSmsOnFailed` (which is reactive — fallback only after an iMessage send fails), `forceFallback` is proactive : it never attempts iMessage in the first place."}],"skipIfReplied":[{"type":"object","properties":{},"description":"Workspace-level reply gate. When set, Tuco suppresses this send if the contact has already replied in your workspace . `false` / `\"false\"` / omitted → always send (default, backward compatible) `true` / `\"true\"` → skip if the contact has ever replied a window string → skip only if they replied within that window: `\"1m\"` , `\"1h\"` , `\"1d\"` , `\"2d\"` , `\"5d\"` , `\"7d\"` , `\"14d\"` , `\"1mo\"` , `\"1yr\"` ( `m` =minute, `h` =hour, `d` =day, `w` =week, `mo` =30 days, `yr` =365 days) Scope is your workspace — a reply to any of your lines counts (not just the sending line). The check never crosses workspaces. On a skip, no message is created and the API returns `200` with `skippedOnly: true` (see Skip if the contact already replied ). The check runs again right before a queued message sends: if the contact replied while it was waiting, it is cancelled instead of sent. An unrecognized value returns `400 INVALID_SKIP_IF_REPLIED` ."}],"batchId":[{"type":"string","description":"Free-form string to group related messages for reporting."}],"correlationId":[{"type":"string","description":"Optional tracing ID. If omitted, Tuco generates one ( `app_…` ). The same ID is preferred from the `x-correlation-id` request header. It flows through every internal log event for this send so you can grep one ID and see the entire request → gate → send → webhook chain. See API Overview → Correlation IDs ."}]}}],"examples":{"example":{"value":{"message":"\u003cstring>","attachmentUrls":["\u003cstring>"],"attachmentNames":["\u003cstring>"],"voiceNote":true,"recipientPhone":"\u003cstring>","leadId":"\u003cstring>","recipientEmail":"\u003cstring>","messageType":"\u003cstring>","fromLineId":"\u003cstring>","recipientName":"\u003cstring>","altPhone1":"\u003cstring>","altPhone2":"\u003cstring>","altPhone3":"\u003cstring>","altEmail1":"\u003cstring>","altEmail2":"\u003cstring>","altEmail3":"\u003cstring>","scheduledDate":"\u003cstring>","sendWindowStart":"\u003cstring>","sendWindowEnd":"\u003cstring>","timezone":"\u003cstring>","allowedDaysOfWeek":[123],"respectGap":true,"sendFallbackSmsOnFailed":true,"forceFallback":true,"skipIfReplied":{},"batchId":"\u003cstring>","correlationId":"\u003cstring>"}}}}}},"response":{"200":{"application/json":{"schemaArray":[{"type":"object","properties":{"success":[{"type":"boolean","description":"`true` when the message was created."}],"status":[{"type":"string","description":"Current status of the message. See the status table below."}],"message":[{"type":"object","properties":{"_id":[{"type":"string","description":"Unique message ID"}],"message":[{"type":"string","description":"Body text"}],"messageType":[{"type":"string","description":"Channel ( `imessage` , `sms` , `email` )"}],"status":[{"type":"string","description":"Lifecycle status"}],"fromLineId":[{"type":"string","description":"Line used to send"}],"recipientPhone":[{"type":"string","description":"Recipient phone"}],"recipientEmail":[{"type":"string","description":"Recipient email"}],"leadId":[{"type":"string","description":"Linked lead ID"}],"scheduledDate":[{"type":"string","description":"When the message will send (if scheduled)"}],"sentAt":[{"type":"string","description":"When actually sent"}],"deliveredAt":[{"type":"string","description":"When delivery confirmed"}],"createdAt":[{"type":"string","description":"Creation timestamp"}]},"description":"The full message document. Key fields:"}]}}],"examples":{"example":{"value":{"success":true,"status":"\u003cstring>","message":{"_id":"\u003cstring>","message":"\u003cstring>","messageType":"\u003cstring>","status":"\u003cstring>","fromLineId":"\u003cstring>","recipientPhone":"\u003cstring>","recipientEmail":"\u003cstring>","leadId":"\u003cstring>","scheduledDate":"\u003cstring>","sentAt":"\u003cstring>","deliveredAt":"\u003cstring>","createdAt":"\u003cstring>"}}}}}}},"deprecated":false}},"jsLinks":[],"subdomain":"tucoai","siteName":"Tuco AI","title":"Send Message - Tuco AI","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-26T20:59:57.309Z","originalFileLocation":"api-reference/endpoint/send-message.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 an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Tuco AI\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/tucoai/pPwoyrnQogjfeGN5/_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/tucoai/pPwoyrnQogjfeGN5/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/tucoai/pPwoyrnQogjfeGN5/_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/tucoai/pPwoyrnQogjfeGN5/_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/tucoai/pPwoyrnQogjfeGN5/_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/tucoai/pPwoyrnQogjfeGN5/_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/tucoai/pPwoyrnQogjfeGN5/_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/tucoai/pPwoyrnQogjfeGN5/_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/tucoai/pPwoyrnQogjfeGN5/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Send Message - Tuco AI\">\u003cmeta data-mint-head property=\"og:description\" content=\"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Tuco AI\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.tuco.ai/api-reference/endpoint/send-message\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://tucoai.mintlify.app/_mintlify/api/og/v2?division=Messages\u0026amp;title=Send+Message\u0026amp;description=Send+an+iMessage%2C+SMS%2C+or+email+to+a+contact+%E2%80%94+the+core+automation+endpoint.+REST+endpoint+in+the+Tuco+AI+iMessage+API+%E2%80%94+bearer-token+auth%2C+JSON.\u0026amp;theme=6ee776b2be11f4145c07cfc0\u0026amp;signature=550669ab0325571b53b03072f43e1c1e3b1b4cd44f97ebd121a32af98ce6397a\">\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 Message - Tuco AI\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://tucoai.mintlify.app/_mintlify/api/og/v2?division=Messages\u0026amp;title=Send+Message\u0026amp;description=Send+an+iMessage%2C+SMS%2C+or+email+to+a+contact+%E2%80%94+the+core+automation+endpoint.+REST+endpoint+in+the+Tuco+AI+iMessage+API+%E2%80%94+bearer-token+auth%2C+JSON.\u0026amp;theme=6ee776b2be11f4145c07cfc0\u0026amp;signature=550669ab0325571b53b03072f43e1c1e3b1b4cd44f97ebd121a32af98ce6397a\">\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/tucoai/pPwoyrnQogjfeGN5/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Tuco AI\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#FF3515\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.tuco.ai/api-reference/endpoint/send-message\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/endpoint/send-message.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.tuco.ai/#organization\",\"name\":\"Tuco AI\",\"url\":\"https://docs.tuco.ai\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/tucoai/oqQbf84LeXHYKs-3/logo/light.svg?fit=max\u0026auto=format\u0026n=oqQbf84LeXHYKs-3\u0026q=85\u0026s=c601a209f9f05fe52c2cd2e67d63adeb\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.tuco.ai#website\",\"name\":\"Tuco AI\",\"url\":\"https://docs.tuco.ai\",\"publisher\":{\"@id\":\"https://docs.tuco.ai/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.tuco.ai/api-reference/endpoint/send-message#webpage\",\"url\":\"https://docs.tuco.ai/api-reference/endpoint/send-message\",\"name\":\"Send Message\",\"description\":\"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.\",\"dateModified\":\"2026-10-26T20:59:57.309Z\",\"isPartOf\":{\"@id\":\"https://docs.tuco.ai#website\"},\"breadcrumb\":{\"@id\":\"https://docs.tuco.ai/api-reference/endpoint/send-message#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.tuco.ai/api-reference/endpoint/send-message#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Messages\",\"item\":\"https://docs.tuco.ai/api-reference/messages\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Send Message\",\"item\":\"https://docs.tuco.ai/api-reference/endpoint/send-message\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.tuco.ai/api-reference/endpoint/send-message#apireference\",\"headline\":\"Send Message\",\"name\":\"Send Message\",\"description\":\"Send an iMessage, SMS, or email to a contact — the core automation endpoint. REST endpoint in the Tuco AI iMessage API — bearer-token auth, JSON.\",\"url\":\"https://docs.tuco.ai/api-reference/endpoint/send-message\",\"mainEntityOfPage\":{\"@id\":\"https://docs.tuco.ai/api-reference/endpoint/send-message#webpage\"},\"dateModified\":\"2026-10-26T20:59:57.309Z\",\"publisher\":{\"@id\":\"https://docs.tuco.ai/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.tuco.ai#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Tuco AI\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"Tuco AI","nav":{"global":{"anchors":[{"anchor":"Dashboard","icon":"browser","href":"https://app.tuco.ai"}]},"tabs":[{"tab":"Documentation","pages":[{"title":"Documentation","href":""}]},{"tab":"API Reference","groups":[{"group":"Overview","pages":[{"title":"API Overview","icon":"code","href":"/api-reference/introduction"},{"title":"Tuco API Keys","icon":"key","href":"/api-reference/api-keys"},{"title":"Agency API Keys","icon":"building","href":"/api-reference/agency-api-keys"}]},{"group":"Webhooks","pages":[{"title":"Webhooks Overview","icon":"webhook","href":"/api-reference/endpoint/webhook"},{"title":"Message Webhooks","icon":"webhook","href":"/api-reference/message-webhooks"},{"title":"List Webhooks","api":"GET /api/webhooks","href":"/api-reference/endpoint/list-webhooks"},{"title":"Create Webhook","api":"POST /api/webhooks","href":"/api-reference/endpoint/create-webhook"},{"title":"Get Webhook","api":"GET /api/webhooks/{id}","href":"/api-reference/endpoint/get-webhook"},{"title":"Update Webhook","api":"PATCH /api/webhooks/{id}","href":"/api-reference/endpoint/update-webhook"},{"title":"Delete Webhook","api":"DELETE /api/webhooks/{id}","href":"/api-reference/endpoint/delete-webhook"},{"title":"Rotate Webhook Secret","api":"POST /api/webhooks/{id}/rotate-secret","href":"/api-reference/endpoint/rotate-webhook-secret"},{"title":"Send Test Webhook","api":"POST /api/webhooks/{id}/test","href":"/api-reference/endpoint/send-test-webhook"},{"title":"Webhook Health Check","api":"POST /api/webhooks/{id}/health-check","href":"/api-reference/endpoint/test-webhook"},{"title":"List Webhook Deliveries","api":"GET /api/webhooks/{id}/deliveries","href":"/api-reference/endpoint/list-webhook-deliveries"},{"title":"Get Webhook Delivery","api":"GET /api/webhooks/{id}/deliveries/{deliveryId}","href":"/api-reference/endpoint/get-webhook-delivery"},{"title":"Replay Webhook Delivery","api":"POST /api/webhooks/{id}/deliveries/{deliveryId}/replay","href":"/api-reference/endpoint/replay-webhook-delivery"}]},{"group":"Errors and status codes","pages":[{"title":"Errors \u0026 Status Codes","icon":"circle-exclamation","href":"/api-reference/errors"}]},{"group":"iMessage Availability","pages":[{"title":"Check iMessage Availability (Single Address)","api":"GET /api/check-availability","href":"/api-reference/endpoint/check-availability"},{"title":"Check iMessage Availability (Round-Robin)","api":"POST /api/check-availability-rr","href":"/api-reference/endpoint/check-availability-rr"},{"title":"Check iMessage Availability (Single Lead)","api":"GET /api/leads/check-availability","href":"/api-reference/endpoint/lead-check-availability"},{"title":"Bulk Availability Check Endpoint","api":"POST /api/leads/check-availability","href":"/api-reference/endpoint/bulk-check-availability"}]},{"group":"Messages","pages":[{"title":"Messages","icon":"paper-plane","href":"/api-reference/messages"},{"title":"Drip (bulk shock-absorber)","description":"POST /api/drip — same body as /api/messages, never 429s a bulk blast, fast-acks 202, and drips sends safely per line. Built for CRM enrollment fan-out.","icon":"faucet-drip","href":"/api-reference/drip"},{"title":"Send Message","api":"POST /api/messages","href":"/api-reference/endpoint/send-message"},{"title":"Get Message History","api":"GET /api/messages","description":"Read the full conversation with a lead — inbound and outbound messages together, newest first, paginated.","href":"/api-reference/endpoint/get-messages"},{"title":"Send Drip","api":"POST /api/drip","href":"/api-reference/endpoint/send-drip"},{"title":"Send Reaction","api":"POST /api/messages/react","href":"/api-reference/endpoint/send-reaction"},{"title":"Send Typing Indicator","api":"POST /api/messages/typing","href":"/api-reference/endpoint/send-typing-indicator"},{"title":"Send with Attachments","api":"POST /api/messages","href":"/api-reference/endpoint/send-with-attachments"},{"title":"Upload Attachment","openapi":"POST /api/attachments/upload","href":"/api-reference/upload-attachment"},{"title":"Cancel Pending Messages","api":"POST /api/messages/cancel-for-lead","href":"/api-reference/endpoint/cancel-for-lead"},{"title":"Read Fallback SMS Config","api":"GET /api/workspace/fallback-config","href":"/api-reference/endpoint/fallback-config"},{"title":"Update Fallback SMS Config","api":"PATCH /api/workspace/fallback-config","href":"/api-reference/endpoint/update-fallback-config"},{"title":"Atomic Duplicate Guard — POST /api/messages","href":"/imessage-double-send-guard"},{"title":"Message Status","api":"GET /api/messages/{messageId}/journey","href":"/api-reference/endpoint/message-journey"}]},{"group":"Voice / Calling","pages":[{"title":"Place a Call Endpoint","api":"POST /api/voice/calls","tag":"BETA","href":"/api-reference/endpoint/place-call"},{"title":"Get Call Recordings Endpoint","api":"GET /api/voice/recordings","tag":"BETA","href":"/api-reference/endpoint/get-recordings"},{"title":"List Recordings \u0026 Uploads Endpoint","api":"GET /api/attachments/list","tag":"BETA","href":"/api-reference/endpoint/list-recordings"}]},{"group":"Replies","pages":[{"title":"List Conversations","api":"GET /api/unibox/conversations","href":"/api-reference/endpoint/conversations"},{"title":"Check Replies","api":"GET /api/replies","href":"/api-reference/endpoint/get-replies"}]},{"group":"Do Not Contact","pages":[{"title":"List / Check Do-Not-Contact","openapi":"GET /api/dnc","href":"/api-reference/endpoint/list-dnc"},{"title":"Add to Do-Not-Contact","openapi":"POST /api/dnc","href":"/api-reference/endpoint/add-dnc"},{"title":"Bulk Add to Do-Not-Contact","openapi":"PATCH /api/dnc","href":"/api-reference/endpoint/bulk-add-dnc"}]},{"group":"Lines \u0026 Leads","pages":[{"title":"Lines API","icon":"phone","href":"/api-reference/lines"},{"title":"Get All Lines","api":"GET /api/lines/by-user","href":"/api-reference/endpoint/get-lines"},{"title":"Update a Line","api":"PATCH /api/lines/{id}","href":"/api-reference/endpoint/update-line"},{"title":"Line Plan Limits","api":"GET /api/lines/limits","href":"/api-reference/endpoint/line-limits"},{"title":"Calling Add-ons","api":"GET /api/lines/{id}/calling-addons","href":"/api-reference/endpoint/calling-addons"},{"title":"Leads API","icon":"users","href":"/api-reference/leads"},{"title":"Create / Upload Lead Endpoint","api":"POST /api/leads","href":"/api-reference/endpoint/create"},{"title":"Get \u0026 Search Leads","api":"GET /api/leads","href":"/api-reference/endpoint/get"},{"title":"Delete Lead Endpoint","api":"DELETE /api/leads","href":"/api-reference/endpoint/delete"},{"title":"List Lead Lists","api":"GET /api/lists","href":"/api-reference/endpoint/list-lists"},{"title":"Create Lead List","api":"POST /api/lists","href":"/api-reference/endpoint/create-list"},{"title":"Delete Lead List","api":"DELETE /api/lists","href":"/api-reference/endpoint/delete-list"},{"title":"List Custom Field Keys","api":"GET /api/leads/custom-field-keys","href":"/api-reference/endpoint/custom-field-keys"},{"title":"Create Line Request","api":"POST /api/line-requests","href":"/api-reference/endpoint/create-line-request"},{"title":"Get Line Request","api":"GET /api/line-requests/{id}","href":"/api-reference/endpoint/get-line-request"},{"title":"Manage Line Request","api":"POST /api/line-requests/{id}","href":"/api-reference/endpoint/manage-line-request"},{"title":"Cancel a Line","api":"POST /api/lines/cancel","href":"/api-reference/endpoint/cancel-line"},{"title":"Get Lead","api":"GET /api/leads/{id}","href":"/api-reference/endpoint/get-lead"},{"title":"Update Lead","api":"PATCH /api/leads/{id}","href":"/api-reference/endpoint/update-lead"}]},{"group":"Analytics","pages":[{"title":"Analytics","icon":"chart-line","href":"/api-reference/analytics"},{"title":"Analytics Insights","api":"GET /api/analytics/insights","href":"/api-reference/endpoint/analytics-insights"},{"title":"Analytics Day Conversations","api":"GET /api/analytics/conversations","href":"/api-reference/endpoint/analytics-conversations"}]},{"group":"Goal Bots","pages":[{"title":"List Goal Bots","api":"GET /api/goal-bots","href":"/api-reference/endpoint/list-goal-bots"},{"title":"Create Goal Bot","api":"POST /api/goal-bots","href":"/api-reference/endpoint/create-goal-bot"},{"title":"Get Goal Bot","api":"GET /api/goal-bots/{id}","href":"/api-reference/endpoint/get-goal-bot"},{"title":"Update Goal Bot","api":"PATCH /api/goal-bots/{id}","href":"/api-reference/endpoint/update-goal-bot"},{"title":"Delete Goal Bot","api":"DELETE /api/goal-bots/{id}","href":"/api-reference/endpoint/archive-goal-bot"},{"title":"Simulate Goal Bot","api":"POST /api/goal-bots/{id}/simulate","href":"/api-reference/endpoint/simulate-goal-bot"},{"title":"Reply Hours","api":"GET|PUT|DELETE /api/goal-bots/{id}/reply-hours","href":"/api-reference/endpoint/reply-hours"},{"title":"List Instruction Bots (retired)","api":"GET /api/instructions","href":"/api-reference/endpoint/list-instruction-bots"},{"title":"List Task Agents","api":"GET /api/tasks","href":"/api-reference/endpoint/list-task-agents"},{"title":"Create Task Agent","api":"POST /api/tasks","href":"/api-reference/endpoint/create-task-agent"},{"title":"Update Task Agent","api":"PATCH /api/tasks/{id}","href":"/api-reference/endpoint/update-task-agent"},{"title":"Delete Task Agent","api":"DELETE /api/tasks/{id}","href":"/api-reference/endpoint/delete-task-agent"},{"title":"Enroll Lead (instruction bots)","api":"POST /api/instructions/{id}/enroll","href":"/api-reference/endpoint/enroll-lead"},{"title":"Unenroll Lead","api":"DELETE /api/goal-bots/{id}/enroll","href":"/api-reference/endpoint/unenroll-lead"}]},{"group":"API Tools","pages":[{"title":"List API Tools","api":"GET /api/campaign-tools","href":"/api-reference/endpoint/list-tools"},{"title":"Create or Update API Tool","api":"POST /api/campaign-tools","href":"/api-reference/endpoint/save-tool"},{"title":"Delete API Tool","api":"DELETE /api/campaign-tools","href":"/api-reference/endpoint/delete-tool"},{"title":"Test API Tool","api":"POST /api/campaign-tools/test","href":"/api-reference/endpoint/test-tool"}]},{"group":"Agency","pages":[{"title":"Agency API Keys","icon":"building","href":"/api-reference/agency-api-keys"},{"title":"List Agency Workspaces","api":"GET /api/agency/subaccounts","href":"/api-reference/endpoint/agency-list-workspaces"},{"title":"Create Agency Workspace","api":"POST /api/agency/subaccounts","href":"/api-reference/endpoint/agency-create-workspace"},{"title":"Re-mint a Client Workspace Key","api":"POST /api/agency/workspace-keys","href":"/api-reference/endpoint/agency-workspace-keys"},{"title":"List Agency Lines","api":"GET /api/agency/lines","href":"/api-reference/endpoint/agency-list-lines"},{"title":"Move a Line Between Workspaces","api":"POST /api/agency/lines","href":"/api-reference/endpoint/agency-move-line"},{"title":"Agency Overview Stats","api":"GET /api/agency/overview","href":"/api-reference/endpoint/agency-overview"},{"title":"Agency Email Preferences","api":"POST /api/agency/email-preferences","href":"/api-reference/endpoint/agency-email-preferences"},{"title":"Agency Webhooks","api":"POST /api/agency/webhooks","href":"/api-reference/endpoint/agency-webhooks"},{"title":"Subscribe a Client to a Plan","api":"POST /api/agency/billing/subscribe","href":"/api-reference/endpoint/agency-subscribe"},{"title":"Monthly Statement","api":"GET /api/agency/statement","href":"/api-reference/endpoint/agency-statement"}]},{"group":"Workspace settings","pages":[{"title":"Workspace Email Preferences","api":"POST /api/email-preferences","href":"/api-reference/endpoint/email-preferences"},{"title":"Invite a Teammate","api":"POST /api/team/invite","href":"/api-reference/endpoint/team-invite"},{"title":"Force a Line Health Check","api":"GET /api/lines/check-availability","href":"/api-reference/endpoint/line-health-check"}]}]}]},"title":"Send Message - Tuco AI","buildId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","deploymentId":"dpl_EnxDqhjaNc9a8MVa833TGULPd9uJ","dynamics":["c2aa737661","2b790eda92","b0f84f53ff"],"chunks":["OpenApiReferenceProvider-26-lDe7V.js","utils-CWQmgYtH.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-4-Aw3rSD.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-C2zjXYA5.js","snippetPresets-DFmpFA7C.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-FJpQavWq.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-D_GvPF7k.js","shallow-Bs2ZB0NO.js","getApiPlaygroundDisplay-DCcqJJk-.js","CodeSnippet-DzDxawVe.js","CodeSnippets-aUr7fU-7.js","Page-CT9uE8Ip.js","getPastedJson-Y1fKsj_I.js","icon-DI4zTsDr.js","MethodPill-C0nDlmSQ.js","DuplicateIcon-NUXbx2nQ.js","createIcon-BdTHrPAi.js","DynamicMarkdown-CtpgKJwj.js","SectionHeading-B3x35tOt.js","axios-vUo_bRtp.js"]}