Pular para o conteúdo

Respostas e erros

A integração deve tratar duas camadas separadamente:

  1. Status HTTP: informa se a requisição foi autenticada, validada e processada pela API.
  2. Campo status no JSON: informa o resultado retornado pela fonte consultada.
{
"status": "success",
"data": {
"...": "estrutura específica da integração"
},
"aux": [],
"error": null,
"cost": 0.165
}
CampoTipoUso
statussuccess ou errorResultado da consulta ao provider
dataobjeto ou nullDados da integração
auxarrayConteúdo auxiliar, quando disponível
errorstring ou nullMensagem devolvida pela integração
costnúmeroValor debitado pela chamada

[!WARNING] HTTP 200 não significa necessariamente que existem dados Uma fonte pode ter sido consultada e cobrada, mas responder com status: "error", data: null ou uma mensagem em error. Trate esse cenário como resultado da consulta, não como indisponibilidade automática da API.

StatusSignificadoRepetir automaticamente?
200Requisição processada; verifique o corpoNão por padrão
401Chave ausente ou inválida no endpoint autenticadoNão
402Saldo insuficienteNão
404Integração não encontradaNão
422Payload inválidoNão
500Erro interno ou falha transitóriaSim, com limite e backoff
{
"detail": "Saldo insuficiente"
}

O campo detail pode ser uma string ou, em erros de validação, uma lista de ocorrências.

{
"detail": [
{
"loc": ["body", "document"],
"msg": "field required",
"type": "value_error.missing"
}
]
}
const controller = new AbortController()
const timeout = setTimeout(() => controller.abort(), 20_000)
try {
const response = await fetch(
'https://api.conexaoazul.com/api/v1/credit/query',
{
method: 'POST',
headers: {
'Content-Type': 'application/json',
Accept: 'application/json',
'HTTP-API-KEY': process.env.BLUE_CREDIT_API_KEY
},
body: JSON.stringify({
integration_code: 'cnpj_completo',
document: '11222333000181'
}),
signal: controller.signal
}
)
const payload = await response.json().catch(() => null)
if (!response.ok) {
const message = payload?.detail ?? 'Resposta de erro sem JSON válido'
throw new Error(`Blue Credit HTTP ${response.status}: ${JSON.stringify(message)}`)
}
if (payload.status !== 'success') {
console.warn('Consulta concluída sem sucesso no provider', {
error: payload.error,
cost: payload.cost
})
} else {
console.log('Consulta concluída', { cost: payload.cost })
}
} finally {
clearTimeout(timeout)
}

Repita apenas falhas transitórias, como 500, timeout ou erro de conexão. Use poucas tentativas, espera exponencial e jitter. Antes de repetir uma consulta paga, avalie o risco de a primeira chamada ter sido processada e a resposta ter se perdido.

Não repita automaticamente 401, 402, 404 ou 422: a mesma requisição continuará inválida até que chave, saldo, código ou payload sejam corrigidos.

Registre status HTTP, integration_code, duração, status, cost e um identificador interno da operação. Não registre a chave nem o documento completo. Para diagnóstico, use documento mascarado, por exemplo ***0001-81.