Referência de Erros HTTP
Esta página documenta todos os códigos de erro HTTP que você pode encontrar ao interagir com a API da Videochamada.com.br.
Estrutura de Resposta de Erro
Todas as respostas de erro seguem o seguinte formato JSON:
Códigos de Erro por Categoria
400 - Bad Request
Erros de validação de dados ou parâmetros inválidos.
Mensagem | Cenário | Solução |
---|---|---|
Invalid parameters |
Parâmetros da requisição estão inválidos ou faltando | Verifique a documentação do endpoint e corrija os parâmetros |
Call already ended |
Tentativa de encerrar uma chamada já encerrada | Verifique o status da chamada antes de tentar encerrá-la |
Invalid date format |
Data fornecida não está no formato ISO 8601 | Use o formato ISO 8601: 2025-10-16T10:00:00Z |
Pagination limit exceeded |
Limite de paginação excede o máximo permitido (100) | Reduza o valor do parâmetro limit para 100 ou menos |
Invalid expiration date |
Data de expiração está no passado | Forneça uma data futura para expiresAt |
Exemplo de Resposta:
403 - Forbidden
Erros de autorização - você está autenticado, mas não tem permissão para realizar a ação.
Mensagem | Cenário | Solução |
---|---|---|
IP not allowed |
IP do requisitor não está na whitelist da API key | Adicione seu IP à lista de IPs permitidos da API key |
Maximum spending limit reached for this month |
Limite de gastos mensal foi atingido | Aumente o limite de gastos ou aguarde o próximo ciclo de faturamento |
Organization not found |
Organização não existe ou você não tem acesso | Verifique se a organização existe e se você tem permissão |
Subscription not found |
Assinatura não existe ou está inativa | Ative uma assinatura para a organização |
Resource belongs to another project |
Recurso pertence a outro projeto | Verifique se está usando a API key do projeto correto |
Exemplo de Resposta:
{
"message": "Maximum spending limit reached for this month",
"error": "Forbidden",
"statusCode": 403
}
Como Resolver: - IP não permitido: Configure a whitelist de IPs na gestão de API keys - Limite de gastos: Ajuste o limite em Configurações → Assinatura - Organização/Subscription: Entre em contato com o administrador da conta
429 - Too Many Requests
Limite de taxa de requisições foi excedido.
Mensagem | Cenário | Solução |
---|---|---|
Rate limit exceeded |
Muitas requisições em curto período | Implemente backoff exponencial e respeite os limites |
Exemplo de Resposta:
{
"message": "Rate limit exceeded. Please try again in 60 seconds",
"error": "Too Many Requests",
"statusCode": 429
}
Headers da Resposta:
Como Resolver:
- Implemente cache para reduzir requisições repetidas
- Use o header Retry-After
para saber quando tentar novamente
- Considere usar webhooks em vez de polling constante
503 - Service Unavailable
Serviço temporariamente indisponível.
Mensagem | Cenário | Solução |
---|---|---|
Service temporarily unavailable |
Manutenção programada ou sobrecarga | Aguarde e tente novamente |
Exemplo de Resposta:
{
"message": "Service temporarily unavailable. Please try again later",
"error": "Service Unavailable",
"statusCode": 503
}
Boas Práticas de Tratamento de Erros
1. Sempre Verifique o Status HTTP
const response = await fetch('https://api.videochamada.com.br/api/calls', {
headers: { 'Authorization': 'Bearer ' + apiToken }
});
if (!response.ok) {
const error = await response.json();
console.error(`Erro ${error.statusCode}: ${error.message}`);
// Trate o erro apropriadamente
}
2. Implemente Retry com Backoff Exponencial
Para erros 429 e 503, implemente retry automático:
async function fetchWithRetry(url, options, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
const response = await fetch(url, options);
if (response.ok) {
return response;
}
if (response.status === 429 || response.status === 503) {
const retryAfter = response.headers.get('Retry-After') || Math.pow(2, i);
await new Promise(resolve => setTimeout(resolve, retryAfter * 1000));
continue;
}
throw new Error(`HTTP ${response.status}: ${await response.text()}`);
}
}
3. Log Erros para Análise
Mantenha logs detalhados de erros para troubleshooting:
import logging
try:
response = requests.get(url, headers=headers)
response.raise_for_status()
except requests.exceptions.HTTPError as e:
logging.error(f"HTTP Error: {e.response.status_code} - {e.response.text}")
# Trate o erro apropriadamente
4. Use Webhooks em Vez de Polling
Para evitar erros 429, prefira webhooks ao invés de fazer polling constante:
// ❌ Evite: Polling a cada 5 segundos
setInterval(async () => {
const status = await getCallStatus(callId);
}, 5000);
// ✅ Prefira: Configure webhook para call.ended
// Você receberá notificação automática quando a chamada encerrar
Suporte
Se você continuar enfrentando erros após seguir este guia:
- 📧 Email: suporte@videochamada.com.br
- 📚 Documentação: https://docs.videochamada.com.br
Ao entrar em contato, inclua: - Endpoint que está sendo acessado - Código de status HTTP recebido - Mensagem de erro completa - Timestamp aproximado da requisição