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ódigo | Descrição |
|---|---|
200 | Sucesso |
400 | Requisição inválida (parâmetros inválidos) |
401 | Não autorizado (chave de API inválida ou ausente) |
403 | Proibido (restrição de acesso do plano) |
404 | Não encontrado (carta ou recurso não existe) |
429 | Muitas requisições (limite de taxa excedido) |
500 | Erro 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")