Task Interface
Um endpoint. Linguagem natural. O agente cuida de todo o resto.
A mudança
As integrações tradicionais obrigam você a aprender endpoints, mapear campos, versionar esquemas e tratar cada caso limite. O Chat Agent Gateway substitui tudo isso por comunicação agêntica. Descreva o que você precisa. O próprio agente da SOIS interpreta sua intenção, negocia os detalhes, executa no seu espaço de trabalho e responde com o resultado. Esta é a porta de entrada para quem chama sem uma IA própria. Se você já tem um agente, conecte-o diretamente pelo servidor MCP.
Sem conectores. Sem middleware. Sem camada de automação de terceiros.
Autenticação
Cada mensagem exige duas credenciais:
| Cabeçalho | Valor | O que faz |
|---|---|---|
Authorization |
Bearer <token> |
Prova quem você é |
X-Api-Key |
sois_... |
Controla seu orçamento, seu webhook e a assinatura |
Por que duas? Seu token prova a identidade. Sua chave controla os gastos. Se apenas uma delas vazar, ela é inútil sem a outra. Um usuário pode ter várias chaves com orçamentos diferentes para integrações diferentes.
Obtenha as duas em Settings no seu espaço de trabalho Sois AI.
Enviar uma mensagem
POST /api/agent
Headers
Authorization: Bearer <your_token>
X-Api-Key: sois_...
Content-Type: application/json
Body
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
message |
string | Sim | Diga ao agente o que você precisa, em linguagem natural, até 10.000 caracteres |
context.entity_type |
string | Não | Dica: contact, task, document, inbox, etc. |
context.entity_id |
string | Não | Um registro específico com o qual trabalhar |
context.action |
string | Não | Dica: create, update, search, summarize |
metadata |
object | Não | Quaisquer dados chave-valor adicionais para o agente |
Exemplo
curl -X POST "https://your-workspace.sois.ai/api/agent" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "X-Api-Key: sois_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{
"message": "Create a contact for John Smith at Acme Corp, [email protected], +44 7700 900000",
"context": { "entity_type": "contact", "action": "create" }
}'
Resposta 202 Accepted
{
"conversation_uuid": "6cafd8ba-dd51-4411-808e-671d1dd59561",
"status": "accepted",
"message": "Your request has been queued."
}
Sua mensagem está no gateway. O agente assume a partir daqui.
Receber a resposta
Você tem duas opções: aguardar o webhook ou consultar a conversa.
Opção 1: Webhook (recomendada)
Se sua chave tem uma response_url, o agente entrega o resultado diretamente a você quando termina: assinado, verificado, sem polling.
POST https://your-app.com/webhook
Content-Type: application/json
X-Signature: <hmac_sha256>
X-Conversation-UUID: 6cafd8ba-...
Resolved:
{
"conversation_uuid": "6cafd8ba-...",
"status": "resolved",
"response": "Contact created: John Smith, Acme Corp, [email protected], +44 7700 900000."
}
Failed:
{
"conversation_uuid": "6cafd8ba-...",
"status": "failed",
"error": "An error occurred while processing your request."
}
Opção 2: Consultar a conversa
GET /api/agent/{conversation_uuid}
Authorization: Bearer <your_token>
X-Api-Key: sois_...
Resposta 200 OK:
{
"conversation_uuid": "6cafd8ba-...",
"status": "resolved",
"turns": [
{
"role": "user",
"payload": { "message": "Find all contacts from London" },
"timestamp": "2026-02-12T01:07:03+00:00"
},
{
"role": "agent",
"payload": {
"content": "I found 12 contacts based in London..."
},
"timestamp": "2026-02-12T01:07:13+00:00"
}
],
"webhook": {
"status": "delivered",
"delivered_at": "2026-02-12T01:07:14+00:00"
},
"resolved_at": "2026-02-12T01:07:13+00:00",
"expires_at": "2026-02-13T01:07:03+00:00",
"created_at": "2026-02-12T01:07:03+00:00"
}
Status da conversa
| Status | O que está acontecendo |
|---|---|
open |
No gateway, aguardando o agente |
processing |
O agente está trabalhando nisso |
resolved |
Concluído, a resposta está no último turn |
failed |
Não foi possível concluir após as novas tentativas |
Verificação das assinaturas de webhook
Cada webhook é assinado com HMAC-SHA256 usando o signing secret da sua chave. Verifique sempre antes de processar.
Python:
import hmac, hashlib
expected = hmac.new(
key=your_signing_secret.encode(),
msg=raw_request_body.encode(),
digestmod=hashlib.sha256
).hexdigest()
assert expected == request.headers['X-Signature']
Node.js:
const crypto = require('crypto');
const expected = crypto
.createHmac('sha256', signingSecret)
.update(rawBody)
.digest('hex');
if (expected !== req.headers['x-signature']) {
throw new Error('Invalid signature');
}
PHP:
$expected = hash_hmac('sha256', $rawBody, $signingSecret);
if (!hash_equals($expected, $request->header('X-Signature'))) {
abort(403, 'Invalid signature');
}
Exemplos de conversas
O agente tem acesso completo ao seu espaço de trabalho Sois AI. Aqui estão algumas coisas que você pode pedir:
Pesquisar:
{ "message": "Find all contacts from London" }
Criar:
{
"message": "Create a contact: Jane Doe, CEO of Acme Corp, [email protected]",
"context": { "entity_type": "contact", "action": "create" }
}
E-mail:
{
"message": "Send an email to [email protected] introducing our new product line",
"context": { "entity_type": "inbox", "action": "compose" }
}
Tarefas:
{
"message": "Create a task: Research competitor pricing for Q1 2026",
"context": { "entity_type": "task", "action": "create" }
}
Resumir:
{
"message": "Give me a full summary of this contact",
"context": { "entity_type": "contact", "entity_id": "abc-123", "action": "summarize" }
}
Múltiplas etapas:
{ "message": "Find the Q1 report, summarise it, and email the summary to the sales team" }
O agente negocia a ambiguidade. Se ele precisa pesquisar antes de poder agir, ele pesquisa. Se vários registros correspondem, ele escolhe o melhor e diz por quê. Sem esquemas rígidos, apenas intenção.
Gerenciamento de chaves
Gerencie suas chaves em Settings > API Keys no seu espaço de trabalho Sois AI, ou de forma programática.
Criar uma chave
POST /api/api-keys
{
"label": "My CRM Integration",
"response_url": "https://your-app.com/webhook",
"budget_usd_cents": 5000,
"budget_period": "monthly"
}
A resposta inclui sua chave (exibida uma única vez, copie-a imediatamente) e seu signing secret para a verificação de webhooks.
| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
label |
string | Não | Um nome para esta chave |
response_url |
url | Não | Onde entregar as respostas de webhook |
budget_usd_cents |
integer | Não | Limite de gasto em centavos de dólar |
budget_period |
string | Não | daily, monthly ou total |
Gerenciar chaves
| Método | Endpoint | Descrição |
|---|---|---|
GET |
/api/api-keys |
Listar todas as suas chaves |
POST |
/api/api-keys |
Criar uma nova chave |
GET |
/api/api-keys/{id} |
Detalhes da chave e estatísticas de uso |
PUT |
/api/api-keys/{id} |
Atualizar o rótulo, a URL do webhook ou o orçamento |
DELETE |
/api/api-keys/{id} |
Revogar uma chave |
Controles de orçamento
As integrações tradicionais limitam você com taxas arbitrárias: 100 solicitações por minuto, 10.000 por dia. O Chat Agent Gateway usa dólares.
Defina um orçamento por chave. O agente cobra credits por ação. Você decide quanto vale cada integração.
| Campo | Descrição |
|---|---|
budget_usd_cents |
Limite em centavos de dólar (ex. 5000 = 50 $). null = ilimitado. |
budget_period |
daily reinicia à meia-noite, monthly reinicia no dia 1, total nunca reinicia |
Quando um orçamento é excedido, as mensagens retornam 429 com uma explicação clara, não um código de erro críptico.
Erros
Cada erro segue o mesmo formato:
{
"error": {
"code": "ERROR_CODE",
"message": "A clear, human-readable explanation."
}
}
| HTTP | Código | O que aconteceu |
|---|---|---|
| 401 | UNAUTHENTICATED |
Token de acesso ausente ou inválido |
| 401 | INVALID_API_KEY |
Chave ausente ou inválida |
| 403 | KEY_OWNER_MISMATCH |
A chave não pertence a você |
| 403 | KEY_REVOKED |
Esta chave foi revogada |
| 404 | NOT_FOUND |
Conversa não encontrada ou expirada |
| 422 | - | Erro de validação (consulte a mensagem) |
| 429 | BUDGET_EXCEEDED |
Seu orçamento se esgotou, recarregue ou aguarde a reinicialização |
Limites
| O quê | Limite |
|---|---|
| Comprimento da mensagem | 10.000 caracteres |
| Expiração da conversa | 24 horas |
| Orçamento | Por chave, você decide |