Análise de Sentimento¶
Este guia descreve como autenticar e consumir a API de análise de sentimento da AI Hub. Aqui você encontra os requisitos de integração, exemplos de requisição e resposta, principais erros e orientações de uso.
1. Visão Geral¶
- Base URL (produção):
https://api.aihub.knew.in - Endpoint:
POST /v1/analysis/sentiment - Formato: JSON
- Autenticação: Bearer token (OAuth2 Client Credentials)
- Documentação de autenticação: Autenticação (OAuth2 Client Credentials)
2. Chamada da API de Sentimento¶
URL da API¶
Endpoint¶
POST https://api.aihub.knew.in/v1/analysis/sentiment
Headers obrigatórios¶
Authorization: Bearer <ACCESS_TOKEN>Content-Type: application/jsonX-Tenant-External-Id: <tenant-external-id>
Observações:
- O tenant é resolvido pelo header
X-Tenant-External-Id.
O que é X-Tenant-External-Id¶
X-Tenant-External-Id é o identificador único do cliente (tenant) na API.
Esse identificador define o contexto da requisição para:
- seleção de chave de provedor por escopo (quando aplicável);
- aplicação de rate limit/quota;
- rastreabilidade de uso por cliente.
Como fornecer esse valor¶
- A API consumidora define e envia esse identificador no header
X-Tenant-External-Id. - Para representar o mesmo tenant da integração, a API consumidora deve enviar sempre o mesmo valor.
- Quando o tenant ainda não existe, ele pode ser auto provisionado pela API (conforme configuração do ambiente).
Formato obrigatório¶
- somente letras minúsculas (
a-z), números (0-9) e underscore (_); - sem espaços;
- iniciar por letra (não pode iniciar por número);
- mínimo de 3 caracteres;
- tamanho até 191 caracteres.
Exemplos válidos (padrão recomendado):
equatorial_alagoasccr_motivabrasken
Body da requisição¶
Campos:
text(string, obrigatório): texto a classificar.contextPrompt(string, opcional): contexto adicional para melhorar a classificação.provider(string, opcional): atualmenteOPENAI(normalmente pode ser omitido).
Exemplo:
{
"contextPrompt": "Classificar feedback de atendimento ao cliente",
"text": "A equipe resolveu meu problema rapidamente e com educação."
}
Exemplo cURL¶
curl --location 'https://api.aihub.knew.in/v1/analysis/sentiment' \
--header 'Authorization: Bearer <ACCESS_TOKEN>' \
--header 'X-Tenant-External-Id: <tenant-external-id>' \
--header 'Content-Type: application/json' \
--data '{
"contextPrompt": "Classificar feedback de atendimento ao cliente",
"text": "A equipe resolveu meu problema rapidamente e com educação."
}'
3. Resposta de Sucesso¶
{
"sentiment": "positive",
"metadata": {
"requestId": "42f97e9e-93ea-4fc7-9af1-7b6489cd8204",
"provider": "OPENAI",
"modelName": "gpt-5-mini",
"promptTokens": 24,
"completionTokens": 1,
"totalTokens": 25,
"cachedInputTokens": 0,
"cacheWriteInputTokens": 0,
"reasoningTokens": 0,
"finishReason": "STOP",
"latencyMs": 216,
"costMicros": 5300,
"pricingRuleId": 7,
"pricingApplied": true
}
}
Valores possíveis para sentiment:
positivenegativeneutral
4. Cache de checksum¶
A API usa cache de checksum para requisições idênticas (mesmo conteúdo lógico).
Quando há cache hit:
metadata.finishReason = "CACHE_HIT"- tokens e custo retornam
0 - não há nova chamada ao provedor
5. Erros e códigos HTTP¶
Formato padrão de erro:
{
"timestamp": "2026-02-20T02:38:06.532968602Z",
"status": 400,
"code": "BAD_REQUEST",
"message": "<detalhe>",
"path": "/v1/analysis/sentiment"
}
Códigos comuns:
400 BAD_REQUEST- payload inválido, provider não suportado,
textvazio 401 UNAUTHORIZED- token ausente/inválido
- header
X-Tenant-External-Idausente - header
X-Tenant-External-Idem formato inválido 403 FORBIDDEN- sem role, caller app/tenant inválido ou inativo
429 RATE_LIMIT_EXCEEDED- limite por minuto atingido
429 QUOTA_EXCEEDED- quota mensal de tokens/custo atingida
429 PROVIDER_RATE_LIMIT_EXCEEDED- limite no provedor LLM
502 PROVIDER_AUTHENTICATION_FAILED- credencial de provedor inválida
502 PROVIDER_ERROR- erro genérico do provedor
504 PROVIDER_TIMEOUT- timeout no provedor
6. Rate limit e quota¶
A API pode aplicar limites por:
- requisições por minuto
- tokens por minuto
- tokens por mês
- custo por mês (em micros de USD)
Conversão de custo:
1 USD = 1.000.000 micros- exemplo:
500000000 micros = USD 500,00
Por que usar micros em vez de USD decimal:
- evita erros de arredondamento de ponto flutuante em cálculos de custo;
- permite contabilização precisa e consistente em integrações e relatórios.
7. Boas práticas para clientes¶
- Renove token antes de expirar (o
expires_innormalmente é curto). - Em
429e504, implemente retry com backoff exponencial. - Trate
502como erro transitório de integração (observando limite de tentativas). - Registre
metadata.requestIdpara suporte/auditoria.