LiqiDevelopers

Erros

Todas as APIs da Liqi utilizam um formato padrão para retornar erros. Esta página documenta o formato de resposta, os códigos HTTP utilizados e orientações para tratamento de erros na sua integração.


Formato da resposta de erro

Quando uma requisição falha, a API retorna um objeto JSON com a seguinte estrutura:

JSON
{
  "statusCode": 400,
  "message": "Validation failed: 'ticker' must be a non-empty string",
  "error": "Bad Request"
}

Campos da resposta

CampoTipoDescrição
statusCodenumberCódigo HTTP do erro (400, 401, 404, etc.)
messagestringMensagem descritiva do erro. Pode conter detalhes de validação
errorstringNome padrão do status HTTP (Bad Request, Not Found, etc.)

Em alguns endpoints, o campo message pode ser um array de strings quando há múltiplos erros de validação:

JSON
{
  "statusCode": 400,
  "message": [
    "'amount' must be a positive number",
    "'currency' must be one of: BRL, USDC"
  ],
  "error": "Bad Request"
}

Códigos HTTP

Sucesso

CódigoSignificadoQuando
200OKRequisição processada com sucesso
201CreatedRecurso criado com sucesso
204No ContentOperação executada, sem corpo na resposta

Erros do cliente (4xx)

CódigoSignificadoCausa comum
400Bad RequestBody inválido, parâmetros ausentes ou formato incorreto
401UnauthorizedCredencial ausente, inválida ou expirada
403ForbiddenCredencial válida mas sem permissão para o recurso
404Not FoundRecurso não existe ou ID inválido
409ConflictOperação conflitante (duplicata, status incompatível)
422Unprocessable EntityDados válidos sintaticamente mas rejeitados pela regra de negócio
429Too Many RequestsRate limit excedido

Erros do servidor (5xx)

CódigoSignificadoO que fazer
500Internal Server ErrorErro inesperado no servidor. Tente novamente e, se persistir, contate o suporte
502Bad GatewayProblema de comunicação entre serviços. Tente novamente em alguns segundos
503Service UnavailableServiço temporariamente indisponível. Consulte a página de status
504Gateway TimeoutTimeout na comunicação interna. Tente novamente com backoff

Erros de validação

Para endpoints que recebem body JSON, a API valida todos os campos e retorna mensagens descritivas:

Bash
curl -X POST "https://api.liqi.com.br/v1/auth/login" \
  -H "Content-Type: application/json" \
  -d '{}'
JSON
{
  "statusCode": 400,
  "message": [
    "apiKey should not be empty",
    "apiKey must be a string",
    "secretKey should not be empty",
    "secretKey must be a string"
  ],
  "error": "Bad Request"
}

Tratamento recomendado

Estrutura básica

TypeScript
async function callApi(url: string, options?: RequestInit) {
  const response = await fetch(url, options);

  if (!response.ok) {
    const error = await response.json();

    switch (response.status) {
      case 400:
        // Erro de validação — corrigir parâmetros
        console.error("Validação:", error.message);
        break;

      case 401:
        // Token expirado — renovar e tentar novamente
        await refreshToken();
        return callApi(url, options);

      case 404:
        // Recurso não encontrado
        console.error("Recurso não encontrado:", url);
        return null;

      case 429:
        // Rate limit — aguardar e tentar novamente
        const retryAfter = parseInt(
          response.headers.get("Retry-After") || "5",
          10
        );
        await sleep(retryAfter * 1000);
        return callApi(url, options);

      default:
        // Erro inesperado
        console.error(`Erro ${response.status}:`, error.message);
        throw new Error(error.message);
    }
  }

  // Se 204, não tem body
  if (response.status === 204) return null;

  return response.json();
}

function sleep(ms: number) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

Python

Python
import requests
import time

def call_api(url, **kwargs):
    response = requests.request(**kwargs, url=url)

    if response.status_code == 429:
        retry_after = int(response.headers.get("Retry-After", 5))
        time.sleep(retry_after)
        return call_api(url, **kwargs)

    if response.status_code == 401:
        refresh_token()
        return call_api(url, **kwargs)

    response.raise_for_status()

    if response.status_code == 204:
        return None

    return response.json()

Erros por API

Cada API possui códigos de erro específicos além dos códigos HTTP padrão:

APIPrefixo de códigoDocumentação
TIDC v11xxx, 2xxxCódigos de erro TIDC v1
CaaSCAAS_*Códigos de erro CaaS
Public / DeveloperCódigos HTTP padrãoEsta página

Para uma referência completa e pesquisável de todos os códigos de erro, consulte o Índice de Erros.


Próximos passos