Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo messages). Sem channels, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta failed com error_code: "daily_limit_reached". Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com respect_opt_out: true, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta skipped com reason_code: "contato_descadastrado".
Informe os campos dos canais que vão ser usados. Sem channels, um canal para o qual o destinatário não tem dado é pulado sem gerar registro; com channels, ele volta em results como skipped, com o campo que faltou em error. Exceção: o Slack sem canal padrão nem Incoming Webhook, para destinatário sem slack_channel, slack_user_id e email, é pulado sem registro nos dois casos.
Idioma preferido. Ordem de escolha do template: este idioma, a base dele (pt), o idioma padrão da conta, o de fallback e en. Se nenhum casar e o canal tiver um único template ativo, ele é usado; senão, o canal volta skipped com No template found for any language
Restringe o envio a estes canais. Um canal pedido que não está ativo na comunicação é ignorado. Sem ele, a mensagem sai em todos os canais ativos da comunicação
Com true, o canal (email, whatsapp ou sms) de que o contato se descadastrou é pulado e volta skipped com reason_code: "contato_descadastrado"; os outros canais seguem. O contato é reconhecido pelo recipient.email (sem diferenciar maiúsculas) e pelo recipient.phone. Os e-mails pela API não levam o link de descadastro, nem com true. Um valor que não seja true nem false é recusado com 400
Response
Requisição aceita. O HTTP 200 não garante entrega: confira results[].status de cada canal. Quando o limite por minuto é atingido, o envio único volta com deferred: true e status: "queued", sem results. Quando o limite diário da conta é atingido, o canal volta failed com error_code: "daily_limit_reached", também com HTTP 200.
{"docsConfig":{"theme":"mint","$schema":"https://mintlify.com/docs.json","name":"OctaSend","description":"OctaSend — plataforma de mensageria multicanal (WhatsApp, E-mail, Slack, Telegram, Web Push, In-App e mais)","colors":{"primary":"#465fff","light":"#818cf8","dark":"#3730a3"},"favicon":"https://mintcdn.com/octasend/6ZAokLHG-8dwJysO/favicon.svg?fit=max\u0026auto=format\u0026n=6ZAokLHG-8dwJysO\u0026q=85\u0026s=55f5ab844c41b505b82533688c13a5b0","api":{"openapi":"openapi.json"},"navbar":{"links":[],"primary":{"type":"button","label":"Painel OctaSend","href":"https://octasend.com.br"}},"styling":{"latex":true},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"octasend","hasAudioNarration":false,"actualSubdomain":"octasend","customDomains":["docs.octasend.com.br"],"gitSource":{"type":"github","owner":"ricardofrdrc","repo":"octasend-mintlify","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"chroma":{"collectionId":"cfeb5204-3bcc-4fc7-8700-0fb6e8f8e4c4","liveDeploymentHistoryId":"6aea88d7093f1e8127968923","schemaVersion":"v3","latestBuiltDeploymentHistoryId":"6aea88d7093f1e8127968923"},"entitlements":{"AI_CHAT":{"status":"DISABLED"}},"buildId":"6aea88d7093f1e8127968923","clientVersion":"0.0.4074","searchFilterCounts":[{"language":"default","tag":"API Reference","count":13},{"language":"default","tag":"Integrações","count":11},{"language":"default","tag":"Guias de Canais","count":9},{"language":"default","tag":"Mensageria","count":7},{"language":"default","tag":"Site e engajamento","count":6},{"language":"default","tag":"E-commerce","count":3},{"language":"default","tag":"Atendimento e IA","count":3},{"language":"default","tag":"Conta e ferramentas","count":3},{"language":"default","tag":"Primeiros Passos","count":2}]},"assistantConfig":{"enableAskAiButton":false,"enableStarterQuestions":false,"enableContextualStarterQuestions":false,"enableAskAiSearchBar":true},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"vite-origin","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"comment-mode","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[],"page":{"pagePath":"api-reference/send-message","slug":"/api-reference/send-message","pageMetadata":{"title":"Enviar mensagem","openapi":"openapi.json POST /send-message","description":"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo `messages`). Sem `channels`, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta `failed` com `error_code: \"daily_limit_reached\"`. Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com `respect_opt_out: true`, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta `skipped` com `reason_code: \"contato_descadastrado\"`.","href":"/api-reference/send-message"},"description":{"compiledSource":"\"use strict\";\nconst {jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_components.p, {\n children: [\"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo \", _jsx(_components.code, {\n children: \"messages\"\n }), \"). Sem \", _jsx(_components.code, {\n children: \"channels\"\n }), \", a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta \", _jsx(_components.code, {\n children: \"failed\"\n }), \" com \", _jsx(_components.code, {\n children: \"error_code: \\\"daily_limit_reached\\\"\"\n }), \". Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com \", _jsx(_components.code, {\n children: \"respect_opt_out: true\"\n }), \", o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta \", _jsx(_components.code, {\n children: \"skipped\"\n }), \" com \", _jsx(_components.code, {\n children: \"reason_code: \\\"contato_descadastrado\\\"\"\n }), \".\"]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Enviar mensagem","openapi":"openapi.json POST /send-message","description":"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo `messages`). Sem `channels`, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta `failed` com `error_code: \"daily_limit_reached\"`. Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com `respect_opt_out: true`, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta `skipped` com `reason_code: \"contato_descadastrado\"`.","href":"/api-reference/send-message"}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":[],"openApiReferenceData":{"operation":{"operationId":"sendMessage","summary":"Enviar mensagem","description":"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo `messages`). Sem `channels`, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta `failed` com `error_code: \"daily_limit_reached\"`. Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com `respect_opt_out: true`, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta `skipped` com `reason_code: \"contato_descadastrado\"`.","tags":["Mensagens"],"requestBody":"841efa53-bfad-4331-8c52-e7dd3dc04065","responses":{"200":"0e1c3ea3-a303-4ebf-899e-9193af23d4da","400":"fe649628-73fa-4656-a127-a22ab335f259","401":"5f4c0d5d-bc4a-4932-abf4-bcc66878afde","404":"db1115ec-f6a1-4284-8ee9-4cb412e51075","500":"9cee3522-442e-42f7-a887-34810dcc928c","503":"1e93b191-0b69-47c0-ac80-f2794cca8b95"},"method":"post","type":"path","servers":["5bd81248-8b42-40e4-998d-dca9c08b655f"],"security":["07c15d89-d5d7-4cfc-afc8-9cb1f9ef7894"],"path":"/send-message","baseUrlOptions":["https://yghpblhxrfmxkwejvpjz.supabase.co/functions/v1"],"title":"Enviar mensagem","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{},"requestBody":{"required":true,"content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["communication_slug"],"properties":{"communication_slug":{"type":"string","description":"Slug de uma comunicação ativa da conta","isRequired":true,"uniqueKey":"oneOf.0.communication_slug","typeLabel":"string"},"recipient":{"type":"object","description":"Informe os campos dos canais que vão ser usados. Sem `channels`, um canal para o qual o destinatário não tem dado é pulado sem gerar registro; com `channels`, ele volta em `results` como `skipped`, com o campo que faltou em `error`. Exceção: o Slack sem canal padrão nem Incoming Webhook, para destinatário sem `slack_channel`, `slack_user_id` e `email`, é pulado sem registro nos dois casos.","properties":{"email":{"type":"string","format":"email","description":"E-mail. Canal `email`; no Slack, abre mensagem direta com o dono do e-mail (exige Bot Token)","uniqueKey":"oneOf.0.recipient.email","typeLabel":"string\u003cemail>"},"phone":{"type":"string","example":"+5511999990000","description":"Telefone no formato internacional, com `+` e código do país (ex.: +5511999990000). Canais `whatsapp` (só celular brasileiro) e `sms` (vai ao provedor como enviado). No WhatsApp, no cadastro do contato e na conferência do descadastro, um número sem `+` é lido assim: 10 dígitos, fixo brasileiro, e 11 dígitos com 9 na terceira posição, celular brasileiro (os dois recebem o 55); os demais, com 11 dígitos ou mais, já trazem o código do país","uniqueKey":"oneOf.0.recipient.phone","typeLabel":"string"},"user_id":{"type":"string","description":"Identificador do usuário no seu sistema — o mesmo usado no registro do Web Push, no widget In-App ou no link de início do bot do Telegram. Canais `web_push`, `in_app` e `telegram`","uniqueKey":"oneOf.0.recipient.user_id","typeLabel":"string"},"fcm_token":{"type":"string","description":"Token FCM do navegador, para `web_push` sem registro prévio","uniqueKey":"oneOf.0.recipient.fcm_token","typeLabel":"string"},"telegram_chat_id":{"type":"string","example":"123456789","description":"Chat ID de quem vai receber no Telegram. Tem prioridade sobre `user_id` e `phone`, que só encontram quem já iniciou o bot (pelo link com o `user_id`) ou compartilhou o número com ele; sem esse vínculo, o canal volta `failed`","uniqueKey":"oneOf.0.recipient.telegram_chat_id","typeLabel":"string"},"slack_user_id":{"type":"string","description":"ID do usuário no Slack, para mensagem direta","uniqueKey":"oneOf.0.recipient.slack_user_id","typeLabel":"string"},"slack_channel":{"type":"string","example":"#geral","description":"Canal do Slack (nome ou ID)","uniqueKey":"oneOf.0.recipient.slack_channel","typeLabel":"string"},"push_token":{"type":"string","description":"Endpoint do dispositivo no Amazon SNS, para o canal `push` (Push mobile)","uniqueKey":"oneOf.0.recipient.push_token","typeLabel":"string"}},"uniqueKey":"oneOf.0.recipient","typeLabel":"object"},"variables":{"type":"object","description":"Valores (texto) das `{{variáveis}}` do template","additionalProperties":{"type":"string","uniqueKey":"oneOf.0.variables.additionalProperties","typeLabel":"string"},"uniqueKey":"oneOf.0.variables","typeLabel":"object"},"language":{"type":"string","example":"pt-BR","description":"Idioma preferido. Ordem de escolha do template: este idioma, a base dele (pt), o idioma padrão da conta, o de fallback e `en`. Se nenhum casar e o canal tiver um único template ativo, ele é usado; senão, o canal volta `skipped` com `No template found for any language`","uniqueKey":"oneOf.0.language","typeLabel":"string"},"channels":{"type":"array","description":"Restringe o envio a estes canais. Um canal pedido que não está ativo na comunicação é ignorado. Sem ele, a mensagem sai em todos os canais ativos da comunicação","items":{"type":"string","enum":["email","whatsapp","sms","telegram","slack","web_push","in_app","push"],"uniqueKey":"oneOf.0.channels.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"oneOf.0.channels","typeLabel":"enum\u003cstring>[]"},"tag":{"oneOf":[{"type":"string","description":"Uma ou mais tags para agrupar os envios e filtrar depois em `/query-message-logs`. Espaços nas pontas são removidos e tags vazias, descartadas","uniqueKey":"oneOf.0.tag.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"oneOf.0.tag.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Uma ou mais tags para agrupar os envios e filtrar depois em `/query-message-logs`. Espaços nas pontas são removidos e tags vazias, descartadas","uniqueKey":"oneOf.0.tag.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"oneOf.0.tag","typeLabel":"string | string[]"},"respect_opt_out":{"type":"boolean","default":false,"description":"Com `true`, o canal (`email`, `whatsapp` ou `sms`) de que o contato se descadastrou é pulado e volta `skipped` com `reason_code: \"contato_descadastrado\"`; os outros canais seguem. O contato é reconhecido pelo `recipient.email` (sem diferenciar maiúsculas) e pelo `recipient.phone`. Os e-mails pela API não levam o link de descadastro, nem com `true`. Um valor que não seja `true` nem `false` é recusado com 400","uniqueKey":"oneOf.0.respect_opt_out","typeLabel":"boolean"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","required":["messages"],"properties":{"messages":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"object","required":["communication_slug"],"properties":{"communication_slug":{"type":"string","description":"Slug de uma comunicação ativa da conta","isRequired":true,"uniqueKey":"oneOf.1.messages.items.[INDEX].communication_slug","typeLabel":"string"},"recipient":{"type":"object","description":"Informe os campos dos canais que vão ser usados. Sem `channels`, um canal para o qual o destinatário não tem dado é pulado sem gerar registro; com `channels`, ele volta em `results` como `skipped`, com o campo que faltou em `error`. Exceção: o Slack sem canal padrão nem Incoming Webhook, para destinatário sem `slack_channel`, `slack_user_id` e `email`, é pulado sem registro nos dois casos.","properties":{"email":{"type":"string","format":"email","description":"E-mail. Canal `email`; no Slack, abre mensagem direta com o dono do e-mail (exige Bot Token)","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.email","typeLabel":"string\u003cemail>"},"phone":{"type":"string","example":"+5511999990000","description":"Telefone no formato internacional, com `+` e código do país (ex.: +5511999990000). Canais `whatsapp` (só celular brasileiro) e `sms` (vai ao provedor como enviado). No WhatsApp, no cadastro do contato e na conferência do descadastro, um número sem `+` é lido assim: 10 dígitos, fixo brasileiro, e 11 dígitos com 9 na terceira posição, celular brasileiro (os dois recebem o 55); os demais, com 11 dígitos ou mais, já trazem o código do país","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.phone","typeLabel":"string"},"user_id":{"type":"string","description":"Identificador do usuário no seu sistema — o mesmo usado no registro do Web Push, no widget In-App ou no link de início do bot do Telegram. Canais `web_push`, `in_app` e `telegram`","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.user_id","typeLabel":"string"},"fcm_token":{"type":"string","description":"Token FCM do navegador, para `web_push` sem registro prévio","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.fcm_token","typeLabel":"string"},"telegram_chat_id":{"type":"string","example":"123456789","description":"Chat ID de quem vai receber no Telegram. Tem prioridade sobre `user_id` e `phone`, que só encontram quem já iniciou o bot (pelo link com o `user_id`) ou compartilhou o número com ele; sem esse vínculo, o canal volta `failed`","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.telegram_chat_id","typeLabel":"string"},"slack_user_id":{"type":"string","description":"ID do usuário no Slack, para mensagem direta","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.slack_user_id","typeLabel":"string"},"slack_channel":{"type":"string","example":"#geral","description":"Canal do Slack (nome ou ID)","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.slack_channel","typeLabel":"string"},"push_token":{"type":"string","description":"Endpoint do dispositivo no Amazon SNS, para o canal `push` (Push mobile)","uniqueKey":"oneOf.1.messages.items.[INDEX].recipient.push_token","typeLabel":"string"}},"uniqueKey":"oneOf.1.messages.items.[INDEX].recipient","typeLabel":"object"},"variables":{"type":"object","description":"Valores (texto) das `{{variáveis}}` do template","additionalProperties":{"type":"string","uniqueKey":"oneOf.1.messages.items.[INDEX].variables.additionalProperties","typeLabel":"string"},"uniqueKey":"oneOf.1.messages.items.[INDEX].variables","typeLabel":"object"},"language":{"type":"string","example":"pt-BR","description":"Idioma preferido. Ordem de escolha do template: este idioma, a base dele (pt), o idioma padrão da conta, o de fallback e `en`. Se nenhum casar e o canal tiver um único template ativo, ele é usado; senão, o canal volta `skipped` com `No template found for any language`","uniqueKey":"oneOf.1.messages.items.[INDEX].language","typeLabel":"string"},"channels":{"type":"array","description":"Restringe o envio a estes canais. Um canal pedido que não está ativo na comunicação é ignorado. Sem ele, a mensagem sai em todos os canais ativos da comunicação","items":{"type":"string","enum":["email","whatsapp","sms","telegram","slack","web_push","in_app","push"],"uniqueKey":"oneOf.1.messages.items.[INDEX].channels.items.[INDEX]","typeLabel":"enum\u003cstring>"},"uniqueKey":"oneOf.1.messages.items.[INDEX].channels","typeLabel":"enum\u003cstring>[]"},"tag":{"oneOf":[{"type":"string","description":"Uma ou mais tags para agrupar os envios e filtrar depois em `/query-message-logs`. Espaços nas pontas são removidos e tags vazias, descartadas","uniqueKey":"oneOf.1.messages.items.[INDEX].tag.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"oneOf.1.messages.items.[INDEX].tag.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"Uma ou mais tags para agrupar os envios e filtrar depois em `/query-message-logs`. Espaços nas pontas são removidos e tags vazias, descartadas","uniqueKey":"oneOf.1.messages.items.[INDEX].tag.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"oneOf.1.messages.items.[INDEX].tag","typeLabel":"string | string[]"},"respect_opt_out":{"type":"boolean","default":false,"description":"Com `true`, o canal (`email`, `whatsapp` ou `sms`) de que o contato se descadastrou é pulado e volta `skipped` com `reason_code: \"contato_descadastrado\"`; os outros canais seguem. O contato é reconhecido pelo `recipient.email` (sem diferenciar maiúsculas) e pelo `recipient.phone`. Os e-mails pela API não levam o link de descadastro, nem com `true`. Um valor que não seja `true` nem `false` é recusado com 400","uniqueKey":"oneOf.1.messages.items.[INDEX].respect_opt_out","typeLabel":"boolean"}},"uniqueKey":"oneOf.1.messages.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"oneOf.1.messages","typeLabel":"object[]"}},"uniqueKey":"oneOf.1","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"single":{"title":"single","value":{"communication_slug":"boas-vindas","recipient":{"email":"usuario@exemplo.com","phone":"+5511999990000"},"variables":{"nome":"Ricardo"},"language":"pt-BR","tag":["onboarding","junho-2024"]}},"batch":{"title":"batch","value":{"messages":[{"communication_slug":"boas-vindas","recipient":{"email":"joao@exemplo.com"},"variables":{"nome":"João"}},{"communication_slug":"boas-vindas","recipient":{"email":"maria@exemplo.com"},"variables":{"nome":"Maria"}}]}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"0e1c3ea3-a303-4ebf-899e-9193af23d4da":{"description":"Requisição aceita. O HTTP 200 não garante entrega: confira `results[].status` de cada canal. Quando o limite por minuto é atingido, o envio único volta com `deferred: true` e `status: \"queued\"`, sem `results`. Quando o limite diário da conta é atingido, o canal volta `failed` com `error_code: \"daily_limit_reached\"`, também com HTTP 200.","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"success":{"type":"boolean","uniqueKey":"oneOf.0.success","typeLabel":"boolean"},"results":{"type":"array","items":{"type":"object","properties":{"channel":{"type":"string","enum":["email","whatsapp","sms","telegram","slack","web_push","in_app","push"],"uniqueKey":"oneOf.0.results.items.[INDEX].channel","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["sent","queued","failed","skipped"],"uniqueKey":"oneOf.0.results.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"provider_message_id":{"type":"string","uniqueKey":"oneOf.0.results.items.[INDEX].provider_message_id","typeLabel":"string"},"error":{"type":"string","description":"Motivo, quando o status é `failed` ou `skipped`","uniqueKey":"oneOf.0.results.items.[INDEX].error","typeLabel":"string"},"error_code":{"type":"string","description":"Código fixo do motivo, para não depender do texto de `error`. Hoje só `daily_limit_reached` (limite diário de mensagens da conta atingido)","example":"daily_limit_reached","uniqueKey":"oneOf.0.results.items.[INDEX].error_code","typeLabel":"string"},"reason_code":{"type":"string","description":"Código fixo do motivo de um canal `skipped`: `channel_not_configured` (o canal não está configurado na conta; o envio nem começa) ou `contato_descadastrado` (com `respect_opt_out: true`, o contato se descadastrou do canal)","example":"contato_descadastrado","uniqueKey":"oneOf.0.results.items.[INDEX].reason_code","typeLabel":"string"},"log_id":{"oneOf":[{"type":"string","format":"uuid","description":"Identificador do registro no histórico (o mesmo `id` de `/query-message-logs`). Ausente quando o canal foi pulado antes de gerar registro, como em `channel_not_configured`","uniqueKey":"oneOf.0.results.items.[INDEX].log_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"Identificador do registro no histórico (o mesmo `id` de `/query-message-logs`). Ausente quando o canal foi pulado antes de gerar registro, como em `channel_not_configured`","uniqueKey":"oneOf.0.results.items.[INDEX].log_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.0.results.items.[INDEX].log_id","typeLabel":"string\u003cuuid> | null"},"note":{"type":"string","description":"Só no WhatsApp enfileirado","uniqueKey":"oneOf.0.results.items.[INDEX].note","typeLabel":"string"}},"uniqueKey":"oneOf.0.results.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.0.results","typeLabel":"object[]"}},"uniqueKey":"oneOf.0","typeLabel":"object"},{"type":"object","description":"Envio único adiado pelo limite por minuto da conta","properties":{"success":{"type":"boolean","const":true,"uniqueKey":"oneOf.1.success","typeLabel":"boolean"},"deferred":{"type":"boolean","const":true,"uniqueKey":"oneOf.1.deferred","typeLabel":"boolean"},"status":{"type":"string","const":"queued","uniqueKey":"oneOf.1.status","typeLabel":"string"}},"uniqueKey":"oneOf.1","typeLabel":"object"},{"type":"object","properties":{"success":{"type":"boolean","uniqueKey":"oneOf.2.success","typeLabel":"boolean"},"batch":{"type":"boolean","const":true,"uniqueKey":"oneOf.2.batch","typeLabel":"boolean"},"total":{"type":"integer","description":"Quantidade de itens recebidos","uniqueKey":"oneOf.2.total","typeLabel":"integer"},"deferred":{"type":"integer","description":"Quantos itens foram adiados pelo limite por minuto","uniqueKey":"oneOf.2.deferred","typeLabel":"integer"},"results":{"type":"array","description":"Um item por mensagem. Os adiados vêm no fim.","items":{"type":"object","properties":{"communication_slug":{"type":"string","uniqueKey":"oneOf.2.results.items.[INDEX].communication_slug","typeLabel":"string"},"results":{"type":"array","items":{"type":"object","properties":{"channel":{"type":"string","enum":["email","whatsapp","sms","telegram","slack","web_push","in_app","push"],"uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].channel","typeLabel":"enum\u003cstring>"},"status":{"type":"string","enum":["sent","queued","failed","skipped"],"uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].status","typeLabel":"enum\u003cstring>"},"provider_message_id":{"type":"string","uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].provider_message_id","typeLabel":"string"},"error":{"type":"string","description":"Motivo, quando o status é `failed` ou `skipped`","uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].error","typeLabel":"string"},"error_code":{"type":"string","description":"Código fixo do motivo, para não depender do texto de `error`. Hoje só `daily_limit_reached` (limite diário de mensagens da conta atingido)","example":"daily_limit_reached","uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].error_code","typeLabel":"string"},"reason_code":{"type":"string","description":"Código fixo do motivo de um canal `skipped`: `channel_not_configured` (o canal não está configurado na conta; o envio nem começa) ou `contato_descadastrado` (com `respect_opt_out: true`, o contato se descadastrou do canal)","example":"contato_descadastrado","uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].reason_code","typeLabel":"string"},"log_id":{"oneOf":[{"type":"string","format":"uuid","description":"Identificador do registro no histórico (o mesmo `id` de `/query-message-logs`). Ausente quando o canal foi pulado antes de gerar registro, como em `channel_not_configured`","uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].log_id.oneOf.0","typeLabel":"string\u003cuuid>"},{"type":"null","format":"uuid","description":"Identificador do registro no histórico (o mesmo `id` de `/query-message-logs`). Ausente quando o canal foi pulado antes de gerar registro, como em `channel_not_configured`","uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].log_id.oneOf.1","typeLabel":"null"}],"uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].log_id","typeLabel":"string\u003cuuid> | null"},"note":{"type":"string","description":"Só no WhatsApp enfileirado","uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX].note","typeLabel":"string"}},"uniqueKey":"oneOf.2.results.items.[INDEX].results.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.2.results.items.[INDEX].results","typeLabel":"object[]"},"error":{"type":"string","description":"Ex.: `Communication not found`, ou a falha ao consultar o descadastro com `respect_opt_out: true` (nada foi enviado para o item)","uniqueKey":"oneOf.2.results.items.[INDEX].error","typeLabel":"string"},"error_code":{"type":"string","description":"Presente quando a consulta ao descadastro falhou: `opt_out_check_failed`. Reenvie só esse item","example":"opt_out_check_failed","uniqueKey":"oneOf.2.results.items.[INDEX].error_code","typeLabel":"string"},"status":{"type":"string","const":"queued","description":"Presente quando o item foi adiado","uniqueKey":"oneOf.2.results.items.[INDEX].status","typeLabel":"string"},"deferred":{"type":"boolean","uniqueKey":"oneOf.2.results.items.[INDEX].deferred","typeLabel":"boolean"}},"uniqueKey":"oneOf.2.results.items.[INDEX]","typeLabel":"object"},"uniqueKey":"oneOf.2.results","typeLabel":"object[]"}},"uniqueKey":"oneOf.2","typeLabel":"object"}],"uniqueKey":"","typeLabel":"object"},"examples":{"single":{"title":"single","value":{"success":true,"results":[{"channel":"email","status":"sent","provider_message_id":"010f018e...","log_id":"3f1c2b9e-..."},{"channel":"whatsapp","status":"skipped","error":"Canal não configurado","reason_code":"channel_not_configured"}]}},"opted_out":{"title":"opted_out","value":{"success":true,"results":[{"channel":"email","status":"skipped","error":"Contato descadastrado","reason_code":"contato_descadastrado","log_id":"7c1e0a52-..."}]}},"daily_limit":{"title":"daily_limit","value":{"success":true,"results":[{"channel":"email","status":"failed","error":"Limite diário de mensagens atingido","error_code":"daily_limit_reached","log_id":"5b0e7a13-..."}]}},"deferred":{"title":"deferred","value":{"success":true,"deferred":true,"status":"queued"}},"batch":{"title":"batch","value":{"success":true,"batch":true,"total":3,"deferred":1,"results":[{"communication_slug":"boas-vindas","results":[{"channel":"email","status":"sent","log_id":"3f1c2b9e-..."}]},{"communication_slug":"boas-vindas-antiga","error":"Communication not found"},{"communication_slug":"boas-vindas","status":"queued","deferred":true}]}}},"exampleType":"examples"}},"exampleType":"examples"},"fe649628-73fa-4656-a127-a22ab335f259":{"description":"Payload inválido","content":{"application/json":{"examples":{"missing_slug":{"title":"missing_slug","value":{"error":"communication_slug is required"}},"empty_batch":{"title":"empty_batch","value":{"error":"messages array cannot be empty"}},"batch_too_large":{"title":"batch_too_large","value":{"error":"Maximum 100 messages per batch request"}},"batch_missing_slug":{"title":"batch_missing_slug","value":{"error":"Each message must have communication_slug"}},"invalid_respect_opt_out":{"title":"invalid_respect_opt_out","value":{"error":"respect_opt_out must be a boolean"}},"batch_invalid_respect_opt_out":{"title":"batch_invalid_respect_opt_out","value":{"error":"respect_opt_out must be a boolean in each message"}}},"exampleType":"examples"}},"exampleType":"examples"},"5f4c0d5d-bc4a-4932-abf4-bcc66878afde":{"description":"Credencial ausente, inválida, expirada ou revogada","content":{"application/json":{"examples":{"missing":{"title":"missing","value":{"error":"Authorization header required. Use: Authorization: Bearer \u003ctoken>"}},"invalid":{"title":"invalid","value":{"error":"Invalid, expired or revoked token"}}},"exampleType":"examples"}},"exampleType":"examples"},"db1115ec-f6a1-4284-8ee9-4cb412e51075":{"description":"Envio único: comunicação inexistente ou inativa. No lote, o mesmo caso volta como item com `error`, sem recusar a requisição.","content":{"application/json":{"example":{"error":"Communication not found"},"examples":{"Example":{"title":"Example","value":{"error":"Communication not found"}}},"exampleType":"examples"}},"exampleType":"examples"},"9cee3522-442e-42f7-a887-34810dcc928c":{"description":"Erro interno (inclusive corpo JSON malformado)","content":{"application/json":{"schema":{"type":"object","properties":{"error":{"type":"string","uniqueKey":"error","typeLabel":"string"}},"uniqueKey":"","typeLabel":"object"},"examples":{"Example":{"title":"Example","value":{"error":"\u003cstring>"}}},"exampleType":"generated"}},"exampleType":"generated"},"1e93b191-0b69-47c0-ac80-f2794cca8b95":{"description":"Envio único com `respect_opt_out: true` em que a consulta ao descadastro falhou. Nada foi enviado; reenvie a mensagem. No lote, o mesmo caso volta só no item afetado, com `error` e `error_code`, sem recusar a requisição.","content":{"application/json":{"example":{"error":"Não foi possível verificar o descadastro do contato. Nada foi enviado; tente de novo.","error_code":"opt_out_check_failed"},"examples":{"Example":{"title":"Example","value":{"error":"Não foi possível verificar o descadastro do contato. Nada foi enviado; tente de novo.","error_code":"opt_out_check_failed"}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"07c15d89-d5d7-4cfc-afc8-9cb1f9ef7894":{"bearerAuth":{"type":"http","scheme":"bearer","description":"Access token (`at_...`) obtido em `/oauth-token`, ou o par `client_id:client_secret` separado por dois-pontos, sem espaços.","scopes":[],"schemeName":"bearerAuth"}}},"servers":{"5bd81248-8b42-40e4-998d-dca9c08b655f":{"url":"https://yghpblhxrfmxkwejvpjz.supabase.co/functions/v1","description":"Produção"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Access token (`at_...`) obtido em `/oauth-token`, ou o par `client_id:client_secret` separado por dois-pontos, sem espaços.","scopes":[],"schemeName":"bearerAuth"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Access token (`at_...`) obtido em `/oauth-token`, ou o par `client_id:client_secret` separado por dois-pontos, sem espaços.","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"bearerAuth","name":"Authorization"}],"title":"bearerAuth"}]},"originalFileLocation":"openapi.json"},"subdomain":"octasend","siteName":"OctaSend","title":"Enviar mensagem - OctaSend","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-09-27T21:42:24.333Z","originalFileLocation":"api-reference/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=\"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo messages). Sem channels, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta failed com error_code: \u0026quot;daily_limit_reached\u0026quot;. Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com respect_opt_out: true, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta skipped com reason_code: \u0026quot;contato_descadastrado\u0026quot;.\">\u003cmeta data-mint-head name=\"application-name\" content=\"OctaSend\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/octasend/cQ2bTApWVYeTAmab/_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/octasend/cQ2bTApWVYeTAmab/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/octasend/cQ2bTApWVYeTAmab/_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/octasend/cQ2bTApWVYeTAmab/_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/octasend/cQ2bTApWVYeTAmab/_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/octasend/cQ2bTApWVYeTAmab/_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/octasend/cQ2bTApWVYeTAmab/_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/octasend/cQ2bTApWVYeTAmab/_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/octasend/cQ2bTApWVYeTAmab/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Enviar mensagem - OctaSend\">\u003cmeta data-mint-head property=\"og:description\" content=\"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo messages). Sem channels, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta failed com error_code: \u0026quot;daily_limit_reached\u0026quot;. Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com respect_opt_out: true, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta skipped com reason_code: \u0026quot;contato_descadastrado\u0026quot;.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"OctaSend\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.octasend.com.br/api-reference/send-message\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://octasend.mintlify.site/_mintlify/api/og/v2?division=API+Reference\u0026amp;title=Enviar+mensagem\u0026amp;description=Envia+uma+comunica%C3%A7%C3%A3o+cadastrada+no+painel+para+um+destinat%C3%A1rio+%28envio+%C3%BAnico%29+ou+para+at%C3%A9+100+destinat%C3%A1rios+%28lote%2C+campo+%60messages%60%29.+Sem+%60channels%60%2C+a+mensagem\u0026amp;theme=1a75b38f2f616017dba7c41d\u0026amp;signature=f131114f6a6442f8f73c11a8a64e85651b354d9a7ac56e6522538ed85d03473e\">\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=\"Enviar mensagem - OctaSend\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo messages). Sem channels, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta failed com error_code: \u0026quot;daily_limit_reached\u0026quot;. Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com respect_opt_out: true, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta skipped com reason_code: \u0026quot;contato_descadastrado\u0026quot;.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://octasend.mintlify.site/_mintlify/api/og/v2?division=API+Reference\u0026amp;title=Enviar+mensagem\u0026amp;description=Envia+uma+comunica%C3%A7%C3%A3o+cadastrada+no+painel+para+um+destinat%C3%A1rio+%28envio+%C3%BAnico%29+ou+para+at%C3%A9+100+destinat%C3%A1rios+%28lote%2C+campo+%60messages%60%29.+Sem+%60channels%60%2C+a+mensagem\u0026amp;theme=1a75b38f2f616017dba7c41d\u0026amp;signature=f131114f6a6442f8f73c11a8a64e85651b354d9a7ac56e6522538ed85d03473e\">\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/octasend/cQ2bTApWVYeTAmab/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"OctaSend\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#465fff\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.octasend.com.br/api-reference/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/send-message.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.octasend.com.br/#organization\",\"name\":\"OctaSend\",\"url\":\"https://docs.octasend.com.br\"},{\"@type\":\"WebSite\",\"@id\":\"https://docs.octasend.com.br#website\",\"name\":\"OctaSend\",\"url\":\"https://docs.octasend.com.br\",\"publisher\":{\"@id\":\"https://docs.octasend.com.br/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.octasend.com.br/api-reference/send-message#webpage\",\"url\":\"https://docs.octasend.com.br/api-reference/send-message\",\"name\":\"Enviar mensagem\",\"description\":\"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo messages). Sem channels, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta failed com error_code: \\\"daily_limit_reached\\\". Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com respect_opt_out: true, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta skipped com reason_code: \\\"contato_descadastrado\\\".\",\"dateModified\":\"2026-09-27T21:42:24.333Z\",\"isPartOf\":{\"@id\":\"https://docs.octasend.com.br#website\"},\"breadcrumb\":{\"@id\":\"https://docs.octasend.com.br/api-reference/send-message#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.octasend.com.br/api-reference/send-message#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.octasend.com.br/api-reference/autenticacao\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Enviar mensagem\",\"item\":\"https://docs.octasend.com.br/api-reference/send-message\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.octasend.com.br/api-reference/send-message#apireference\",\"headline\":\"Enviar mensagem\",\"name\":\"Enviar mensagem\",\"description\":\"Envia uma comunicação cadastrada no painel para um destinatário (envio único) ou para até 100 destinatários (lote, campo messages). Sem channels, a mensagem sai em todos os canais ativos da comunicação, com a versão publicada de cada template (rascunhos do editor não saem pela API). Cada mensagem consome 1 do limite por minuto da conta (60 por padrão); o excedente é adiado e enviado nos minutos seguintes. Se a conta tiver um limite diário de mensagens, cada envio a um canal conta 1; acima dele, o canal volta failed com error_code: \\\"daily_limit_reached\\\". Por padrão o envio pela API é transacional e não é bloqueado pelo descadastro do contato; com respect_opt_out: true, o canal (e-mail, WhatsApp ou SMS) de que o contato se descadastrou é pulado e volta skipped com reason_code: \\\"contato_descadastrado\\\".\",\"url\":\"https://docs.octasend.com.br/api-reference/send-message\",\"mainEntityOfPage\":{\"@id\":\"https://docs.octasend.com.br/api-reference/send-message#webpage\"},\"dateModified\":\"2026-09-27T21:42:24.333Z\",\"publisher\":{\"@id\":\"https://docs.octasend.com.br/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.octasend.com.br#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"OctaSend\",\"creator\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","siteName":"OctaSend","nav":{"global":null,"groups":[{"group":"Primeiros Passos","pages":[{"title":"Introdução","href":"/index"},{"title":"Quickstart","href":"/quickstart"}]},{"group":"Mensageria","pages":[{"title":"Dashboard","href":"/plataforma/dashboard"},{"title":"Comunicações","href":"/plataforma/comunicacoes"},{"title":"Fluxo de comunicações","href":"/plataforma/fluxos"},{"title":"Automações","href":"/plataforma/automacoes"},{"title":"Campanhas","href":"/plataforma/campanhas"},{"title":"Contatos","href":"/plataforma/contatos"},{"title":"Logs de mensagens","href":"/plataforma/logs-de-mensagens"}]},{"group":"Guias de Canais","pages":[{"title":"WhatsApp","href":"/guias/whatsapp"},{"title":"E-mail","href":"/guias/email"},{"title":"Instagram e Messenger","href":"/guias/instagram-messenger"},{"title":"SMS","href":"/guias/sms"},{"title":"Slack","href":"/guias/slack"},{"title":"Telegram","href":"/guias/telegram"},{"title":"Web Push","href":"/guias/web-push"},{"title":"Push mobile","href":"/guias/push-mobile"},{"title":"TikTok","href":"/guias/tiktok"}]},{"group":"Atendimento e IA","pages":[{"title":"Chatbot com IA","href":"/plataforma/chatbot"},{"title":"Chatbot do site","href":"/plataforma/chatbot-do-site"},{"title":"Conversas e grupos do WhatsApp","href":"/plataforma/whatsapp-conversas-e-grupos"}]},{"group":"Site e engajamento","pages":[{"title":"OctaTag: a tag do site","href":"/plataforma/octatag"},{"title":"Tours guiados","href":"/plataforma/tours"},{"title":"Avaliações","href":"/plataforma/avaliacoes"},{"title":"Conteúdo Rico","href":"/plataforma/conteudo-rico"},{"title":"Popups personalizadas","icon":"square-stack","href":"/plataforma/popups"},{"title":"Cookies e LGPD","icon":"cookie","href":"/plataforma/cookies-lgpd"}]},{"group":"E-commerce","pages":[{"title":"E-commerce","href":"/plataforma/ecommerce"},{"title":"Avaliações de produtos","href":"/plataforma/avaliacoes-de-produtos"},{"title":"Dúvidas de produtos","icon":"circle-question","href":"/plataforma/duvidas-de-produto"}]},{"group":"Integrações","pages":[{"title":"Integrações","href":"/integracoes/visao-geral"},{"title":"Nuvem Shop","href":"/integracoes/nuvemshop"},{"title":"Wake Commerce","href":"/integracoes/wake"},{"title":"Bling","href":"/integracoes/bling"},{"title":"Asaas","href":"/integracoes/asaas"},{"title":"Conta Azul","href":"/integracoes/conta-azul"},{"title":"Shopify","href":"/integracoes/shopify"},{"title":"Tray","href":"/integracoes/tray"},{"title":"Yampi","href":"/integracoes/yampi"},{"title":"Olist Ecommerce","href":"/integracoes/olist"},{"title":"Linx Commerce","href":"/integracoes/linx"}]},{"group":"Conta e ferramentas","pages":[{"title":"Configurações e conta","href":"/plataforma/configuracoes"},{"title":"Design system de e-mail","href":"/plataforma/design-system"},{"title":"Token Control","href":"/plataforma/token-control"}]},{"group":"API Reference","pages":[{"title":"Autenticação","href":"/api-reference/autenticacao"},{"title":"Enviar mensagens","href":"/api-reference/enviar-mensagens"},{"title":"Consultar logs","href":"/api-reference/consultar-logs"},{"title":"Consultar comunicação","href":"/api-reference/consultar-comunicacao"},{"title":"Webhook de status","href":"/api-reference/webhook-de-status"},{"title":"Widget In-App","href":"/api-reference/widget-in-app"},{"title":"Servidor MCP","href":"/api-reference/mcp-server"},{"title":"Obter access token","openapi":"openapi.json POST /oauth-token","description":"Troca `client_id` + `client_secret` (OAuth 2.0 Client Credentials, RFC 6749 §4.4) por um `access_token` de 1 hora. Cada chamada emite um token novo; os anteriores continuam válidos até expirar. Limite: 30 pedidos por minuto por IP.","href":"/api-reference/oauth-token"},{"title":"Enviar mensagem","openapi":"openapi.json POST /send-message","href":"/api-reference/send-message"},{"title":"Consultar logs de mensagens","openapi":"openapi.json GET /query-message-logs","description":"Consulta o histórico de envios da conta (API, campanhas, automações e painel), do mais recente para o mais antigo, com filtros opcionais e paginação. Os filtros se combinam: só voltam os envios que atendem a todos os parâmetros informados.","href":"/api-reference/query-message-logs"},{"title":"Autenticar widget In-App","openapi":"openapi.json POST /in-app-auth","href":"/api-reference/in-app-auth"},{"title":"Registrar dispositivo Web Push","openapi":"openapi.json POST /web-push-register","href":"/api-reference/web-push-register"},{"title":"Obter configuração pública Web Push","openapi":"openapi.json GET /web-push-config","href":"/api-reference/web-push-config"}]}]},"basePath":"","title":"Enviar mensagem - OctaSend","buildId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","deploymentId":"dpl_BLQvU86QFwq3AhPofSTw6q8dGWKm","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-Myd8dsju.js","utils-C2HkQgW0.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-8rSppmTv.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-B6MjiCFm.js","snippetPresets-DwrSAONL.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","ApiExamples-1-a5UQKQ.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-C541m7wZ.js","shallow-CWELCZ77.js","getApiPlaygroundDisplay-CTo5Zn03.js","CodeSnippet-D--dzvnl.js","CodeSnippets-DM3cXEDh.js","Page-CxAy5y67.js","getPastedJson-C-VECgcL.js","icon-BPq2-Mg3.js","MethodPill-D9J5cUHd.js","DuplicateIcon-BqHaxUnD.js","createIcon-CIbcZHp9.js","DynamicMarkdown-BKiHAm_d.js","SectionHeading-DstQXt3H.js","axios-vUo_bRtp.js","Markdown-CpxgzsKA.js","clsx-C5EfhVm0.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CJ9Oly2E.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-Mk6P3qvh.js"]}