Visão geral
O API Instagram funciona como uma ponte entre o Instagram e o seu sistema. Ele recebe eventos de mensagens diretamente do Meta e os repassa para a URL de webhook que você configurar. Para responder ao usuário, você chama a API de envio.
- Seu sistema recebe os eventos via webhook (POST enviado pelo API Instagram)
- Seu sistema responde chamando
POST /api/messagescom o Bearer Token
Autenticação
Todas as chamadas para /api/messages precisam do header Authorization com o Bearer Token da conta.
Authorization: Bearer seu_bearer_token_aqui
O token é gerado automaticamente quando você conecta sua conta e está disponível no dashboard. Ele não expira — só muda se você reconectar a conta.
Configurar webhook
No seu dashboard, cole a URL do seu sistema no campo URL de destino. Cada vez que alguém enviar uma mensagem no Instagram, o API Instagram fará um POST para essa URL com o payload completo.
| Campo | Descrição |
|---|---|
URL de destino | Qualquer endpoint HTTP(S) que aceite POST com JSON. Exemplos: n8n webhook, Make, endpoint próprio. |
Payload recebido
Quando uma mensagem chega, seu webhook recebe um POST com o seguinte JSON (enriquecido com nome e username do remetente):
{ "object": "instagram", "entry": [ { "id": "17841478367463447", // ID da sua conta "time": 1710500000, "messaging": [ { "sender": { "id": "7654321098765432", // use este ID para responder "name": "João Silva", "username": "joaosilva" }, "recipient": { "id": "17841478367463447", "name": "Minha Empresa", "username": "minhaempresa" }, "timestamp": 1710500000000, "message": { "mid": "aWdtc2dpZDovL...", "text": "Olá, quero saber o preço" } } ] } ] }
to ao enviar a resposta.
Tipos de mensagem recebidos
Texto
"message": { "mid": "...", "text": "Olá!" }
Imagem / Vídeo / Áudio
"message": { "mid": "...", "attachments": [ { "type": "image", // image | audio | video | file "payload": { "url": "https://cdn.instagram.com/..." } } ] }
Leitura confirmada (seen)
"read": { "watermark": 1710500000000 }
Postback (botão)
"postback": { "title": "Sim", "payload": "SIM_PAYLOAD" }
Endpoint de envio
| Header | Valor | |
|---|---|---|
Authorization | Bearer <bearer_token> | obrigatório |
Content-Type | application/json | obrigatório |
Enviar texto
| Campo | Tipo | Descrição | |
|---|---|---|---|
to | string | ID do destinatário (sender.id do webhook recebido) | obrigatório |
text | string | Texto da mensagem (máx. 1000 caracteres) | obrigatório |
{ "to": "7654321098765432", "text": "Olá! Em que posso ajudar?" }
Resposta de sucesso
{ "ok": true, "message_id": "aWdtc2dpZDovL...", "recipient_id": "7654321098765432" }
Enviar mídia
| Campo | Tipo | Descrição | |
|---|---|---|---|
to | string | ID do destinatário | obrigatório |
type | string | image | audio | video | file | obrigatório |
url | string | URL pública do arquivo | obrigatório |
{ "to": "7654321098765432", "type": "image", "url": "https://exemplo.com/foto.jpg" }
Exemplos — cURL
Enviar texto
curl -X POST https://app.boraautomatizar.com.br/api/messages \ -H "Authorization: Bearer SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{"to":"7654321098765432","text":"Olá!"}'
Enviar imagem
curl -X POST https://app.boraautomatizar.com.br/api/messages \ -H "Authorization: Bearer SEU_TOKEN" \ -H "Content-Type: application/json" \ -d '{"to":"7654321098765432","type":"image","url":"https://exemplo.com/img.jpg"}'
Exemplos — JavaScript (fetch)
const sendMessage = async (to, text) => { const res = await fetch('https://app.boraautomatizar.com.br/api/messages', { method: 'POST', headers: { 'Authorization': 'Bearer SEU_TOKEN', 'Content-Type': 'application/json', }, body: JSON.stringify({ to, text }), }); return res.json(); }; // Responder ao remetente do webhook const senderId = webhookBody.entry[0].messaging[0].sender.id; await sendMessage(senderId, "Recebemos sua mensagem!");
Exemplos — Python (requests)
import requests TOKEN = "SEU_TOKEN" BASE_URL = "https://app.boraautomatizar.com.br" def send_text(to, text): return requests.post( f"{BASE_URL}/api/messages", headers={"Authorization": f"Bearer {TOKEN}"}, json={"to": to, "text": text}, ).json() def send_image(to, url): return requests.post( f"{BASE_URL}/api/messages", headers={"Authorization": f"Bearer {TOKEN}"}, json={"to": to, "type": "image", "url": url}, ).json() # Uso sender_id = webhook_body["entry"][0]["messaging"][0]["sender"]["id"] send_text(sender_id, "Olá! Como posso ajudar?")
Exemplos — n8n
Use o node HTTP Request com as configurações abaixo:
| Campo | Valor |
|---|---|
| Method | POST |
| URL | https://app.boraautomatizar.com.br/api/messages |
| Authentication | Header Auth → Name: Authorization → Value: Bearer SEU_TOKEN |
| Body Content Type | JSON |
| Body (texto) | { "to": "{{ $json.entry[0].messaging[0].sender.id }}", "text": "Sua resposta aqui" } |
Exemplos — Make (Integromat)
Use o módulo HTTP → Make a Request:
| Campo | Valor |
|---|---|
| URL | https://app.boraautomatizar.com.br/api/messages |
| Method | POST |
| Headers | Authorization: Bearer SEU_TOKEN |
| Body type | Raw → JSON (application/json) |
| Content | {"to": "{{1.entry[].messaging[].sender.id}}", "text": "Resposta"} |
Códigos de erro
| Status | Erro | Causa |
|---|---|---|
401 | Authorization header ausente | Header Authorization não enviado |
401 | Token inválido | Bearer Token incorreto ou conta removida |
403 | Conta inativa | Conta bloqueada no painel admin |
400 | Campo "to" obrigatório | Campo to ausente no body |
400 | Informe "text" ou "type" | Nenhum conteúdo de mensagem fornecido |
502 | Falha ao enviar mensagem | Erro retornado pelo Instagram (token expirado, usuário bloqueou, etc.) — detalhes em detail |
"error_subcode": 463, reconecte a conta no dashboard para renovar o token.