Synergy Connect

Documentação

Enviar uma mensagem

POST/{version}/{phone_number_id}/messages

Envia uma mensagem pelo número, no contrato da Cloud API da Meta: o corpo vai para a Meta sem alteração, e a resposta (de sucesso ou de erro) volta como a Meta mandou. Uma integração feita para a Meta só troca o host e o token.

Tipos: texto (com prévia de link), imagem, áudio (e mensagem de voz), vídeo, documento, figurinha — por id de upload ou por link —, localização, cartões de contato, reação, interativas (botões, lista, produto, lista de produtos, catálogo, flow, pedido de permissão para ligar) e modelos aprovados (template, com variáveis no cabeçalho, no corpo e nos botões). context.message_id responde a uma mensagem. O mesmo caminho marca uma mensagem recebida como lida e mostra "digitando…". Cada tipo tem um exemplo no corpo da requisição e um trecho de código.

Mídia: Áudio: AAC, AMR, MP3, M4A ou OGG (só codec OPUS, mono). Até 16 MB. Uma mensagem de voz (voice: true) é OGG/OPUS. Documento: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie por link. Imagem: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB. Figurinha: WEBP de 512 × 512 px: estática até 100 KB, animada até 500 KB. Vídeo: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.

Janela de 24 h: fora dela (desde a última mensagem do cliente) só um modelo aprovado é entregue; o resto a Meta recusa (código 131047, repassado).

A mensagem aparece na conversa do cliente na plataforma. A conversa fica com a automação (status automated); para onde vai a resposta do cliente depende do modo da chave — notify: vai para a fila dos atendentes; bot: continua com a integração — ou do header X-Synergy-Replies. Sem o Inbox no plano, a conversa fica sempre com a integração.

Uma chave bot não envia para uma conversa que está com um atendente ou na fila depois de passar por pessoas (409, código 1390001) até ela ser devolvida para a automação.

Idempotência: com o header Idempotency-Key, repetir a mesma requisição responde com o mesmo messages[].id e a mensagem chega à Meta uma vez só. A chave vale por chave de API e por número. Enquanto o primeiro envio está em andamento a repetição recebe 409 (código 1390002); se ele falhou, ou ficou preso por mais de 30 s, a repetição envia de novo. Reusar a chave para outro destinatário é recusado (422, código 1390003).

Não há retentativa do nosso lado: o erro da Meta volta na hora.

Corpo de até 64 KB. Enviar um flow com endpoint da Synergy exige um flow_token emitido por POST /v1/numbers/{phone_number_id}/flows/{flow_id}/token.

Instagram: com o ig-user-id de uma conta do Instagram conectada no lugar do phone_number_id, a mesma rota envia uma mensagem direta ou a resposta privada a um comentário. O corpo é o do Instagram (InstagramSendRequest, estrito, lido pela Synergy) e a resposta, InstagramSendResponse: 200 { recipient_id, message_id } ou, para recipient.comment_id, 202 { queued: true, comment_id }. Exige os recursos api e instagram no plano. A pessoa precisa já ter uma conversa com a conta, e a janela de 24 h é conferida pela Synergy antes de chamar a Meta (400, código 10, subcódigo 2534022); a API nunca usa a etiqueta Human Agent. Chaves de assistente não enviam pelo Instagram (403, código 200). Os erros do Instagram seguem o formato da Graph API; os guias instagram e customer-service-window têm os exemplos.

Requer#

Escopo da chave
Enviar mensagens messagesComo os escopos funcionam
Recurso do plano
API e webhooks apiVer os planos que incluem
Formato
O da API de WhatsApp Cloud da Meta, na requisição e na resposta.

Parâmetros#

No caminho#

No caminho
NomeTipoObrigatórioDescrição
versionstringobrigatórioA versão da Graph API da Meta que a chamada usa (vN.N): repassada à Meta como veio.
phone_number_idstringobrigatórioO phone_number_id do número na Meta (o mesmo da Cloud API). Precisa ser um número ativo da organização da chave.

Cabeçalhos#

Cabeçalhos
NomeTipoObrigatórioDescrição
AuthorizationstringobrigatórioSua chave de API, no formato Bearer <chave>. Veja Autenticação.
Idempotency-KeystringopcionalUma chave escolhida pela integração para UMA requisição (por exemplo o id do pedido). Repetir a requisição com a mesma chave não envia duas vezes.
X-Synergy-RepliesstringopcionalPara onde vai a resposta do cliente a esta mensagem: queue = fila dos atendentes, automation = continua com a integração. Sem o header vale o modo da chave (notify → queue, bot → automation). Valores: queue, automation.

Corpo#

Tipo de conteúdo: application/json.

O corpo de envio da Cloud API da Meta, repassado sem alteração na versão da Graph API do caminho: uma mensagem (OutgoingMessage, pelo type) ou uma confirmação de leitura (ReadReceiptRequest). O contrato é o da Meta e é ela que valida o conteúdo; a Synergy só confere o que está em x-synergy-notes. Campos que este documento não lista vão junto.

Texto#

TextMessage

Texto. Só vai dentro da janela de 24 h desde a última mensagem do cliente; fora dela, use um modelo (template).

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"text"opcional
  • textobjectobrigatório
    • bodystringobrigatório
      O texto: até 4096 caracteres. Aceita a formatação do WhatsApp (*negrito*, _itálico_…) e emojis.
    • preview_urlbooleanopcional
      true mostra a prévia do primeiro link do texto (o link precisa começar com http:// ou https://).
Texto

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: pedido-42-saiu' \
  -d '{"messaging_product":"whatsapp","to":"5511999999999","type":"text","text":{"body":"Seu pedido saiu para entrega."}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
    'Idempotency-Key': 'pedido-42-saiu',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "to": "5511999999999",
    "type": "text",
    "text": {
      "body": "Seu pedido saiu para entrega."
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
        "Idempotency-Key": "pedido-42-saiu",
    },
    json={
        "messaging_product": "whatsapp",
        "to": "5511999999999",
        "type": "text",
        "text": {
            "body": "Seu pedido saiu para entrega.",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "to": "5511999999999",
  "type": "text",
  "text": {
    "body": "Seu pedido saiu para entrega."
  }
}
Texto com prévia de link

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"text","text":{"body":"Acompanhe a entrega em https://www.example.com/pedidos/42","preview_url":true}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "text",
    "text": {
      "body": "Acompanhe a entrega em https://www.example.com/pedidos/42",
      "preview_url": true
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "text",
        "text": {
            "body": "Acompanhe a entrega em https://www.example.com/pedidos/42",
            "preview_url": True,
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "text",
  "text": {
    "body": "Acompanhe a entrega em https://www.example.com/pedidos/42",
    "preview_url": true
  }
}
Resposta a uma mensagem (context)

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","context":{"message_id":"wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA=="},"type":"text","text":{"body":"Sim, temos em azul e em verde."}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "context": {
      "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA=="
    },
    "type": "text",
    "text": {
      "body": "Sim, temos em azul e em verde."
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "context": {
            "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
        },
        "type": "text",
        "text": {
            "body": "Sim, temos em azul e em verde.",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "context": {
    "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA=="
  },
  "type": "text",
  "text": {
    "body": "Sim, temos em azul e em verde."
  }
}

Imagem#

ImageMessage

Imagem, com legenda opcional.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"image"obrigatório
  • imageobjectobrigatório
    Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB.
    • idstringopcional
      O id da mídia, de POST /{version}/{phone_number_id}/media.
    • captionstringopcional
      Legenda, até 1024 caracteres.
    • linkstringopcional
      A URL pública do arquivo (HTTP ou HTTPS).
Imagem por link

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"image","image":{"link":"https://arquivos.example.com/produtos/tenis-azul.jpg","caption":"Tênis azul, tamanhos 38 a 44"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "image",
    "image": {
      "link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
      "caption": "Tênis azul, tamanhos 38 a 44"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "image",
        "image": {
            "link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
            "caption": "Tênis azul, tamanhos 38 a 44",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "image",
  "image": {
    "link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
    "caption": "Tênis azul, tamanhos 38 a 44"
  }
}
Imagem por id (upload)

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"image","image":{"id":"1166846181421424","caption":"Seu comprovante"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "image",
    "image": {
      "id": "1166846181421424",
      "caption": "Seu comprovante"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "image",
        "image": {
            "id": "1166846181421424",
            "caption": "Seu comprovante",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "image",
  "image": {
    "id": "1166846181421424",
    "caption": "Seu comprovante"
  }
}

Áudio#

AudioMessage

Áudio. Não aceita legenda.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"audio"obrigatório
  • audioobjectobrigatório
    Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: AAC, AMR, MP3, M4A ou OGG (só codec OPUS, mono). Até 16 MB. Uma mensagem de voz (voice: true) é OGG/OPUS.
    • idstringopcional
      O id da mídia, de POST /{version}/{phone_number_id}/media.
    • voicebooleanopcional
      true: chega como mensagem de voz (OGG/OPUS), como as gravadas no aplicativo.
    • linkstringopcional
      A URL pública do arquivo (HTTP ou HTTPS).
Áudio por id, como mensagem de voz

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"audio","audio":{"id":"1166846181421424","voice":true}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "audio",
    "audio": {
      "id": "1166846181421424",
      "voice": true
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "audio",
        "audio": {
            "id": "1166846181421424",
            "voice": True,
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "audio",
  "audio": {
    "id": "1166846181421424",
    "voice": true
  }
}
Áudio por link

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"audio","audio":{"link":"https://arquivos.example.com/audios/boas-vindas.mp3"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "audio",
    "audio": {
      "link": "https://arquivos.example.com/audios/boas-vindas.mp3"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "audio",
        "audio": {
            "link": "https://arquivos.example.com/audios/boas-vindas.mp3",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "audio",
  "audio": {
    "link": "https://arquivos.example.com/audios/boas-vindas.mp3"
  }
}

Vídeo#

VideoMessage

Vídeo, com legenda opcional.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"video"obrigatório
  • videoobjectobrigatório
    Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.
    • idstringopcional
      O id da mídia, de POST /{version}/{phone_number_id}/media.
    • captionstringopcional
      Legenda, até 1024 caracteres.
    • linkstringopcional
      A URL pública do arquivo (HTTP ou HTTPS).
Vídeo por link

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"video","video":{"link":"https://arquivos.example.com/videos/como-usar.mp4","caption":"Veja como usar"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "video",
    "video": {
      "link": "https://arquivos.example.com/videos/como-usar.mp4",
      "caption": "Veja como usar"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "video",
        "video": {
            "link": "https://arquivos.example.com/videos/como-usar.mp4",
            "caption": "Veja como usar",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "video",
  "video": {
    "link": "https://arquivos.example.com/videos/como-usar.mp4",
    "caption": "Veja como usar"
  }
}
Vídeo por id (upload)

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"video","video":{"id":"1166846181421424"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "video",
    "video": {
      "id": "1166846181421424"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "video",
        "video": {
            "id": "1166846181421424",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "video",
  "video": {
    "id": "1166846181421424"
  }
}

Documento#

DocumentMessage

Documento, com legenda e nome de arquivo opcionais.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"document"obrigatório
  • documentobjectobrigatório
    Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie por link.
    • idstringopcional
      O id da mídia, de POST /{version}/{phone_number_id}/media.
    • captionstringopcional
      Legenda, até 1024 caracteres.
    • filenamestringopcional
      O nome do arquivo que o cliente vê (com a extensão, por exemplo boleto.pdf).
    • linkstringopcional
      A URL pública do arquivo (HTTP ou HTTPS).
Documento por link, com nome e legenda

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"document","document":{"link":"https://arquivos.example.com/boletos/42.pdf","filename":"boleto-pedido-42.pdf","caption":"Seu boleto vence dia 10"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "document",
    "document": {
      "link": "https://arquivos.example.com/boletos/42.pdf",
      "filename": "boleto-pedido-42.pdf",
      "caption": "Seu boleto vence dia 10"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "document",
        "document": {
            "link": "https://arquivos.example.com/boletos/42.pdf",
            "filename": "boleto-pedido-42.pdf",
            "caption": "Seu boleto vence dia 10",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "document",
  "document": {
    "link": "https://arquivos.example.com/boletos/42.pdf",
    "filename": "boleto-pedido-42.pdf",
    "caption": "Seu boleto vence dia 10"
  }
}
Documento por id (upload)

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"document","document":{"id":"1166846181421424","filename":"contrato.pdf"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "document",
    "document": {
      "id": "1166846181421424",
      "filename": "contrato.pdf"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "document",
        "document": {
            "id": "1166846181421424",
            "filename": "contrato.pdf",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "document",
  "document": {
    "id": "1166846181421424",
    "filename": "contrato.pdf"
  }
}

Figurinha#

StickerMessage

Figurinha. Não aceita legenda.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"sticker"obrigatório
  • stickerobjectobrigatório
    Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: WEBP de 512 × 512 px: estática até 100 KB, animada até 500 KB.
    • idstringopcional
      O id da mídia, de POST /{version}/{phone_number_id}/media.
    • linkstringopcional
      A URL pública do arquivo (HTTP ou HTTPS).
Figurinha por id (upload)

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"sticker","sticker":{"id":"1166846181421424"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "sticker",
    "sticker": {
      "id": "1166846181421424"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "sticker",
        "sticker": {
            "id": "1166846181421424",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "sticker",
  "sticker": {
    "id": "1166846181421424"
  }
}
Figurinha por link

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"sticker","sticker":{"link":"https://arquivos.example.com/figurinhas/obrigado.webp"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "sticker",
    "sticker": {
      "link": "https://arquivos.example.com/figurinhas/obrigado.webp"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "sticker",
        "sticker": {
            "link": "https://arquivos.example.com/figurinhas/obrigado.webp",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "sticker",
  "sticker": {
    "link": "https://arquivos.example.com/figurinhas/obrigado.webp"
  }
}

Localização#

LocationMessage

Um ponto no mapa.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"location"obrigatório
  • locationobjectobrigatório
    • latitudestring | numberobrigatório
      Latitude em graus decimais.
    • longitudestring | numberobrigatório
      Longitude em graus decimais.
    • namestringopcional
      O nome do lugar.
    • addressstringopcional
      O endereço.
Localização

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"location","location":{"latitude":"-23.561414","longitude":"-46.655881","name":"Loja Paulista","address":"Av. Paulista, 1000 - São Paulo, SP"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "location",
    "location": {
      "latitude": "-23.561414",
      "longitude": "-46.655881",
      "name": "Loja Paulista",
      "address": "Av. Paulista, 1000 - São Paulo, SP"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "location",
        "location": {
            "latitude": "-23.561414",
            "longitude": "-46.655881",
            "name": "Loja Paulista",
            "address": "Av. Paulista, 1000 - São Paulo, SP",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "location",
  "location": {
    "latitude": "-23.561414",
    "longitude": "-46.655881",
    "name": "Loja Paulista",
    "address": "Av. Paulista, 1000 - São Paulo, SP"
  }
}

Contatos#

ContactsMessage

Até 5 cartões de contato.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"contacts"obrigatório
  • contactsobject[]obrigatório
    • nameobjectopcional
      • formatted_namestringobrigatório
        O nome completo, como aparece no cartão.
      • first_namestringopcional
        Nome.
      • last_namestringopcional
        Sobrenome.
      • middle_namestringopcional
        Nome do meio.
      • prefixstringopcional
        Prefixo (por exemplo Dr.).
      • suffixstringopcional
        Sufixo.
    • phonesobject[]opcional
      • phonestringobrigatório
        O telefone, como deve aparecer.
      • typestringopcional
        Tipo. Valores: HOME, WORK.
      • wa_idstringopcional
        O WhatsApp do contato: com ele, o cartão mostra o botão de conversar.
    • emailsobject[]opcional
      • emailstringobrigatório
        E-mail.
      • typestringopcional
        Valores: HOME, WORK.
    • urlsobject[]opcional
      • urlstringobrigatório
        Site.
      • typestringopcional
        Valores: HOME, WORK.
    • addressesobject[]opcional
      • streetstringopcional
        Rua e número.
      • citystringopcional
        Cidade.
      • statestringopcional
        Estado (sigla).
      • zipstringopcional
        CEP.
      • countrystringopcional
        País.
      • country_codestringopcional
        Código ISO do país, duas letras.
      • typestringopcional
        Valores: HOME, WORK.
    • orgobjectopcional
      • companystringopcional
        Empresa.
      • departmentstringopcional
        Departamento.
      • titlestringopcional
        Cargo.
    • birthdaystringopcional
      Aniversário, AAAA-MM-DD.
Cartão de contato

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"contacts","contacts":[{"name":{"formatted_name":"Maria Souza","first_name":"Maria","last_name":"Souza"},"phones":[{"phone":"+55 11 98888-7777","type":"WORK","wa_id":"5511988887777"}],"emails":[{"email":"maria@example.com","type":"WORK"}],"org":{"company":"Loja Exemplo","title":"Atendimento"}}]}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "contacts",
    "contacts": [
      {
        "name": {
          "formatted_name": "Maria Souza",
          "first_name": "Maria",
          "last_name": "Souza"
        },
        "phones": [
          {
            "phone": "+55 11 98888-7777",
            "type": "WORK",
            "wa_id": "5511988887777"
          }
        ],
        "emails": [
          {
            "email": "maria@example.com",
            "type": "WORK"
          }
        ],
        "org": {
          "company": "Loja Exemplo",
          "title": "Atendimento"
        }
      }
    ]
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "contacts",
        "contacts": [
            {
                "name": {
                    "formatted_name": "Maria Souza",
                    "first_name": "Maria",
                    "last_name": "Souza",
                },
                "phones": [
                    {
                        "phone": "+55 11 98888-7777",
                        "type": "WORK",
                        "wa_id": "5511988887777",
                    },
                ],
                "emails": [
                    {
                        "email": "maria@example.com",
                        "type": "WORK",
                    },
                ],
                "org": {
                    "company": "Loja Exemplo",
                    "title": "Atendimento",
                },
            },
        ],
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "contacts",
  "contacts": [
    {
      "name": {
        "formatted_name": "Maria Souza",
        "first_name": "Maria",
        "last_name": "Souza"
      },
      "phones": [
        {
          "phone": "+55 11 98888-7777",
          "type": "WORK",
          "wa_id": "5511988887777"
        }
      ],
      "emails": [
        {
          "email": "maria@example.com",
          "type": "WORK"
        }
      ],
      "org": {
        "company": "Loja Exemplo",
        "title": "Atendimento"
      }
    }
  ]
}

Reação#

ReactionMessage

Uma reação a uma mensagem da conversa. emoji vazio ("") remove a reação.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • type"reaction"obrigatório
  • reactionobjectobrigatório
    • message_idstringobrigatório
      O wamid da mensagem que recebe a reação.
    • emojistringobrigatório
      Um emoji, ou "" para remover a reação.
Reação

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"reaction","reaction":{"message_id":"wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==","emoji":"👍"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "reaction",
    "reaction": {
      "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
      "emoji": "👍"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "reaction",
        "reaction": {
            "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
            "emoji": "👍",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "reaction",
  "reaction": {
    "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
    "emoji": "👍"
  }
}

Mensagem interativa#

InteractiveMessage

Mensagem interativa: botões, lista, produtos, catálogo, flow ou pedido de permissão de chamada. Só dentro da janela de 24 h.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"interactive"obrigatório
  • interactiveobjectobrigatório
    O conteúdo da mensagem interativa, pelo interactive.type.
    • type"button"opcional
    • headerobjectopcional
      Cabeçalho opcional: texto ou mídia (imagem, vídeo, documento).
      • type"text"opcional
      • textstringopcional
        Até 60 caracteres. Emojis, sem markdown.
      • imageobjectopcional
        Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB.
        • idstringopcional
          O id da mídia, de POST /{version}/{phone_number_id}/media.
        • linkstringopcional
          A URL pública do arquivo (HTTP ou HTTPS).
      • videoobjectopcional
        Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.
        • idstringopcional
          O id da mídia, de POST /{version}/{phone_number_id}/media.
        • linkstringopcional
          A URL pública do arquivo (HTTP ou HTTPS).
      • documentobjectopcional
        Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie por link.
        • idstringopcional
          O id da mídia, de POST /{version}/{phone_number_id}/media.
        • filenamestringopcional
          O nome do arquivo.
        • linkstringopcional
          A URL pública do arquivo (HTTP ou HTTPS).
    • bodyobjectopcional
      O texto da mensagem. Emojis e markdown.
      • textstringobrigatório
        Até 1024 caracteres.
    • footerobjectopcional
      Rodapé, opcional. Emojis, markdown e links.
      • textstringobrigatório
        Até 60 caracteres.
    • actionobjectopcional
      • buttonsobject[]obrigatório
        • type"reply"obrigatório
        • replyobjectobrigatório
          • idstringobrigatório
            O id do botão, que volta no webhook: até 256 caracteres, único, sem espaços nas pontas.
          • titlestringobrigatório
            O texto do botão: até 20 caracteres, único. Emojis, sem markdown.
Botões de resposta

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"button","header":{"type":"text","text":"Pedido 42"},"body":{"text":"Podemos confirmar a entrega para amanhã?"},"footer":{"text":"Loja Exemplo"},"action":{"buttons":[{"type":"reply","reply":{"id":"confirm","title":"Confirmar"}},{"type":"reply","reply":{"id":"reschedule","title":"Remarcar"}}]}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "button",
      "header": {
        "type": "text",
        "text": "Pedido 42"
      },
      "body": {
        "text": "Podemos confirmar a entrega para amanhã?"
      },
      "footer": {
        "text": "Loja Exemplo"
      },
      "action": {
        "buttons": [
          {
            "type": "reply",
            "reply": {
              "id": "confirm",
              "title": "Confirmar"
            }
          },
          {
            "type": "reply",
            "reply": {
              "id": "reschedule",
              "title": "Remarcar"
            }
          }
        ]
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "button",
            "header": {
                "type": "text",
                "text": "Pedido 42",
            },
            "body": {
                "text": "Podemos confirmar a entrega para amanhã?",
            },
            "footer": {
                "text": "Loja Exemplo",
            },
            "action": {
                "buttons": [
                    {
                        "type": "reply",
                        "reply": {
                            "id": "confirm",
                            "title": "Confirmar",
                        },
                    },
                    {
                        "type": "reply",
                        "reply": {
                            "id": "reschedule",
                            "title": "Remarcar",
                        },
                    },
                ],
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": {
      "type": "text",
      "text": "Pedido 42"
    },
    "body": {
      "text": "Podemos confirmar a entrega para amanhã?"
    },
    "footer": {
      "text": "Loja Exemplo"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "confirm",
            "title": "Confirmar"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "reschedule",
            "title": "Remarcar"
          }
        }
      ]
    }
  }
}
Botões de resposta com imagem no cabeçalho

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"button","header":{"type":"image","image":{"link":"https://arquivos.example.com/produtos/tenis-azul.jpg"}},"body":{"text":"Gostou deste modelo?"},"action":{"buttons":[{"type":"reply","reply":{"id":"want","title":"Quero"}},{"type":"reply","reply":{"id":"other","title":"Ver outro"}}]}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "button",
      "header": {
        "type": "image",
        "image": {
          "link": "https://arquivos.example.com/produtos/tenis-azul.jpg"
        }
      },
      "body": {
        "text": "Gostou deste modelo?"
      },
      "action": {
        "buttons": [
          {
            "type": "reply",
            "reply": {
              "id": "want",
              "title": "Quero"
            }
          },
          {
            "type": "reply",
            "reply": {
              "id": "other",
              "title": "Ver outro"
            }
          }
        ]
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "button",
            "header": {
                "type": "image",
                "image": {
                    "link": "https://arquivos.example.com/produtos/tenis-azul.jpg",
                },
            },
            "body": {
                "text": "Gostou deste modelo?",
            },
            "action": {
                "buttons": [
                    {
                        "type": "reply",
                        "reply": {
                            "id": "want",
                            "title": "Quero",
                        },
                    },
                    {
                        "type": "reply",
                        "reply": {
                            "id": "other",
                            "title": "Ver outro",
                        },
                    },
                ],
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "button",
    "header": {
      "type": "image",
      "image": {
        "link": "https://arquivos.example.com/produtos/tenis-azul.jpg"
      }
    },
    "body": {
      "text": "Gostou deste modelo?"
    },
    "action": {
      "buttons": [
        {
          "type": "reply",
          "reply": {
            "id": "want",
            "title": "Quero"
          }
        },
        {
          "type": "reply",
          "reply": {
            "id": "other",
            "title": "Ver outro"
          }
        }
      ]
    }
  }
}
Lista de opções

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"list","header":{"type":"text","text":"Frete"},"body":{"text":"Escolha como quer receber."},"footer":{"text":"Prazos em dias úteis"},"action":{"button":"Ver opções","sections":[{"title":"Entrega","rows":[{"id":"express","title":"Expressa","description":"1 a 2 dias"},{"id":"standard","title":"Normal","description":"3 a 5 dias"}]},{"title":"Retirada","rows":[{"id":"pickup","title":"Retirar na loja","description":"Hoje, a partir das 14 h"}]}]}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "list",
      "header": {
        "type": "text",
        "text": "Frete"
      },
      "body": {
        "text": "Escolha como quer receber."
      },
      "footer": {
        "text": "Prazos em dias úteis"
      },
      "action": {
        "button": "Ver opções",
        "sections": [
          {
            "title": "Entrega",
            "rows": [
              {
                "id": "express",
                "title": "Expressa",
                "description": "1 a 2 dias"
              },
              {
                "id": "standard",
                "title": "Normal",
                "description": "3 a 5 dias"
              }
            ]
          },
          {
            "title": "Retirada",
            "rows": [
              {
                "id": "pickup",
                "title": "Retirar na loja",
                "description": "Hoje, a partir das 14 h"
              }
            ]
          }
        ]
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "list",
            "header": {
                "type": "text",
                "text": "Frete",
            },
            "body": {
                "text": "Escolha como quer receber.",
            },
            "footer": {
                "text": "Prazos em dias úteis",
            },
            "action": {
                "button": "Ver opções",
                "sections": [
                    {
                        "title": "Entrega",
                        "rows": [
                            {
                                "id": "express",
                                "title": "Expressa",
                                "description": "1 a 2 dias",
                            },
                            {
                                "id": "standard",
                                "title": "Normal",
                                "description": "3 a 5 dias",
                            },
                        ],
                    },
                    {
                        "title": "Retirada",
                        "rows": [
                            {
                                "id": "pickup",
                                "title": "Retirar na loja",
                                "description": "Hoje, a partir das 14 h",
                            },
                        ],
                    },
                ],
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "list",
    "header": {
      "type": "text",
      "text": "Frete"
    },
    "body": {
      "text": "Escolha como quer receber."
    },
    "footer": {
      "text": "Prazos em dias úteis"
    },
    "action": {
      "button": "Ver opções",
      "sections": [
        {
          "title": "Entrega",
          "rows": [
            {
              "id": "express",
              "title": "Expressa",
              "description": "1 a 2 dias"
            },
            {
              "id": "standard",
              "title": "Normal",
              "description": "3 a 5 dias"
            }
          ]
        },
        {
          "title": "Retirada",
          "rows": [
            {
              "id": "pickup",
              "title": "Retirar na loja",
              "description": "Hoje, a partir das 14 h"
            }
          ]
        }
      ]
    }
  }
}
Um produto do catálogo

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"product","body":{"text":"O modelo que você pediu."},"action":{"catalog_id":"367025965434465","product_retailer_id":"tenis-azul-42"}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "product",
      "body": {
        "text": "O modelo que você pediu."
      },
      "action": {
        "catalog_id": "367025965434465",
        "product_retailer_id": "tenis-azul-42"
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "product",
            "body": {
                "text": "O modelo que você pediu.",
            },
            "action": {
                "catalog_id": "367025965434465",
                "product_retailer_id": "tenis-azul-42",
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "product",
    "body": {
      "text": "O modelo que você pediu."
    },
    "action": {
      "catalog_id": "367025965434465",
      "product_retailer_id": "tenis-azul-42"
    }
  }
}
Lista de produtos do catálogo

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"product_list","header":{"type":"text","text":"Novidades"},"body":{"text":"Separamos estes para você."},"action":{"catalog_id":"367025965434465","sections":[{"title":"Tênis","product_items":[{"product_retailer_id":"tenis-azul-42"},{"product_retailer_id":"tenis-verde-41"}]},{"title":"Meias","product_items":[{"product_retailer_id":"meia-kit-3"}]}]}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "product_list",
      "header": {
        "type": "text",
        "text": "Novidades"
      },
      "body": {
        "text": "Separamos estes para você."
      },
      "action": {
        "catalog_id": "367025965434465",
        "sections": [
          {
            "title": "Tênis",
            "product_items": [
              {
                "product_retailer_id": "tenis-azul-42"
              },
              {
                "product_retailer_id": "tenis-verde-41"
              }
            ]
          },
          {
            "title": "Meias",
            "product_items": [
              {
                "product_retailer_id": "meia-kit-3"
              }
            ]
          }
        ]
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "product_list",
            "header": {
                "type": "text",
                "text": "Novidades",
            },
            "body": {
                "text": "Separamos estes para você.",
            },
            "action": {
                "catalog_id": "367025965434465",
                "sections": [
                    {
                        "title": "Tênis",
                        "product_items": [
                            {
                                "product_retailer_id": "tenis-azul-42",
                            },
                            {
                                "product_retailer_id": "tenis-verde-41",
                            },
                        ],
                    },
                    {
                        "title": "Meias",
                        "product_items": [
                            {
                                "product_retailer_id": "meia-kit-3",
                            },
                        ],
                    },
                ],
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "product_list",
    "header": {
      "type": "text",
      "text": "Novidades"
    },
    "body": {
      "text": "Separamos estes para você."
    },
    "action": {
      "catalog_id": "367025965434465",
      "sections": [
        {
          "title": "Tênis",
          "product_items": [
            {
              "product_retailer_id": "tenis-azul-42"
            },
            {
              "product_retailer_id": "tenis-verde-41"
            }
          ]
        },
        {
          "title": "Meias",
          "product_items": [
            {
              "product_retailer_id": "meia-kit-3"
            }
          ]
        }
      ]
    }
  }
}
Catálogo

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"catalog_message","body":{"text":"Veja nosso catálogo e faça o pedido por aqui."},"footer":{"text":"Entregamos em toda a cidade"},"action":{"name":"catalog_message","parameters":{"thumbnail_product_retailer_id":"tenis-azul-42"}}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "catalog_message",
      "body": {
        "text": "Veja nosso catálogo e faça o pedido por aqui."
      },
      "footer": {
        "text": "Entregamos em toda a cidade"
      },
      "action": {
        "name": "catalog_message",
        "parameters": {
          "thumbnail_product_retailer_id": "tenis-azul-42"
        }
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "catalog_message",
            "body": {
                "text": "Veja nosso catálogo e faça o pedido por aqui.",
            },
            "footer": {
                "text": "Entregamos em toda a cidade",
            },
            "action": {
                "name": "catalog_message",
                "parameters": {
                    "thumbnail_product_retailer_id": "tenis-azul-42",
                },
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "catalog_message",
    "body": {
      "text": "Veja nosso catálogo e faça o pedido por aqui."
    },
    "footer": {
      "text": "Entregamos em toda a cidade"
    },
    "action": {
      "name": "catalog_message",
      "parameters": {
        "thumbnail_product_retailer_id": "tenis-azul-42"
      }
    }
  }
}
Flow (formulário)

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"flow","header":{"type":"text","text":"Cadastro"},"body":{"text":"Complete seu cadastro em 1 minuto."},"footer":{"text":"Leva menos de 1 minuto"},"action":{"name":"flow","parameters":{"flow_message_version":"3","flow_id":"9876543210","flow_cta":"Abrir cadastro","flow_token":"cadastro-pedido-42","flow_action":"navigate","flow_action_payload":{"screen":"SIGN_UP","data":{"order_id":"42"}}}}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "flow",
      "header": {
        "type": "text",
        "text": "Cadastro"
      },
      "body": {
        "text": "Complete seu cadastro em 1 minuto."
      },
      "footer": {
        "text": "Leva menos de 1 minuto"
      },
      "action": {
        "name": "flow",
        "parameters": {
          "flow_message_version": "3",
          "flow_id": "9876543210",
          "flow_cta": "Abrir cadastro",
          "flow_token": "cadastro-pedido-42",
          "flow_action": "navigate",
          "flow_action_payload": {
            "screen": "SIGN_UP",
            "data": {
              "order_id": "42"
            }
          }
        }
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "flow",
            "header": {
                "type": "text",
                "text": "Cadastro",
            },
            "body": {
                "text": "Complete seu cadastro em 1 minuto.",
            },
            "footer": {
                "text": "Leva menos de 1 minuto",
            },
            "action": {
                "name": "flow",
                "parameters": {
                    "flow_message_version": "3",
                    "flow_id": "9876543210",
                    "flow_cta": "Abrir cadastro",
                    "flow_token": "cadastro-pedido-42",
                    "flow_action": "navigate",
                    "flow_action_payload": {
                        "screen": "SIGN_UP",
                        "data": {
                            "order_id": "42",
                        },
                    },
                },
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "flow",
    "header": {
      "type": "text",
      "text": "Cadastro"
    },
    "body": {
      "text": "Complete seu cadastro em 1 minuto."
    },
    "footer": {
      "text": "Leva menos de 1 minuto"
    },
    "action": {
      "name": "flow",
      "parameters": {
        "flow_message_version": "3",
        "flow_id": "9876543210",
        "flow_cta": "Abrir cadastro",
        "flow_token": "cadastro-pedido-42",
        "flow_action": "navigate",
        "flow_action_payload": {
          "screen": "SIGN_UP",
          "data": {
            "order_id": "42"
          }
        }
      }
    }
  }
}
Pedido de permissão para ligar

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"interactive","interactive":{"type":"call_permission_request","body":{"text":"Podemos ligar para você pelo WhatsApp para resolver o seu pedido?"},"action":{"name":"call_permission_request"}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "interactive",
    "interactive": {
      "type": "call_permission_request",
      "body": {
        "text": "Podemos ligar para você pelo WhatsApp para resolver o seu pedido?"
      },
      "action": {
        "name": "call_permission_request"
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "interactive",
        "interactive": {
            "type": "call_permission_request",
            "body": {
                "text": "Podemos ligar para você pelo WhatsApp para resolver o seu pedido?",
            },
            "action": {
                "name": "call_permission_request",
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "interactive",
  "interactive": {
    "type": "call_permission_request",
    "body": {
      "text": "Podemos ligar para você pelo WhatsApp para resolver o seu pedido?"
    },
    "action": {
      "name": "call_permission_request"
    }
  }
}

Modelo (template)#

TemplateMessage

Um modelo de mensagem aprovado: o único tipo que vai fora da janela de 24 h. components traz os valores das variáveis do modelo.

  • messaging_product"whatsapp"opcional
    Sempre whatsapp.
  • recipient_typestringopcional
    individual (padrão) ou group. Valores: individual, group.
  • tostringobrigatório
    O telefone do destinatário com DDI (por exemplo 5511999999999), ou o id do grupo quando recipient_type é group.
  • contextobjectopcional
    Resposta a uma mensagem: a mensagem nova aparece citando a anterior. Não vale em reaction (ela já aponta a mensagem em reaction.message_id).
    • message_idstringobrigatório
      O wamid da mensagem respondida (recebida ou enviada).
  • type"template"obrigatório
  • templateobjectobrigatório
    • namestringobrigatório
      O nome do modelo aprovado.
    • languageobjectobrigatório
      O idioma do modelo, como foi aprovado.
      • codestringobrigatório
        O código do idioma e da região (por exemplo pt_BR, en_US).
      • policy"deterministic"opcional
        Opcional; o único valor é deterministic.
    • componentsobject[]opcional
      Só quando o modelo tem variáveis ou botões com valor: um item por componente (header, body, um button por botão).
      • type"header"opcional
      • parametersobject[]opcional
        • type"text"opcional
        • parameter_namestringopcional
          Só em modelos com parâmetros nomeados ({{first_name}}): o nome do parâmetro. Sem ele, a ordem vale ({{1}}, {{2}}…).
        • textstringopcional
          O valor.
        • imageobjectopcional
          Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: JPEG ou PNG, 8 bits, RGB ou RGBA. Até 5 MB.
          • idstringopcional
            O id da mídia, de POST /{version}/{phone_number_id}/media.
          • linkstringopcional
            A URL pública do arquivo (HTTP ou HTTPS).
        • videoobjectopcional
          Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: MP4 ou 3GPP, vídeo H.264 e áudio AAC (um só canal de áudio, ou nenhum). Até 16 MB.
          • idstringopcional
            O id da mídia, de POST /{version}/{phone_number_id}/media.
          • linkstringopcional
            A URL pública do arquivo (HTTP ou HTTPS).
        • documentobjectopcional
          Por id (o que POST /{version}/{phone_number_id}/media devolveu) ou por link (uma URL HTTP/HTTPS pública, que a Meta baixa na hora do envio) — nunca os dois. A Meta recomenda o id: um link fora do ar faz o envio falhar depois de aceito. Formatos: TXT, PDF, DOC/DOCX, XLS/XLSX ou PPT/PPTX. Até 100 MB na Meta — pelo upload da Synergy, até 16 MB: acima disso, envie por link.
          • idstringopcional
            O id da mídia, de POST /{version}/{phone_number_id}/media.
          • filenamestringopcional
            O nome do arquivo que o cliente vê.
          • linkstringopcional
            A URL pública do arquivo (HTTP ou HTTPS).
        • locationobjectopcional
          • latitudestring | numberobrigatório
            Latitude em graus decimais.
          • longitudestring | numberobrigatório
            Longitude em graus decimais.
          • namestringopcional
            O nome do lugar.
          • addressstringopcional
            O endereço.
      • sub_type"quick_reply"opcional
      • indexstring | integeropcional
        A posição do botão no modelo, a partir de 0 (a Meta aceita "0" ou 0).
Template sem variáveis

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"boas_vindas","language":{"code":"pt_BR","policy":"deterministic"}}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "boas_vindas",
      "language": {
        "code": "pt_BR",
        "policy": "deterministic"
      }
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "boas_vindas",
            "language": {
                "code": "pt_BR",
                "policy": "deterministic",
            },
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "boas_vindas",
    "language": {
      "code": "pt_BR",
      "policy": "deterministic"
    }
  }
}
Template com variáveis no corpo (texto, valor e data)

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"pedido_confirmado","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"Maria"},{"type":"currency","currency":{"fallback_value":"R$ 100,99","code":"BRL","amount_1000":100990}},{"type":"date_time","date_time":{"fallback_value":"10 de janeiro de 2026"}}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "pedido_confirmado",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "Maria"
            },
            {
              "type": "currency",
              "currency": {
                "fallback_value": "R$ 100,99",
                "code": "BRL",
                "amount_1000": 100990
              }
            },
            {
              "type": "date_time",
              "date_time": {
                "fallback_value": "10 de janeiro de 2026"
              }
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "pedido_confirmado",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "Maria",
                        },
                        {
                            "type": "currency",
                            "currency": {
                                "fallback_value": "R$ 100,99",
                                "code": "BRL",
                                "amount_1000": 100990,
                            },
                        },
                        {
                            "type": "date_time",
                            "date_time": {
                                "fallback_value": "10 de janeiro de 2026",
                            },
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "pedido_confirmado",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Maria"
          },
          {
            "type": "currency",
            "currency": {
              "fallback_value": "R$ 100,99",
              "code": "BRL",
              "amount_1000": 100990
            }
          },
          {
            "type": "date_time",
            "date_time": {
              "fallback_value": "10 de janeiro de 2026"
            }
          }
        ]
      }
    ]
  }
}
Template com parâmetros nomeados

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"pedido_saiu","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","parameter_name":"first_name","text":"Maria"},{"type":"text","parameter_name":"order_number","text":"42"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "pedido_saiu",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "parameter_name": "first_name",
              "text": "Maria"
            },
            {
              "type": "text",
              "parameter_name": "order_number",
              "text": "42"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "pedido_saiu",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "parameter_name": "first_name",
                            "text": "Maria",
                        },
                        {
                            "type": "text",
                            "parameter_name": "order_number",
                            "text": "42",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "pedido_saiu",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "parameter_name": "first_name",
            "text": "Maria"
          },
          {
            "type": "text",
            "parameter_name": "order_number",
            "text": "42"
          }
        ]
      }
    ]
  }
}
Template com variável no cabeçalho de texto

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"promocao_sazonal","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"text","text":"Black Friday"}]},{"type":"body","parameters":[{"type":"text","text":"30 de novembro"},{"type":"text","text":"BF25"},{"type":"text","text":"25%"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "promocao_sazonal",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "header",
          "parameters": [
            {
              "type": "text",
              "text": "Black Friday"
            }
          ]
        },
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "30 de novembro"
            },
            {
              "type": "text",
              "text": "BF25"
            },
            {
              "type": "text",
              "text": "25%"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "promocao_sazonal",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "header",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "Black Friday",
                        },
                    ],
                },
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "30 de novembro",
                        },
                        {
                            "type": "text",
                            "text": "BF25",
                        },
                        {
                            "type": "text",
                            "text": "25%",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "promocao_sazonal",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "text",
            "text": "Black Friday"
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "30 de novembro"
          },
          {
            "type": "text",
            "text": "BF25"
          },
          {
            "type": "text",
            "text": "25%"
          }
        ]
      }
    ]
  }
}
Template com cabeçalho de imagem

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"pedido_enviado","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"image","image":{"link":"https://arquivos.example.com/pedidos/42.jpg"}}]},{"type":"body","parameters":[{"type":"text","text":"Maria"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "pedido_enviado",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "header",
          "parameters": [
            {
              "type": "image",
              "image": {
                "link": "https://arquivos.example.com/pedidos/42.jpg"
              }
            }
          ]
        },
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "Maria"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "pedido_enviado",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "header",
                    "parameters": [
                        {
                            "type": "image",
                            "image": {
                                "link": "https://arquivos.example.com/pedidos/42.jpg",
                            },
                        },
                    ],
                },
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "Maria",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "pedido_enviado",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "image",
            "image": {
              "link": "https://arquivos.example.com/pedidos/42.jpg"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Maria"
          }
        ]
      }
    ]
  }
}
Template com cabeçalho de vídeo

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"lancamento","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"video","video":{"id":"1166846181421424"}}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "lancamento",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "header",
          "parameters": [
            {
              "type": "video",
              "video": {
                "id": "1166846181421424"
              }
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "lancamento",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "header",
                    "parameters": [
                        {
                            "type": "video",
                            "video": {
                                "id": "1166846181421424",
                            },
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "lancamento",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "video",
            "video": {
              "id": "1166846181421424"
            }
          }
        ]
      }
    ]
  }
}
Template com cabeçalho de documento

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"boleto_disponivel","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"document","document":{"link":"https://arquivos.example.com/boletos/42.pdf","filename":"boleto-pedido-42.pdf"}}]},{"type":"body","parameters":[{"type":"text","text":"10/01/2026"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "boleto_disponivel",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "header",
          "parameters": [
            {
              "type": "document",
              "document": {
                "link": "https://arquivos.example.com/boletos/42.pdf",
                "filename": "boleto-pedido-42.pdf"
              }
            }
          ]
        },
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "10/01/2026"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "boleto_disponivel",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "header",
                    "parameters": [
                        {
                            "type": "document",
                            "document": {
                                "link": "https://arquivos.example.com/boletos/42.pdf",
                                "filename": "boleto-pedido-42.pdf",
                            },
                        },
                    ],
                },
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "10/01/2026",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "boleto_disponivel",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "document",
            "document": {
              "link": "https://arquivos.example.com/boletos/42.pdf",
              "filename": "boleto-pedido-42.pdf"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "10/01/2026"
          }
        ]
      }
    ]
  }
}
Template com cabeçalho de localização

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"entrega_a_caminho","language":{"code":"pt_BR"},"components":[{"type":"header","parameters":[{"type":"location","location":{"latitude":"-23.561414","longitude":"-46.655881","name":"Loja Paulista","address":"Av. Paulista, 1000 - São Paulo, SP"}}]},{"type":"body","parameters":[{"type":"text","text":"Maria"},{"type":"text","text":"42"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "entrega_a_caminho",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "header",
          "parameters": [
            {
              "type": "location",
              "location": {
                "latitude": "-23.561414",
                "longitude": "-46.655881",
                "name": "Loja Paulista",
                "address": "Av. Paulista, 1000 - São Paulo, SP"
              }
            }
          ]
        },
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "Maria"
            },
            {
              "type": "text",
              "text": "42"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "entrega_a_caminho",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "header",
                    "parameters": [
                        {
                            "type": "location",
                            "location": {
                                "latitude": "-23.561414",
                                "longitude": "-46.655881",
                                "name": "Loja Paulista",
                                "address": "Av. Paulista, 1000 - São Paulo, SP",
                            },
                        },
                    ],
                },
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "Maria",
                        },
                        {
                            "type": "text",
                            "text": "42",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "entrega_a_caminho",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "header",
        "parameters": [
          {
            "type": "location",
            "location": {
              "latitude": "-23.561414",
              "longitude": "-46.655881",
              "name": "Loja Paulista",
              "address": "Av. Paulista, 1000 - São Paulo, SP"
            }
          }
        ]
      },
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Maria"
          },
          {
            "type": "text",
            "text": "42"
          }
        ]
      }
    ]
  }
}
Template com botões de resposta rápida

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"confirmar_entrega","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"42"}]},{"type":"button","sub_type":"quick_reply","index":"0","parameters":[{"type":"payload","payload":"CONFIRM_42"}]},{"type":"button","sub_type":"quick_reply","index":"1","parameters":[{"type":"payload","payload":"RESCHEDULE_42"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "confirmar_entrega",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "42"
            }
          ]
        },
        {
          "type": "button",
          "sub_type": "quick_reply",
          "index": "0",
          "parameters": [
            {
              "type": "payload",
              "payload": "CONFIRM_42"
            }
          ]
        },
        {
          "type": "button",
          "sub_type": "quick_reply",
          "index": "1",
          "parameters": [
            {
              "type": "payload",
              "payload": "RESCHEDULE_42"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "confirmar_entrega",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "42",
                        },
                    ],
                },
                {
                    "type": "button",
                    "sub_type": "quick_reply",
                    "index": "0",
                    "parameters": [
                        {
                            "type": "payload",
                            "payload": "CONFIRM_42",
                        },
                    ],
                },
                {
                    "type": "button",
                    "sub_type": "quick_reply",
                    "index": "1",
                    "parameters": [
                        {
                            "type": "payload",
                            "payload": "RESCHEDULE_42",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "confirmar_entrega",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "42"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "0",
        "parameters": [
          {
            "type": "payload",
            "payload": "CONFIRM_42"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "quick_reply",
        "index": "1",
        "parameters": [
          {
            "type": "payload",
            "payload": "RESCHEDULE_42"
          }
        ]
      }
    ]
  }
}
Template com botão de URL

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"rastrear_pedido","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"42"}]},{"type":"button","sub_type":"url","index":"0","parameters":[{"type":"text","text":"pedido-42"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "rastrear_pedido",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "42"
            }
          ]
        },
        {
          "type": "button",
          "sub_type": "url",
          "index": "0",
          "parameters": [
            {
              "type": "text",
              "text": "pedido-42"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "rastrear_pedido",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "42",
                        },
                    ],
                },
                {
                    "type": "button",
                    "sub_type": "url",
                    "index": "0",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "pedido-42",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "rastrear_pedido",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "42"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "url",
        "index": "0",
        "parameters": [
          {
            "type": "text",
            "text": "pedido-42"
          }
        ]
      }
    ]
  }
}
Template com botão de copiar código

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"cupom_desconto","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"25%"}]},{"type":"button","sub_type":"copy_code","index":"0","parameters":[{"type":"coupon_code","coupon_code":"BF25"}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "cupom_desconto",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "25%"
            }
          ]
        },
        {
          "type": "button",
          "sub_type": "copy_code",
          "index": "0",
          "parameters": [
            {
              "type": "coupon_code",
              "coupon_code": "BF25"
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "cupom_desconto",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "25%",
                        },
                    ],
                },
                {
                    "type": "button",
                    "sub_type": "copy_code",
                    "index": "0",
                    "parameters": [
                        {
                            "type": "coupon_code",
                            "coupon_code": "BF25",
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "cupom_desconto",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "25%"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "copy_code",
        "index": "0",
        "parameters": [
          {
            "type": "coupon_code",
            "coupon_code": "BF25"
          }
        ]
      }
    ]
  }
}
Template com botão de flow

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"cadastro_rapido","language":{"code":"pt_BR"},"components":[{"type":"button","sub_type":"flow","index":"0","parameters":[{"type":"action","action":{"flow_token":"cadastro-pedido-42","flow_action_data":{"order_id":"42"}}}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "cadastro_rapido",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "button",
          "sub_type": "flow",
          "index": "0",
          "parameters": [
            {
              "type": "action",
              "action": {
                "flow_token": "cadastro-pedido-42",
                "flow_action_data": {
                  "order_id": "42"
                }
              }
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "cadastro_rapido",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "button",
                    "sub_type": "flow",
                    "index": "0",
                    "parameters": [
                        {
                            "type": "action",
                            "action": {
                                "flow_token": "cadastro-pedido-42",
                                "flow_action_data": {
                                    "order_id": "42",
                                },
                            },
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "cadastro_rapido",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "button",
        "sub_type": "flow",
        "index": "0",
        "parameters": [
          {
            "type": "action",
            "action": {
              "flow_token": "cadastro-pedido-42",
              "flow_action_data": {
                "order_id": "42"
              }
            }
          }
        ]
      }
    ]
  }
}
Template com botão de catálogo

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","recipient_type":"individual","to":"5511999999999","type":"template","template":{"name":"conheca_o_catalogo","language":{"code":"pt_BR"},"components":[{"type":"body","parameters":[{"type":"text","text":"Maria"}]},{"type":"button","sub_type":"catalog","index":0,"parameters":[{"type":"action","action":{"thumbnail_product_retailer_id":"tenis-azul-42"}}]}]}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "recipient_type": "individual",
    "to": "5511999999999",
    "type": "template",
    "template": {
      "name": "conheca_o_catalogo",
      "language": {
        "code": "pt_BR"
      },
      "components": [
        {
          "type": "body",
          "parameters": [
            {
              "type": "text",
              "text": "Maria"
            }
          ]
        },
        {
          "type": "button",
          "sub_type": "catalog",
          "index": 0,
          "parameters": [
            {
              "type": "action",
              "action": {
                "thumbnail_product_retailer_id": "tenis-azul-42"
              }
            }
          ]
        }
      ]
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "recipient_type": "individual",
        "to": "5511999999999",
        "type": "template",
        "template": {
            "name": "conheca_o_catalogo",
            "language": {
                "code": "pt_BR",
            },
            "components": [
                {
                    "type": "body",
                    "parameters": [
                        {
                            "type": "text",
                            "text": "Maria",
                        },
                    ],
                },
                {
                    "type": "button",
                    "sub_type": "catalog",
                    "index": 0,
                    "parameters": [
                        {
                            "type": "action",
                            "action": {
                                "thumbnail_product_retailer_id": "tenis-azul-42",
                            },
                        },
                    ],
                },
            ],
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "recipient_type": "individual",
  "to": "5511999999999",
  "type": "template",
  "template": {
    "name": "conheca_o_catalogo",
    "language": {
      "code": "pt_BR"
    },
    "components": [
      {
        "type": "body",
        "parameters": [
          {
            "type": "text",
            "text": "Maria"
          }
        ]
      },
      {
        "type": "button",
        "sub_type": "catalog",
        "index": 0,
        "parameters": [
          {
            "type": "action",
            "action": {
              "thumbnail_product_retailer_id": "tenis-azul-42"
            }
          }
        ]
      }
    ]
  }
}

Confirmação de leitura#

ReadReceiptRequest

Marca como lida uma mensagem RECEBIDA (os dois tiques azuis para o cliente) e, com typing_indicator, mostra "digitando…" na conversa até a próxima mensagem da empresa, por no máximo 25 s. Não tem to nem type.

  • messaging_product"whatsapp"opcional
  • status"read"obrigatório
  • message_idstringobrigatório
    O wamid da mensagem recebida.
  • typing_indicatorobjectopcional
    Opcional: o indicador de digitação, que só existe junto da confirmação de leitura.
    • type"text"obrigatório
Confirmação de leitura, com indicador de digitação

curl

curl -X POST 'https://api.synergyconnect.com.br/v25.0/106540352242922/messages' \
  -H "Authorization: Bearer $SYNERGY_API_KEY" \
  -H 'Content-Type: application/json' \
  -d '{"messaging_product":"whatsapp","status":"read","message_id":"wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==","typing_indicator":{"type":"text"}}'

JavaScript

const res = await fetch('https://api.synergyconnect.com.br/v25.0/106540352242922/messages', {
  method: 'POST',
  headers: {
    Authorization: `Bearer ${process.env.SYNERGY_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    "messaging_product": "whatsapp",
    "status": "read",
    "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
    "typing_indicator": {
      "type": "text"
    }
  }),
});
console.log(res.status, await res.json());

Python

import os

import requests

res = requests.post(
    "https://api.synergyconnect.com.br/v25.0/106540352242922/messages",
    headers={
        "Authorization": f"Bearer {os.environ['SYNERGY_API_KEY']}",
    },
    json={
        "messaging_product": "whatsapp",
        "status": "read",
        "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
        "typing_indicator": {
            "type": "text",
        },
    },
)
print(res.status_code, res.json())

Corpo (JSON)

{
  "messaging_product": "whatsapp",
  "status": "read",
  "message_id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABIYFjNFQjBDNUE2RjQ3RjE4QjdBMzQ1AA==",
  "typing_indicator": {
    "type": "text"
  }
}

Respostas#

Respostas
StatusCódigoQuando acontece
200—Mensagem aceita
200—Repetição de uma Idempotency-Key já aceita: o mesmo id, respondido pela Synergy
200—Confirmação de leitura aceita
400100Falta to
400100O corpo não é JSON
400100O JSON não é um objeto
400100Corpo acima de 64 KB
4001390009Flow com endpoint da Synergy sem um flow_token válido para este número, flow e destinatário
401190Sem Authorization: Bearer, chave malformada ou forjada, chave revogada, ou chave sem acesso a este número
403200A chave não tem o escopo messages
4031390004O plano da organização não inclui a API
4031390005Conta em modo leitura ou suspensa por falta de pagamento
4031390007Envio de flow sem WhatsApp Flows no plano
4031390014O número foi congelado pela plataforma
4031390013Chave de assistente "só responder": o destinatário não escreveu para o número nos últimos 30 dias
404100O phone_number_id não é um número ativo desta organização (ou não tem de 5 a 20 dígitos)
4091390001Chave bot: a conversa está com um atendente
4091390002Um envio com esta Idempotency-Key ainda está em andamento
4091390008O flow usa o endpoint de outro provedor
4221390003A chave já foi usada para outro destinatário
429130429Mais de 2000 requisições em 10 s com esta chave neste número (Retry-After: 10)
429130429O número acabou de recusar por vazão, ou está sobrecarregado: o 429 se repete por 200 ms (Retry-After: 1)
429130429Mais de 64 mensagens automatizadas por segundo no número (Retry-After em segundos, mínimo 1)
4291390006Volume do ciclo esgotado (Retry-After: 60); details traz o link da recarga
4291390010Limite de envios de flow do plano no ciclo (sem Retry-After)
4291390012Chave de assistente: o teto de envios dela (por hora ou por dia) ou o teto somado das conexões de assistente neste número acabou (Retry-After = segundos até a janela abrir)
5032Serviço temporariamente indisponível
Outros131047Erro da Meta, como ela mandou

Os erros no formato da Meta trazem o código em error.code. Ver todos os erros.

Corpo da resposta 200#

Campos da resposta 200
NomeTipoObrigatórioDescrição
messaging_product"whatsapp"opcional
contactsobject[]opcional
contacts[].inputstringopcionalO to do envio, como foi mandado.
contacts[].wa_idstringopcionalO id do cliente no WhatsApp.
messagesobject[]obrigatório
messages[].idstringobrigatórioO wamid da mensagem: o mesmo que chega nos status do webhook.
messages[].message_statusstringopcionalaccepted: aceita e em processamento; held_for_quality_assessment: retida para avaliação de qualidade; paused: entrega pausada. Aceita não é entregue: acompanhe pelos status do webhook. Valores: accepted, held_for_quality_assessment, paused.

Limites de taxa#

  • Borda: 2000 requisições a cada 10 s por chave × número (API_EDGE_LIMIT).
  • Número: 64 mensagens automatizadas por segundo por número (rajada de 64), dentro do total de 80/s que o número divide com os atendentes; no máximo 200 envios em andamento.
  • Volume: passado o limite do ciclo do plano, os envios automatizados param (código 1390006, Retry-After: 60) até uma recarga, um upgrade ou o próximo ciclo.

Notas#

  • {version} é a versão da Graph API da Meta que a integração usa (por exemplo v25.0): a chamada é repassada à Meta nessa versão. O código aceita qualquer vN.N no formato; não confere se a Meta ainda atende a versão.
  • Os schemas do corpo são o contrato da Meta (do OpenAPI v25 dela e das notas de modelos), não uma validação da Synergy: além de ser JSON de objeto, o código só exige to (fora da confirmação de leitura). Um corpo fora destes schemas vai para a Meta do mesmo jeito, e o erro, se houver, é o dela.
  • O OpenAPI v25 da Meta não descreve as interativas cta_url (botão de link), location_request_message (pedir a localização), order_details e order_status (pagamentos): elas não estão nos schemas daqui, mas o corpo é repassado como vier, então também funcionam se a Meta as aceitar no número.
  • A confirmação de leitura (status: "read") e o indicador de digitação vão direto para a Meta: não viram mensagem na conversa, não passam pela Idempotency-Key nem pela regra da chave bot, mas contam no limite de taxa do número e param com o volume do ciclo esgotado, como um envio.
  • Um envio para um grupo (recipient_type: "group") que a Synergy ainda não conhece vai para a Meta mesmo assim, sem aparecer na plataforma.
  • Enviar um flow (mensagem interactive do tipo flow, ou um template com botão de flow) também exige a feature waFlows (403, código 1390007).
  • O código usa só os 200 primeiros caracteres de Idempotency-Key. Não há prazo de expiração no código: a chave vale enquanto a mensagem existir no histórico do número.
  • Um corpo acima de 64 KB responde 400 (código 100), não 413.
  • Um valor de X-Synergy-Replies diferente de queue e automation é ignorado (vale o modo da chave).
  • O Content-Type da requisição não é conferido: o corpo é lido como texto e interpretado como JSON.
  • O {phone_number_id} pode ser o ig-user-id de uma conta do Instagram: um id que a rota ainda não conhece é tentado como conta do Instagram uma vez (30 tentativas por minuto por chave, devolvidas quando o id é seu). Sem tentativa disponível, um número de WhatsApp válido envia normalmente, e um id desconhecido recebe 429 com Retry-After: 1, nunca um 404 que talvez fosse falso.
Resposta

200

{
  "messaging_product": "whatsapp",
  "contacts": [
    {
      "input": "5511999999999",
      "wa_id": "5511999999999"
    }
  ],
  "messages": [
    {
      "id": "wamid.HBgNNTUxMTk5OTk5OTk5ORUCABEYEjdGQjI0QzE4RTlBMDVENzQxAA==",
      "message_status": "accepted"
    }
  ]
}

Há 3 casos com este status; veja a tabela de respostas.

400

{
  "error": {
    "message": "(#100) Invalid parameter.",
    "type": "OAuthException",
    "code": 100,
    "error_data": {
      "messaging_product": "whatsapp",
      "details": "The parameter \"to\" is required."
    },
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 5 casos com este status; veja a tabela de respostas.

401

{
  "error": {
    "message": "(#190) Invalid OAuth access token.",
    "type": "OAuthException",
    "code": 190,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

403

{
  "error": {
    "message": "(#200) Permissions error: this key does not have access to this resource.",
    "type": "OAuthException",
    "code": 200,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 6 casos com este status; veja a tabela de respostas.

404

{
  "error": {
    "message": "(#100) Unsupported request: object does not exist or this key cannot reach it.",
    "type": "OAuthException",
    "code": 100,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

409

{
  "error": {
    "message": "(#1390001) This conversation is being handled by an agent. Bot keys cannot send to it until it is returned to the automation.",
    "type": "OAuthException",
    "code": 1390001,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 3 casos com este status; veja a tabela de respostas.

422

{
  "error": {
    "message": "(#1390003) This Idempotency-Key was already used for a message to another recipient.",
    "type": "OAuthException",
    "code": 1390003,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

429

{
  "error": {
    "message": "(#130429) Rate limit hit: the number's message throughput has been reached.",
    "type": "OAuthException",
    "code": 130429,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Há 6 casos com este status; veja a tabela de respostas.

503

{
  "error": {
    "message": "(#2) Service temporarily unavailable.",
    "type": "OAuthException",
    "code": 2,
    "fbtrace_id": "syn-3f9a1c0b"
  }
}

Ficou com dúvida? Escreva para suporte@synergyconnect.com.br.