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/messages com o Bearer Token
Bearer Token e URL de envio estão disponíveis no seu dashboard em Dados de Configuração. Cada conta tem um token único.

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.

CampoDescrição
URL de destinoQualquer endpoint HTTP(S) que aceite POST com JSON. Exemplos: n8n webhook, Make, endpoint próprio.
Dica: O sistema só aceita URLs HTTPS em produção. Para testes locais use ngrok ou similar.

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"
          }
        }
      ]
    }
  ]
}
sender.id é o campo que você usa no campo 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

POST https://app.boraautomatizar.com.br/api/messages
HeaderValor
AuthorizationBearer <bearer_token>obrigatório
Content-Typeapplication/jsonobrigatório

Enviar texto

CampoTipoDescrição
tostringID do destinatário (sender.id do webhook recebido)obrigatório
textstringTexto 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

CampoTipoDescrição
tostringID do destinatárioobrigatório
typestringimage | audio | video | fileobrigatório
urlstringURL pública do arquivoobrigatório
{
  "to":   "7654321098765432",
  "type": "image",
  "url":  "https://exemplo.com/foto.jpg"
}
A URL precisa ser pública e acessível pelo Meta. Formatos suportados: JPG, PNG, GIF (imagem) · MP4 (vídeo) · MP3, OGG (áudio).

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:

CampoValor
MethodPOST
URLhttps://app.boraautomatizar.com.br/api/messages
AuthenticationHeader Auth → Name: Authorization → Value: Bearer SEU_TOKEN
Body Content TypeJSON
Body (texto){ "to": "{{ $json.entry[0].messaging[0].sender.id }}", "text": "Sua resposta aqui" }
Dica n8n: No trigger Webhook, ative "Respond immediately" para evitar timeout do Meta (o Meta espera resposta 200 em menos de 5 segundos). Use um nó Respond to Webhook logo no início do fluxo antes de processar.

Exemplos — Make (Integromat)

Use o módulo HTTP → Make a Request:

CampoValor
URLhttps://app.boraautomatizar.com.br/api/messages
MethodPOST
HeadersAuthorization: Bearer SEU_TOKEN
Body typeRawJSON (application/json)
Content{"to": "{{1.entry[].messaging[].sender.id}}", "text": "Resposta"}

Códigos de erro

StatusErroCausa
401Authorization header ausenteHeader Authorization não enviado
401Token inválidoBearer Token incorreto ou conta removida
403Conta inativaConta bloqueada no painel admin
400Campo "to" obrigatórioCampo to ausente no body
400Informe "text" ou "type"Nenhum conteúdo de mensagem fornecido
502Falha ao enviar mensagemErro retornado pelo Instagram (token expirado, usuário bloqueou, etc.) — detalhes em detail
Token do Instagram expirado? Tokens de acesso são válidos por 60 dias. Se receber erro 502 com "error_subcode": 463, reconecte a conta no dashboard para renovar o token.