Tratamento de erros

Códigos de status HTTP da TCG Price Lookup API, formato de respostas de erro e como lidar com eles.


Formato de resposta de erro

Todos os erros retornam um formato JSON consistente:

{
  "error": {
    "code": "error_code",
    "message": "Descrição do erro legível por humanos",
    "details": {}
  }
}

Códigos de status HTTP

CódigoDescrição
200Sucesso
400Requisição inválida (parâmetros inválidos)
401Não autorizado (chave de API inválida ou ausente)
403Proibido (restrição de acesso do plano)
404Não encontrado (carta ou recurso não existe)
429Muitas requisições (limite de taxa excedido)
500Erro do servidor

Erros comuns e como resolvê-los

401 Unauthorized

{ "error": { "code": "unauthorized", "message": "Invalid or missing API key" } }

Solução: Verifique sua chave de API. Confirme que o cabeçalho X-API-Key está configurado corretamente.

429 Too Many Requests

{ "error": { "code": "rate_limit_exceeded", "message": "Daily limit reached" } }

A resposta inclui o cabeçalho Retry-After com o número de segundos até a próxima requisição:

Retry-After: 3600
X-RateLimit-Limit: 200
X-RateLimit-Remaining: 0
X-RateLimit-Reset: 1704067200

Solução: Respeite o cabeçalho Retry-After. Os limites diários resetam à meia-noite UTC. Faça upgrade do plano se precisar de mais requisições.

403 Forbidden

{ "error": { "code": "feature_not_available", "message": "Price history requires Trader plan" } }

Solução: Recursos como histórico de preços, preços graduados e busca em lote exigem um plano superior.

Tratamento de erros com SDKs

// JavaScript
try {
  const card = await tcg.cards.get('pokemon-base1-4');
} catch (error) {
  if (error.status === 429) {
    // Rate limit: verifique quando pode tentar novamente
    const retryAfter = error.headers['retry-after'];
    console.log(`Rate limit atingido. Tente novamente em ${retryAfter} segundos`);
  } else if (error.status === 401) {
    console.error('Chave de API inválida');
  }
}
# Python
from tcglookup import TCGLookup, RateLimitError, AuthError

try:
    results = tcg.cards.search(name="charizard", game="pokemon")
except RateLimitError as e:
    print(f"Rate limit atingido. Tente novamente em {e.retry_after} segundos")
except AuthError:
    print("Chave de API inválida")