Your AI Connector Docs

API de Transmissões

Uma transmissão é um envio de saída: um público, uma mensagem de abertura, um canal e um agendamento. Opcionalmente, também nomeia o Agente de IA que lida com as respostas recebidas. A API de Transmissões permite-lhe criar, definir preços, lançar e monitorizar esses envios a partir do seu próprio código em vez do painel de controlo. Para o produto em si, consulte o guia de Transmissões.

Todos os exemplos abaixo mostram o formato de consulta ?apiKey= em cURL e o cabeçalho X-API-Key em JavaScript e Python — qualquer um funciona em todos os endpoints.

No explorador da API. Todos os endpoints nesta página estão na especificação OpenAPI publicada, pelo que pode consultar os seus campos exatos e executar pedidos em tempo real no explorador da API.


Como um envio é estruturado

O envio de uma transmissão requer quatro chamadas, não apenas uma:

  1. Crie a transmissão com o seu público, canal e agendamento — começa como um Draft.
  2. Defina a mensagem de abertura. No WhatsApp Business, isso significa submeter um modelo para aprovação (ou escolher um que já tenha sido aprovado). Em qualquer outro canal, é texto simples.
  3. Estime o custo se quiser verificar o preço antes de gastar algo (opcional).
  4. Lance a transmissão. O lançamento executa uma verificação completa — público, mensagem, aprovação de modelo, remetente ligado — e inicia o envio ou indica exatamente o que falta.

Nada é enviado até que chame o lançamento.


O objeto de transmissão

{
  "id": "bcd123abc456",
  "name": "June promo",
  "status": "Draft",
  "channel": "whatsapp",
  "agent_id": "agt_789",
  "list_id": "lst_456",
  "list_name": "Newsletter subscribers",
  "total_contacts": 240,
  "send_to_new_list_members": false,
  "whats_app_template": {
    "body": "Hi {{first_name}}, our June offer is live.",
    "status": "approved",
    "sid": "HX0123...",
    "language": "en",
    "category": "marketing",
    "variables": ["first_name"]
  },
  "execution_date": 1781000000000,
  "drip_mode": true,
  "time_critical": false,
  "total_contacts_sent": 0,
  "credits_used": 0,
  "created_at": 1780900000000,
  "last_modified_at": 1780900000000
}

Os carimbos de data/hora são devolvidos como milissegundos da época (execution_date, created_at, last_modified_at, …), e qualquer referência de contacto é devolvida como uma string de caminho como contacts/uid_whatsapp_15551234567.

Campos que define

Campo Descrição
name Como a transmissão é designada no painel de controlo.
channel O canal único através do qual esta transmissão é enviada: whatsapp, whatsapp_web, sms, instagram, messenger, facebook, telegram, instagram_private, line, viber, imessage, email, chat_widget, custom_channel. Uma transmissão tem apenas um canal — para enviar o mesmo conteúdo para outro local, duplique-a noutro canal. tiktok e skool servem apenas para respostas e nunca podem ser utilizados para transmissões.
agent_id O Agente de IA que responde às mensagens. Deixe como null para que as respostas sejam enviadas para a caixa de entrada da sua equipa.
list_id A lista de contactos para a qual enviar. É assim que define o público a partir da API — consulte Contactos para criar e preencher listas.
list_name Nome de exibição apresentado junto à transmissão. Cosmético.
send_to_new_list_members true mantém a transmissão ativa para que qualquer pessoa adicionada à lista posteriormente também receba a mensagem inicial.
whats_app_template A mensagem de abertura. No WhatsApp Business, trata-se de um modelo aprovado real; em todos os outros canais, o seu body é utilizado como o texto de abertura simples. Defina-o através dos endpoints de modelos, não manualmente.
opener_media Uma imagem ou vídeo enviado com a mensagem de abertura. Envie sempre o objeto completo (ou null para o remover) — a escrita de chaves individuais no seu interior será rejeitada. Não suportado em SMS.
execution_date Quando enviar. Envie um carimbo de data/hora ISO 8601 ou milissegundos da época. Uma data futura agenda o envio; omita-o (ou utilize uma data passada) para enviar assim que iniciar.
drip_mode true distribui o envio em lotes ao longo do tempo em vez de tudo de uma vez.
time_critical true desativa a distribuição automática que é ativada acima de 50 contactos — para um público recetivo que precisa da mensagem agora. Não levanta o limite diário de envio do próprio canal.
batch_size Quantos contactos por lote ao utilizar o envio gradual (drip). Um número inteiro de 1 a 500.
frequency Com que frequência o próximo lote de envio gradual é enviado: { "type": "daily", "time": 1 } envia um lote todos os dias, { "type": "weekly", "time": 2 } a cada duas semanas. type é daily, weekly ou monthly para um envio gradual; hourly é recusado com um 400 numa transmissão gradual, no momento de guardar e novamente no momento do lançamento, porque cada lote necessita de um dia de envio completo.
trigger_days Os dias da semana em que um lote gradual pode ser enviado, como números com Domingo = 0 até Sábado = 6, por exemplo [1, 2, 3, 4, 5] apenas para dias úteis. Obrigatório antes de uma transmissão gradual poder ser iniciada.
send_window Enviar apenas entre estas horas de cada dia, no fuso horário da sua conta, em formato de 24 horas: { "start": "11:00", "end": "16:00" }. O início está incluído e o fim não, pelo que esse exemplo envia até às 15:59. Um início posterior ao fim funciona durante a noite (22:00 até 06:00). Numa transmissão gradual, também só abre no trigger_days. Iniciar fora da janela coloca o início na fila para a próxima vez que abrir (a transmissão lê Scheduled). null ou omitir envia a qualquer hora. Envie sempre o objeto completo (ou null), nunca uma chave com pontos; duas horas iguais são recusadas com um 400.
follow_up_config A cadeia de seguimento para contactos que nunca respondem.

Qualquer coisa que envie como user_id, id, status ou source_campaign_id é ignorada na criação e descartada na atualização — o estado apenas muda através dos endpoints de lançamento, pausa e retoma abaixo.

Campos que a plataforma mantém

status, total_contacts_sent, unique_contacts_replied, overall_reply_rate, credits_used, paused_reason, completion_summary, os contadores de lote e contacts (os contactos individuais anexados a partir do painel de controlo, lidos como strings de caminho). Leia-os, não os escreva.

Estados

Estado Significado
Draft A ser criado. Nada está agendado.
Pending Approval Iniciado, mas o seu modelo de WhatsApp ainda aguarda uma decisão. Começa a enviar automaticamente assim que o modelo for aprovado — não precisa de iniciar novamente.
Scheduled Iniciado com um execution_date futuro, ou iniciado fora da sua send_window e a aguardar que a janela abra.
Sending A enviar ativamente (uma transmissão ativa para novos membros da lista permanece aqui enquanto aguarda por eles).
Paused Retido — por si, ou automaticamente por uma verificação de segurança.
Sent Concluído.
Failed Concluído com mais de metade dos envios a falhar.

Criar uma difusão

POST /broadcasts — cria uma Draft.

cURL

curl -X POST "https://api.youraiconnector.com/v1/broadcasts?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "June promo",
    "channel": "whatsapp",
    "list_id": "lst_456",
    "agent_id": "agt_789",
    "drip_mode": true,
    "execution_date": "2026-06-15T09:00:00.000Z"
  }'

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/broadcasts", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({
    name: "June promo",
    channel: "whatsapp",
    list_id: "lst_456",
    agent_id: "agt_789",
    drip_mode: true,
    execution_date: "2026-06-15T09:00:00.000Z",
  }),
});
const { broadcast_id } = await res.json();

Python

import requests

res = requests.post(
    "https://api.youraiconnector.com/v1/broadcasts",
    headers={"X-API-Key": "YOUR_API_KEY"},
    json={
        "name": "June promo",
        "channel": "whatsapp",
        "list_id": "lst_456",
        "agent_id": "agt_789",
        "drip_mode": True,
        "execution_date": "2026-06-15T09:00:00.000Z",
    },
)
print(res.json()["broadcast_id"])

Resposta (201)

{ "success": true, "broadcast_id": "bcd123abc456" }

Listar difusões

GET /broadcasts — todas as difusões na conta, da mais recente para a mais antiga.

Parâmetros de consulta

Parâmetro Obrigatório Descrição
status Não Devolve apenas difusões num determinado estado, p. ex. Sending. Corresponda exatamente à grafia na tabela de estados.
curl "https://api.youraiconnector.com/v1/broadcasts?apiKey=YOUR_API_KEY&status=Sending"
const res = await fetch("https://api.youraiconnector.com/v1/broadcasts?status=Sending", {
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const { broadcasts } = await res.json();
res = requests.get(
    "https://api.youraiconnector.com/v1/broadcasts",
    headers={"X-API-Key": "YOUR_API_KEY"},
    params={"status": "Sending"},
)
broadcasts = res.json()["broadcasts"]

Resposta (200)

{ "success": true, "broadcasts": [{ "id": "bcd123abc456", "name": "June promo", "status": "Sending", "...": "..." }] }

Obter uma difusão

GET /broadcasts/{broadcastId} — devolve { "success": true, "broadcast": { ... } }. Utilize-o para consultar um envio em curso: total_contacts_sent, unique_contacts_replied, overall_reply_rate e credits_used são atualizados à medida que o processo decorre.

curl "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY"

Uma difusão que não existe na sua conta devolve 404.


Listar os destinatários de uma transmissão

GET /broadcasts/{broadcastId}/recipients devolve todos os contactos na audiência da transmissão com o estado de entrega da mensagem inicial, o motivo da falha e se o contacto respondeu. As falhas comunicadas pelo fornecedor após o envio (por exemplo, um número que não pode receber mensagens WhatsApp, código 63024) estão incluídas.

Parâmetro de consulta Significado
status all (predefinição), sent, delivered, read, failed, pending ou replied
limit Tamanho da página, 1 a 200. Predefinição 50
offset Quantos destinatários correspondentes ignorar. Predefinição 0
curl "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/recipients?status=failed&apiKey=YOUR_API_KEY"
{
  "success": true,
  "data": {
    "recipients": [
      {
        "contact_id": "ct_9f2",
        "name": "Anna Virtanen",
        "phone_number": "+358401234567",
        "identifier": "+358401234567",
        "status": "failed",
        "error_code": 63024,
        "failure_reason": "This number cannot receive WhatsApp messages. It may not be on WhatsApp, or the person has not accepted WhatsApp's latest terms",
        "replied": false,
        "sent_at": "2026-09-02T14:15:26.529Z"
      }
    ],
    "counts": { "all": 61, "sent": 0, "delivered": 9, "read": 47, "failed": 5, "pending": 0, "replied": 16 },
    "total": 5,
    "limit": 50,
    "offset": 0,
    "truncated": false
  }
}

status é pending até que a mensagem inicial tenha sido enviada para esse contacto. counts fornece o total para cada filtro, pelo que uma chamada é suficiente para identificar os separadores de filtro. Um membro da equipa que esteja configurado para ocultar detalhes de contacto verá os números de telefone mascarados.


Atualizar uma difusão

PUT /broadcasts/{broadcastId} — envie apenas os campos que pretende alterar. Também pode endereçar uma única chave dentro de um objeto aninhado com um caminho pontuado, p. ex. "whats_app_template.body".

curl -X PUT "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "name": "June promo (v2)", "execution_date": "2026-06-16T09:00:00.000Z" }'
await fetch("https://api.youraiconnector.com/v1/broadcasts/bcd123abc456", {
  method: "PUT",
  headers: { "X-API-Key": "YOUR_API_KEY", "Content-Type": "application/json" },
  body: JSON.stringify({ name: "June promo (v2)", execution_date: "2026-06-16T09:00:00.000Z" }),
});

Um corpo vazio devolve 400. Duas regras que vale a pena conhecer:

  • opener_media é tudo ou nada. Envie o objeto completo, ou null para remover o anexo. Um caminho pontuado para o mesmo (opener_media.name) é rejeitado com 400, porque um anexo parcialmente atualizado descreveria um ficheiro que não existe.
  • O estado não é editável. Utilize lançar, pausar e retomar.

A mensagem de abertura

Cada difusão contém o seu elemento de abertura em whats_app_template. O que isso significa depende do canal:

  • WhatsApp Business — tem de ser um modelo aprovado pelo WhatsApp. Utilize um dos dois endpoints abaixo.
  • Todos os outros canais (WhatsApp Web, SMS, Instagram, Messenger, Telegram, …) — o body do mesmo campo é simplesmente o texto que é enviado. Submetê-lo através do endpoint abaixo armazena-o e marca-o como pronto sem envolver o WhatsApp.

Submeter um modelo para aprovação

POST /broadcasts/{broadcastId}/template

Campo Obrigatório Descrição
body Sim O texto da mensagem, até 1024 caracteres. Utilize marcadores de posição {{variable}} para personalização.
name Não Nome do modelo. Por predefinição, assume o nome da difusão.
language Não Código do idioma. Por predefinição, assume en.
category Não marketing (predefinição), utility, authentication ou authentication-international. É o valor pelo qual o envio é taxado, por isso seja rigoroso.
variables Não Os nomes dos marcadores de posição, pela ordem em que aparecem. Se omitir, são lidos a partir do corpo — que é normalmente o que pretende, uma vez que o envio os preenche a partir de cada contacto.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/template?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "body": "Hi {{first_name}}, our June offer is live until Friday.",
    "language": "en",
    "category": "marketing"
  }'

Resposta (200)

{ "success": true, "broadcast_id": "bcd123abc456", "template_status": "pending", "template_sid": "HX0123..." }

template_status é o que o WhatsApp indica: pending enquanto está a ser revisto, approved quando está pronto a utilizar, rejected se foi recusado. Num canal que não seja WhatsApp, a resposta é diretamente approved com template_sid: null — não há nada para rever.

Coisas que o impedirão:

  • Submeter enquanto um modelo anterior ainda está sob revisão devolve 400. Aguarde primeiro pela decisão.
  • Editar um modelo que está atualmente aprovado mantém o aprovado ativo até que o novo seja processado, para que uma difusão em curso nunca perca o seu elemento de abertura.
  • Num número WhatsApp ligado diretamente através da Meta, uma difusão com uma imagem ou vídeo anexado não pode ser submetida (400) — os anexos são suportados na via gerida do WhatsApp Business e no WhatsApp Web.

Utilizar um modelo que já foi aprovado

POST /broadcasts/{broadcastId}/template/select — copia um modelo já aprovado da sua biblioteca de modelos para a difusão, pelo que não há nada por que esperar.

Campo Obrigatório Descrição
template_id Sim O id de um modelo aprovado na sua conta.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/template/select?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "template_id": "tpl_abc123" }'

Resposta (200)

{
  "success": true,
  "broadcast_id": "bcd123abc456",
  "template_status": "approved",
  "template_sid": "HX0123...",
  "body": "Hi {{first_name}}, our June offer is live until Friday.",
  "name": "june_promo",
  "language": "en",
  "variables": ["first_name"],
  "category": "marketing"
}

A aprovação é verificada do nosso lado a partir do registo da biblioteca — envia apenas o id. Recebe um 400 se a difusão não for um rascunho do WhatsApp, se o modelo não estiver aprovado, se for um modelo de seguimento em vez de um de abertura, ou se a difusão tiver um anexo (os modelos da biblioteca são apenas de texto). Um id de modelo que não esteja na sua conta devolve 404.


Estimar o custo

POST /broadcasts/{broadcastId}/estimate-cost — calcula o preço do envio antes de o confirmar. Disponível em difusões whatsapp e sms; qualquer outro canal devolve 400. A difusão necessita de um list_id, uma vez que a estimativa contabiliza a audiência.

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/estimate-cost?apiKey=YOUR_API_KEY"

Resposta do WhatsApp (200) — créditos, discriminados por país de destino:

{
  "success": true,
  "channel": "whatsapp",
  "billing_mode": "credits",
  "data": {
    "countries": [
      { "countryCode": "31", "name": "Netherlands", "iso": "NL", "flag": "🇳🇱", "contactCount": 180, "costPerContact": 1.2, "subtotal": 216 },
      { "countryCode": "1", "name": "United States", "iso": "US", "flag": "🇺🇸", "contactCount": 60, "costPerContact": 0.9, "subtotal": 54 }
    ],
    "totalContacts": 240,
    "totalTemplateCost": 270,
    "templateCategory": "marketing",
    "billing_mode": "credits",
    "service_messages_billable_soon": false
  }
}

Resposta por SMS (200) — Dólares americanos, com base nos preços em tempo real da Twilio para a sua própria conta Twilio:

{
  "success": true,
  "channel": "sms",
  "billing_mode": "twilio_direct",
  "data": {
    "totalContacts": 240,
    "messageLength": 118,
    "segmentsPerMessage": 1,
    "totalSegments": 240,
    "estimatedCostUsd": 1.788,
    "priceUnit": "USD",
    "billedByTwilio": true,
    "billing_mode": "twilio_direct",
    "service_messages_billable_soon": false
  }
}

Leia billing_mode antes de mostrar um número. Indica-lhe quem está a ser cobrado:

billing_mode Quem paga O que significam os valores
credits A sua conta Your AI Connector totalTemplateCost e os valores por país são créditos.
twilio_direct A sua própria conta Twilio estimatedCostUsd é o que a Twilio lhe cobrará.
meta_waba_direct A sua própria conta WhatsApp Business, cobrada pela Meta Cada valor de crédito aparece como null — propositadamente, para que nunca seja confundido com “gratuito”. As contagens de países e contactos continuam a ser precisas.

O SMS sem credenciais Twilio ligadas continua a devolver as contagens de segmentos, com estimatedCostUsd: 0 — não existem preços a consultar.


Iniciar uma difusão

POST /broadcasts/{broadcastId}/launch

O início verifica tudo primeiro e só depois avança com a difusão. Não existe início parcial: ou começa, ou nada muda e recebe um erro a explicar o motivo.

cURL

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch?apiKey=YOUR_API_KEY"

JavaScript

const res = await fetch("https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch", {
  method: "POST",
  headers: { "X-API-Key": "YOUR_API_KEY" },
});
const data = await res.json();
if (!data.success) console.error(data.error);

Python

res = requests.post(
    "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/launch",
    headers={"X-API-Key": "YOUR_API_KEY"},
)
print(res.json())

Resposta (200)

{ "success": true, "broadcast_id": "bcd123abc456", "status": "Scheduled" }

status é onde a transmissão foi entregue:

  • Scheduled — execution_date está no futuro.
  • Sending — começou agora.
  • Pending Approval — o modelo do WhatsApp ainda está sob análise. Será enviado automaticamente assim que o modelo for aprovado; não chame o lançamento novamente.

Apenas uma transmissão Draft (ou uma Pending Approval cujo modelo tenha sido aprovado entretanto) pode ser lançada — qualquer outra coisa devolve 400.

Por que um lançamento é recusado

Cada um destes retorna como 400 com uma mensagem error em linguagem simples:

Problema O que corrigir
Sem público Defina list_id (ou anexe contactos) antes de lançar.
Sem mensagem de abertura Defina a abertura — veja A mensagem de abertura.
Anexo em SMS SMS não pode conter uma imagem ou vídeo. Remova o anexo ou mova a transmissão para o WhatsApp.
Anexo não corresponde ao modelo aprovado No WhatsApp, o conteúdo multimédia reside dentro do modelo aprovado, por isso, trocar o anexo posteriormente significa submeter o modelo novamente.
Modelo rejeitado Reescreva a mensagem e submeta-a novamente.
Modelo nunca submetido Submeta-o (ou selecione um aprovado) primeiro.
Modelo aprovado mas em falta na sua conta WhatsApp Geralmente um modelo aprovado antes de o número terminar a ligação. Submeta-o novamente.
Sem remetente ligado para o canal Ligue o canal primeiro — veja Canais.
Canal apenas de resposta TikTok e Skool não permitem que uma empresa inicie uma conversa, por isso não podem ser usados para transmissões.
Já armado A transmissão já tem um envio agendado. Pause-a antes de lançar novamente.
Ainda a aguardar aprovação Será enviada automaticamente quando o modelo for aprovado.
Conta WhatsApp Business bloqueada pela Meta A Meta interrompeu as conversas iniciadas pela empresa na sua própria conta WhatsApp Business — normalmente um problema de método de pagamento. Corrija-o no Gestor de Negócios da Meta.
Iniciada a partir de uma campanha clássica Lance-a a partir do editor de campanhas. Veja campanhas clássicas em Transmissões.

Pausar e retomar

POST /broadcasts/{broadcastId}/pause para uma transmissão Sending ou Scheduled e cancela tudo o que estiver na fila.

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/pause?apiKey=YOUR_API_KEY"

Pausar uma transmissão Pending Approval coloca-a de volta em Draft — nada estava agendado, por isso não há nada para retomar. Qualquer outro estado devolve 400.

POST /broadcasts/{broadcastId}/resume reinicia uma transmissão Paused:

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/resume?apiKey=YOUR_API_KEY"

Resposta (200)

{ "success": true, "broadcast_id": "bcd123abc456" }

Retoma em Sending, ou volta para Scheduled se o seu execution_date ainda estiver no futuro. Apenas uma transmissão Paused pode ser retomada.


Continuar o envio após uma pausa por baixo envolvimento

POST /broadcasts/{broadcastId}/override-engagement-guard

Enquanto uma transmissão é enviada em lotes, medimos quantas pessoas responderam a cada lote antes de iniciar o seguinte. Se quase ninguém responder, a transmissão pausa-se automaticamente — um envio que continua a insistir no silêncio é a forma mais rápida de um número ser filtrado ou bloqueado. É o botão Continuar mesmo assim no painel de controlo.

Como a taxa de resposta que causou a pausa não pode mudar enquanto a transmissão está parada, um resume simples seria apenas pausado novamente pela verificação seguinte. Este endpoint representa a decisão de continuar mesmo assim: regista a anulação nessa transmissão específica e levanta a pausa na mesma chamada, caso a transmissão tenha sido pausada por baixo envolvimento.

curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/override-engagement-guard?apiKey=YOUR_API_KEY"

Resposta (200)

{ "success": true, "broadcast_id": "bcd123abc456", "status": "Sending", "resumed": true }
  • resumed: true — a transmissão foi pausada por baixo envolvimento e está agora a decorrer novamente; status é o estado para onde foi retomada.
  • resumed: false — nada foi levantado, a anulação é simplesmente registada para verificações futuras. É isto que obtém se a transmissão nunca tiver sido pausada, ou se tiver sido pausada por um motivo diferente (pausou-a manualmente, atingiu um limite de envio ou demasiados envios deram erro). Essas pausas não são levantadas aqui — retome-a manualmente depois de resolver a causa.

A anulação aplica-se apenas a esta transmissão. Não é uma definição da conta e é seguro chamar duas vezes.


Duplicar uma transmissão

POST /broadcasts/{broadcastId}/duplicate — copia o público, a mensagem e as definições para uma nova Draft. Tudo o que diz respeito à execução anterior (contadores, lotes, agendamento, estatísticas de resposta) começa do zero.

Campo Obrigatório Descrição
to_channel Não Cria a cópia num canal diferente. É assim que envia a mesma coisa em dois canais — uma transmissão só tem um canal.
curl -X POST "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456/duplicate?apiKey=YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "to_channel": "sms" }'

Resposta (201)

{ "success": true, "broadcast_id": "bcd999new111", "source_broadcast_id": "bcd123abc456" }

Uma cópia nunca herda uma aprovação ativa do WhatsApp: numa cópia do WhatsApp, o modelo é transferido a necessitar da sua confirmação e, numa cópia para outro canal, é removido e o texto torna-se o conteúdo simples. Copiar para SMS também remove qualquer anexo, uma vez que o SMS não permite o envio de anexos.


Eliminar uma transmissão

DELETE /broadcasts/{broadcastId}

curl -X DELETE "https://api.youraiconnector.com/v1/broadcasts/bcd123abc456?apiKey=YOUR_API_KEY"

Uma difusão Sending ou Scheduled é recusada com 400 — coloque-a primeiro em pausa.


Difusões que espelham uma campanha clássica

As campanhas clássicas que enviam mensagens também aparecem nas Difusões, e a API devolve-as juntamente com as difusões nativas (possuem um source_campaign_id). Comportam-se de forma ligeiramente diferente, porque a campanha continua a estar no comando:

  • Editar o público-alvo, a mensagem ou o agendamento funciona e é aplicado na campanha.
  • O canal, o agente de resposta, o anexo e todos os contadores de execução são apenas de leitura aqui — 400 se tentar alterá-los. Altere-os na campanha.
  • Iniciar devolve 400, direcionando-o para o editor da campanha.
  • Pausar e retomar funcionam e atuam sobre a campanha.
  • Eliminar devolve 400 — elimine a campanha em vez disso, e a sua entrada nas Difusões será removida com ela.
  • Duplicar cria uma difusão nativa independente, que é a forma suportada de migrar uma campanha comprovada.

Erros

Os pedidos falhados devolvem {"success": false, "error": "<message>"} com estes estados:

Estado Significado
400 Algo no pedido ou no estado da difusão está incorreto — um campo em falta, um anexo inválido ou uma ação de iniciar/pausar/retomar/eliminar que não é permitida no estado atual da difusão. A mensagem error indica o motivo.
401 Chave de API em falta ou inválida.
403 O seu plano não inclui acesso à API.
404 Essa difusão não existe na sua conta (ou, na seleção de modelos, esse modelo não existe).
429 Limite de taxa atingido. Aguarde e tente novamente.
500 Algo correu mal do nosso lado. Tente novamente após uma breve espera.

Próximos passos

  • Guia de Difusões — o produto por detrás destes endpoints, incluindo o ritmo e o comportamento de segurança
  • API de Contactos — crie a lista para a qual uma difusão é enviada
  • API de Modelos — gira os modelos WhatsApp aprovados que pode selecionar
  • API de Webhooks — subscreva Broadcast Started e Broadcast Completed em vez de consultar