Referência da API

Integre o enuchat nos seus sistemas usando a API Tenant. Gira conversas, envie mensagens e aceda a dados de faturação de forma programática.

Autenticação

Todos os pedidos à API são autenticados através de uma chave API enviada no cabeçalho X-Api-Key.

Obter a sua chave API

  1. Vá a Definições → Chaves API no painel
  2. Clique em Criar chave API e dê-lhe um nome
  3. Copie a chave imediatamente — só é mostrada uma vez
  4. Guarde-a em segurança (variável de ambiente, gestor de segredos)

Efetuar pedidos

Inclua a chave em cada pedido:

curl -H "X-Api-Key: tak_your_key_here" \
     https://api.enuchat.com/api/v1/tenant-api/widgets

Todas as respostas são em JSON. As respostas bem-sucedidas têm um campo data. Os erros têm um campo error com code e message.

Segurança: as chaves API são hashed (SHA-256) na nossa base de dados. Nunca guardamos a chave em bruto. Trate a sua chave como uma palavra-passe — não a comite no código nem a partilhe publicamente.

URL base

https://api.enuchat.com/api/v1/tenant-api

Todos os endpoints abaixo são relativos a este URL base.

Endpoints

GET /widgets

Lista todos os widgets da sua conta.

Resposta

{'{'}
  "data": [
{'{'}
      "id": "019d19c6-7e0b-...",
      "name": "Main Website Chat",
      "isActive": true,
      "aiEnabled": true,
      "translationEnabled": true,
      "primaryColor": "#2563eb",
      "position": "bottom-right"
    }
  ]
}

GET /conversations

Lista conversas, ordenadas pela mensagem mais recente.

Parâmetros de consulta

ParâmetroTipoDescrição
statusstringFiltrar por estado: open, pending, closed
widgetIdstringFiltrar por UUID de widget
limitintegerMáximo de resultados (predefinição 20, máximo 100)
offsetintegerIgnorar N resultados

Exemplo

curl -H "X-Api-Key: tak_..." \
     "https://api.enuchat.com/api/v1/tenant-api/conversations?status=open&limit=10"

Resposta

{'{'}
  "data": [
{'{'}
      "id": "019d6724-000e-...",
      "widgetId": "019d19c6-7e0b-...",
      "visitorId": "v-abc123",
      "visitorName": "John",
      "visitorEmail": "john{'@'}example.com",
      "visitorLanguage": "en",
      "status": "open",
      "assignedTo": null,
      "lastMessageAt": "2026-04-11T14:30:00+00:00",
      "startedAt": "2026-04-11T14:25:00+00:00"
    }
  ]
}

GET /conversations/{'{'}id}

Obter uma conversa com todas as mensagens.

Parâmetros de consulta

ParâmetroTipoDescrição
limitintegerMensagens máximas (predefinição 50, máximo 200)

Resposta

{'{'}
  "data": {'{'}
    "id": "019d6724-000e-...",
    "visitorLanguage": "en",
    "status": "open",
    "messages": [
{'{'}
        "id": "019d6724-1234-...",
        "role": "visitor",
        "content": "Hello, how much does it cost?",
        "contentLanguage": "en",
        "translatedContent": "Cześć, ile to kosztuje?",
        "translatedLanguage": "pl",
        "isAutoReply": false,
        "createdAt": "2026-04-11T14:25:30+00:00"
      },
{'{'}
        "id": "019d6724-5678-...",
        "role": "ai",
        "content": "Our plans start at €19/month...",
        "isAutoReply": true,
        "createdAt": "2026-04-11T14:25:32+00:00"
      }
    ]
  }
}

POST /conversations/{'{'}id}/messages

Envia uma mensagem a uma conversa. A mensagem será entregue ao visitante em tempo real via widget de chat.

Corpo do pedido

{'{'}
  "content": "Thanks for reaching out! We'll process your request.",
  "role": "system"
}
CampoTipoDescrição
contentstringObrigatório. O texto da mensagem.
rolestringsystem (predefinição) ou operator

Resposta (201 Created)

{'{'}
  "data": {'{'}
    "id": "019d6725-abcd-...",
    "role": "system",
    "content": "Thanks for reaching out!",
    "createdAt": "2026-04-11T14:35:00+00:00"
  }
}

PATCH /conversations/{'{'}id}

Atualiza o estado ou a atribuição de uma conversa.

Corpo do pedido

{'{'}
  "status": "closed"
}
CampoTipoDescrição
statusstringopen, pending, ou closed
assignedTostring|nullUUID do operador a atribuir, ou null para desatribuir

GET /billing/balance

Obtém o plano atual e o saldo de créditos.

Resposta

{'{'}
  "data": {'{'}
    "plan": "pro",
    "creditBalance": 4500000,
    "totalCreditsAdded": 10000000
  }
}

Tratamento de erros

Os erros retornam um código de estado não-2xx com um corpo JSON:

{'{'}
  "error": {'{'}
    "code": "NOT_FOUND",
    "message": "Conversation not found."
  }
}
Estado HTTPSignificado
401Chave API inválida, expirada ou em falta
400Corpo do pedido ou parâmetros inválidos
404Recurso não encontrado (ou pertence a outro tenant)
500Erro de servidor

Casos de uso comuns

Integração com CRM

Faça polling de novas conversas e sincronize os dados dos visitantes (nome, e-mail, idioma) com o seu CRM. Use o ID da conversa como referência externa.

Seguimentos automatizados

Após o fecho de uma conversa, envie uma mensagem de seguimento via API: «Obrigado pela conversa! Há mais alguma coisa em que possamos ajudar?»

Alternativa a webhooks

Até os webhooks de saída estarem disponíveis, faça polling periódico ao endpoint de conversas para detetar novas mensagens ou mudanças de estado.

Operações em massa

Feche todas as conversas com mais de 7 dias, atribua conversas a operadores com base em lógica externa ou exporte o histórico de conversas para análise.

Limites de débito

A API permite até 60 pedidos por minuto por chave API. Se exceder este limite, receberá uma resposta 429 Too Many Requests. Aguarde e tente novamente com backoff exponencial.

Pronto para integrar?

Crie a sua conta gratuita e gere uma chave API em minutos.

Começar gratuitamente