Skip to main content

Endpoint

Também disponível como POST /v1/conversations/send (alias). Escopo necessário: write:messages

Canais suportados

O canal Instagram não está disponível na API pública neste momento.
Você não precisa conhecer nem informar JID ou outro identificador interno do WhatsApp. A SocialSell resolve o destinatário a partir do telefone e também autorrepara contatos antigos no primeiro envio.

Rate limits por canal

Independentes do plano e cumulativos com o limite por minuto da chave:

Corpo da requisição

Comportamento de conversa

Se não existir conversa entre o contato e aquele número ou página, uma é criada automaticamente. A resposta sempre traz o conversation_id.

Escolha do número

Informar um número desconectado não devolve NO_WHATSAPP_INSTANCE: a requisição segue e falha mais adiante. Omitir o campo é mais seguro quando você não precisa de um número específico.

Idempotência

Esta rota aceita Idempotency-Key — repetir depois de um timeout não envia a mensagem duas vezes. Ver Idempotência.

Exemplos

Texto via WhatsApp

Imagem via WhatsApp

Modelo do WhatsApp Oficial

Com template_name informado, content, type e media_url não são usados — o texto vem do modelo aprovado.
Modelo só existe no WhatsApp Oficial. Em um número por QR Code a API devolve 422 TEMPLATE_REQUIRES_OFFICIAL_NUMBER. Confirme o canal do número antes: o campo channel (official | qrcode) aparece em whatsapp_instances de um disparo.
O modelo precisa estar aprovado (APPROVED), pertencer àquele número e bater com o template_language informado. Caso contrário: 422 TEMPLATE_NOT_FOUND.

Texto via Messenger

O ID explícito deve ser da mesma organização e corresponder à identidade Messenger do contato. O servidor nunca escolhe “a primeira página” quando o vínculo não é único.

Respostas

Retorna HTTP 201. O corpo tem duas formas, conforme o caminho de envio.

Texto e mídia

Modelo do WhatsApp Oficial

external_id só existe na resposta de modelo. Nos envios de texto e mídia o campo não vem — ele é gravado na mensagem, mas não devolvido. Se a sua integração concilia pelo identificador da Meta, leia depois em GET /v1/conversations/:id/messages.
No envio de modelo, type vem como template — valor fora da lista de type da requisição — e content traz o corpo do modelo com os parâmetros de template_components aplicados — o texto que o contato recebeu. Só um modelo sem texto no corpo devolve o rótulo [Modelo: nome].

Erros