Documentation Index
Fetch the complete documentation index at: https://docs.leavo.ai/llms.txt
Use this file to discover all available pages before exploring further.
Estrutura de Erros
Quando ocorre um erro, a API retorna uma resposta com a seguinte estrutura:
{
"success": false,
"error": {
"code": "ERROR_CODE",
"message": "Descrição do erro",
"details": {
// Informações adicionais quando disponíveis
}
}
}
Códigos de Erro
Erros de Autenticação
Status: 401A chave de API está ausente, inválida ou expirada.{
"error": {
"code": "UNAUTHORIZED",
"message": "Invalid or missing API key"
}
}
Solução: Verifique se a chave está correta e não expirou.
Status: 403A chave não tem permissão para este recurso.{
"error": {
"code": "FORBIDDEN",
"message": "You don't have permission to access this resource"
}
}
Solução: Verifique as permissões da sua chave no dashboard.
Erros de Validação
Status: 400Os dados enviados são inválidos.{
"error": {
"code": "VALIDATION_ERROR",
"message": "Invalid request data",
"details": {
"field": "email",
"reason": "Invalid email format"
}
}
}
Solução: Corrija os campos indicados em details.
Status: 400Um campo obrigatório não foi enviado.{
"error": {
"code": "MISSING_FIELD",
"message": "Required field missing",
"details": {
"field": "phone"
}
}
}
Solução: Inclua o campo obrigatório na requisição.
Erros de Recurso
Status: 404O recurso solicitado não existe.{
"error": {
"code": "NOT_FOUND",
"message": "Lead not found"
}
}
Solução: Verifique se o ID está correto.
Status: 409Um recurso com os mesmos dados já existe.{
"error": {
"code": "ALREADY_EXISTS",
"message": "A lead with this phone number already exists"
}
}
Solução: Use o endpoint de atualização ou use dados diferentes.
Erros de Rate Limit
Status: 429Muitas requisições em pouco tempo.{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Too many requests",
"details": {
"retry_after": 60
}
}
}
Solução: Aguarde o tempo indicado em retry_after (segundos).
Implementando Retry Logic
async function requestWithRetry(url, options, maxRetries = 3) {
for (let attempt = 0; attempt < maxRetries; attempt++) {
try {
const response = await fetch(url, options);
if (response.status === 429) {
const data = await response.json();
const retryAfter = data.error?.details?.retry_after || 60;
console.log(`Rate limited. Retrying in ${retryAfter}s...`);
await new Promise(r => setTimeout(r, retryAfter * 1000));
continue;
}
if (response.status >= 500) {
// Erro de servidor, tentar novamente com backoff exponencial
const delay = Math.pow(2, attempt) * 1000;
console.log(`Server error. Retrying in ${delay}ms...`);
await new Promise(r => setTimeout(r, delay));
continue;
}
return response;
} catch (error) {
if (attempt === maxRetries - 1) throw error;
const delay = Math.pow(2, attempt) * 1000;
await new Promise(r => setTimeout(r, delay));
}
}
}
Boas Práticas
Sempre Verifique o Status
Nunca assuma que a requisição foi bem-sucedida. Sempre verifique o código HTTP.
Implemente Retry
Para erros 5xx e 429, implemente retry com backoff exponencial.
Log os Erros
Registre os erros para debugging e monitoramento.
Trate Casos Específicos
Implemente tratamento específico para cada tipo de erro.