indicae
Para empresasSeja indicadorDocsEntrar
Documentação técnica

Integração com o Indicae

Referência completa para conectar seu ERP ou sistema ao Indicae — criar afiliados, atualizar status de leads e receber webhooks de conversão.

Como funcionaAutenticaçãoCriar afiliadoAtualizar leadWebhooks de saídaErrosChecklist

Como funciona

A integração tem dois sentidos: seu ERP envia eventos ao Indicae (inbound) e o Indicae notifica seu ERP sobre novos leads e conversões (outbound webhooks).

  1. 1Cliente fecha pedido no ERP da empresa.
  2. 2ERP chama POST erp-order-confirmed → Indicae cria o afiliado e devolve um welcome_url (magic-link).
  3. 3Empresa entrega o welcome_url ao cliente (WhatsApp, e-mail ou SMS). O Indicae já envia via WhatsApp por padrão — você pode desativar se quiser controlar o envio.
  4. 4Cliente acessa o link e cai direto no painel dele, com o código de indicação pronto para copiar.
  5. 5Indicado preenche o formulário na LP do afiliado → lead é criado no Indicae.
  6. 6Indicae dispara o webhook referral.created para a URL configurada no painel da empresa.
  7. 7Conforme o lead avança no funil, o ERP chama erp-referral-status para atualizar o estágio. Quando converter, inclua o bloco contract para liberar a comissão.

Autenticação

Toda requisição inbound (seu ERP → Indicae) é autenticada por um token de integração da empresa, enviado no header Authorization: Bearer. O token identifica a empresa — não há header de slug nem assinatura HMAC, e as chamadas trafegam sempre por HTTPS.

Gere e gerencie o token em Painel admin → Configurações → Webhooks → Token de integração. Ele é exibido uma única vez na geração; gerar um novo revoga o anterior na hora.
Headers obrigatórios em toda requisição
  • Content-Type: application/json
  • Authorization: Bearer <token de integração>

Criar afiliado POST

Dispare quando um cliente fechar um pedido no seu ERP. O Indicae registra o afiliado, gera o código de indicação e devolve um welcome_url (magic-link). Se o afiliado já existir pelo CPF, o endpoint é idempotente — retorna o afiliado existente sem duplicar.

URL do endpoint
https://fwenhjalbnlphpkdsszy.supabase.co/functions/v1/erp-order-confirmed
affiliate_scope
ValorComportamento
hubAfiliado pode indicar para todas as empresas ativas no hub.
specific_productsAfiliado só indica os produtos definidos no campo product_ids (array de UUIDs).
Payload de exemplo
{
  "order_id": "ORD-12345",
  "customer": {
    "cpf": "12345678900",
    "first_name": "Daniel",
    "last_name": "Almeida",
    "phone": "+5511999998888",
    "email": "daniel@example.com"
  },
  "product_type": "credito",
  "amount": 5000,
  "confirmed_at": "2026-05-14T15:32:11Z",
  "affiliate_scope": "hub"
}
Resposta esperada (200)
{
  "status": "ok",
  "affiliate_id": "8e6f0c8c-...",
  "referral_code": "Dn7K2aZx",
  "welcome_url": "https://<sub>.indicae.club/auto/<token>",
  "welcome_sent_to": "+5511999998888",
  "referred_name": "Daniel Almeida",
  "referrer_name": "Marina Souza"
}
Exemplo curl
export INDICAE_TOKEN='ind_live_...'  # gerado no painel

curl -X POST 'https://fwenhjalbnlphpkdsszy.supabase.co/functions/v1/erp-order-confirmed' \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $INDICAE_TOKEN" \
  --data-raw '{
  "order_id": "ORD-12345",
  "customer": {
    "cpf": "12345678900",
    "first_name": "Daniel",
    "last_name": "Almeida",
    "phone": "+5511999998888",
    "email": "daniel@example.com"
  },
  "product_type": "credito",
  "amount": 5000,
  "confirmed_at": "2026-05-14T15:32:11Z",
  "affiliate_scope": "hub"
}'
O welcome_url é o magic-link que você entrega ao cliente (Indicae já envia via WhatsApp por padrão). Ao abrir, o cliente cai direto na área dele dentro do /app com o link de indicação pronto para copiar.
referred_name é o nome do cliente (o indicado) que recebeu o welcome. referrer_name é o nome de quem o indicou — resolvido pelo telefone a partir da indicação registrada na LP. Vem null quando o cliente não veio de uma indicação (compra direta ou lead orgânico).

Atualizar status do lead POST

Dispare a cada mudança de estágio do lead no funil da empresa. O referral_id é o UUID devolvido pelo webhook referral.created quando o lead foi criado.

URL do endpoint
https://fwenhjalbnlphpkdsszy.supabase.co/functions/v1/erp-referral-status
Estágios disponíveis
to_statusSignificadoCampos extras
in_serviceLead em atendimento pela equipe comercial—
in_analysisLead em análise / proposta enviada—
convertedNegócio fechado — comissão liberada na carênciacontract.external_contract_id, contract.sale_amount
lostLead perdido / descartado—
Payload — atualização simples (in_service)
{
  "referral_id": "uuid-do-indicae",
  "external_id": "LEAD-789",
  "to_status": "in_service",
  "occurred_at": "2026-05-14T16:00:00Z",
  "notes": "Cliente respondeu o primeiro contato"
}
Payload — conversão (converted com bloco contract)
{
  "referral_id": "uuid-do-indicae",
  "external_id": "LEAD-789",
  "to_status": "converted",
  "occurred_at": "2026-05-14T18:00:00Z",
  "contract": {
    "external_contract_id": "CTR-001",
    "sale_amount": 5000
  }
}
Resposta esperada (200)
{
  "status": "ok",
  "referral_id": "8e6f0c8c-...",
  "stage": "in_service"
}
Exemplo curl
export INDICAE_TOKEN='ind_live_...'  # gerado no painel

curl -X POST 'https://fwenhjalbnlphpkdsszy.supabase.co/functions/v1/erp-referral-status' \
  -H 'Content-Type: application/json' \
  -H "Authorization: Bearer $INDICAE_TOKEN" \
  --data-raw '{
  "referral_id": "uuid-do-indicae",
  "external_id": "LEAD-789",
  "to_status": "in_service",
  "occurred_at": "2026-05-14T16:00:00Z",
  "notes": "Cliente respondeu o primeiro contato"
}'

Webhooks de saída

O Indicae envia eventos para a URL configurada no painel (Configurações → Integração → URL de webhook). Configure quais eventos deseja receber ou deixe em branco para receber todos.

Eventos disponíveis
EventoQuando é disparado
referral.createdNovo lead criado a partir de uma indicação.
referral.stage_changedEstágio do lead atualizado via erp-referral-status.
referral.convertedLead convertido — inclui sale_amount e snapshot de comissão.
withdrawal.paidSaque de comissão pago ao afiliado.
Validar a assinatura recebida

O Indicae assina cada webhook enviado com o mesmo algoritmo HMAC-SHA256. Valide o cabeçalho X-Indicaai-Signature antes de processar o payload.

  • Leia X-Indicaai-Timestamp e X-Indicaai-Signature dos headers.
  • Recalcule: sha256=hex(HMAC_SHA256(segredo, "{timestamp}.{rawBody}"))
  • Compare com o valor recebido (use comparação segura contra timing attacks).
  • Rejeite se o timestamp estiver fora de ±5 minutos.
Payload de exemplo — referral.created
{
  "event": "referral.created",
  "delivery_id": "uuid",
  "occurred_at": "2026-05-14T15:35:00Z",
  "data": {
    "referral_id": "uuid-do-indicae",
    "affiliate_id": "uuid-do-afiliado",
    "referral_code": "Dn7K2aZx",
    "lead_name": "Maria Souza",
    "lead_phone": "+5511****8888",
    "product_type": "credito",
    "stage": "received"
  }
}
O Indicae faz até 5 tentativas com backoff exponencial em caso de falha (timeout ou status ≥ 500). Retorne 200 imediatamente e processe de forma assíncrona para evitar timeouts.

Códigos de erro

StatusNomeDescrição
200OKRequisição processada com sucesso.
400Bad RequestPayload inválido ou campos obrigatórios ausentes.
401UnauthorizedToken de integração ausente ou inválido.
409Conflictorder_id ou external_id já processado (idempotência).
429Too Many RequestsRate limit atingido. Aguarde e tente novamente.
500Internal Server ErrorErro interno no Indicae. Contate o suporte se persistir.

O corpo de erro segue o formato { error: "mensagem", code: "SNAKE_CASE" }.

Checklist de go-live

  • Token de integração gerado no painel (Configurações → Webhooks → Token de integração).
  • URL de webhook de saída cadastrada no painel (para receber eventos do Indicae).
  • Testar erp-order-confirmed com um order_id fictício e verificar retorno do welcome_url.
  • Confirmar recebimento do webhook referral.created ao submeter um formulário de teste.
  • Testar ciclo completo: erp-referral-status com to_status=converted incluindo o bloco contract.
  • Validar que a assinatura dos webhooks recebidos está sendo verificada no seu sistema.

Dúvidas? integracoes@indicae.club

indicae
·© 2026 Indicae
contato@indicae.clubPrivacidade LGPD