Skip to main content

Formato de erro

Todos os erros seguem o mesmo formato JSON:
{
  "statusCode": 401,
  "error": "Unauthorized",
  "message": "Invalid or expired API key"
}

Códigos HTTP

CódigoSignificadoQuando ocorre
200SucessoRequisição processada corretamente
401Não autorizadoAPI key ausente, inválida ou expirada
403ProibidoAssinatura da empresa inativa
422Entidade não processávelCorpo da requisição inválido
500Erro internoErro inesperado no servidor

Erros de autenticação (401)

// API key ausente
{ "statusCode": 401, "error": "Unauthorized", "message": "Missing API key" }

// Formato inválido
{ "statusCode": 401, "error": "Unauthorized", "message": "Invalid API key format. Expected: Bearer <api_key>" }

// Chave inválida ou expirada
{ "statusCode": 401, "error": "Unauthorized", "message": "Invalid or expired API key" }

Erro de assinatura (403)

{
  "statusCode": 403,
  "error": "SubscriptionInactive",
  "message": "Sua assinatura não está ativa",
  "subscriptionStatus": "CANCELLED"
}

Erros de validação (422)

{
  "statusCode": 422,
  "error": "Unprocessable Entity",
  "message": [
    "queryText must be a string",
    "scoreThreshold must not be greater than 1"
  ]
}

Tratamento de erros

async function ragRetrieve(query) {
  const response = await fetch('https://api-talk.saninternet.com/v1/api/rag/retrieve', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${process.env.SANTALK_API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      queryText: query,
      filters: { sourceTypes: ['document'], audience: 'ai_agent' },
      scoreThreshold: 0.7,
      returnMode: 'ai_generated_answer'
    })
  });

  if (!response.ok) {
    const error = await response.json();
    switch (response.status) {
      case 401: throw new Error(`Autenticação falhou: ${error.message}`);
      case 403: throw new Error(`Assinatura inativa: ${error.subscriptionStatus}`);
      case 422: throw new Error(`Validação: ${error.message}`);
      default: throw new Error(`Erro ${response.status}: ${error.message}`);
    }
  }

  return response.json();
}