Reten Docs
Integração de Tarefas

Tratamento de Erros

Formato de erros, códigos de status e soluções para a API de integração.

Quando uma requisição à API de integração falha, a resposta inclui um corpo JSON com informações sobre o erro.

Formato de erro

{
  "statusCode": 401,
  "error": "Unauthorized",
  "message": "Invalid or revoked API key"
}
CampoTipoDescrição
statusCodenumberCódigo de status HTTP
errorstringNome do erro
messagestringDescrição detalhada do problema
codestringPresente apenas nos erros sobre os quais um cliente precisa ramificar. É um valor estável em UPPER_SNAKE: ramifique por code, nunca pelo texto de message, que pode mudar. Hoje o único é DEFAULT_ROOT_CONFIRMATION_REQUIRED (veja Publicar Config). Não é a coluna Código da tabela abaixo, que é o nome do erro HTTP

Códigos de erro

StatusCódigoDescriçãoSolução
401UnauthorizedChave de API inválida, revogada ou expirada, ou seu dono está inativoVerifique se a chave foi copiada exatamente e continua ativa em Configurações → Chaves de API; se foi revogada ou expirou, crie uma nova
403ForbiddenA chave não tem a permissão exigida, ou uma chave de projeto indica outro projeto em x-project-idConfirme que a chave tem as permissões necessárias: activity:view para consultas, activity-result:submit para enviar resultados, commerce:batch-upsert / operator:batch-upsert / route:batch-upsert para os upserts em lote. Com uma chave de projeto, omita x-project-id ou envie o próprio projeto da chave
400Bad RequestErro de validação no corpo da requisição, header x-api-key ausente (Missing required header: x-tenant-id), um x-project-id que não é um UUID válido, ou um resultado sem activity_id enviado sem projetoVerifique se o corpo está de acordo com o formato documentado: tipos de dados e campos obrigatórios. Se você enviar x-project-id, use o UUID de um projeto; com uma chave de tenant ou um token de usuário, um resultado sem activity_id precisa dele
404Not FoundRecurso não encontrado, ou o projeto indicado em x-project-id não existeConfirme que o activity_id ou outro identificador existe no tenant, e que o projeto de x-project-id pertence ao tenant da chave
422Unprocessable EntityO corpo é válido, mas não pode ser processado: a atividade não aceita um resultado no seu estado ou dia atual, ou o tipo de resultado não está ativo ou precisa de um dado que faltaVerifique se a atividade está em um estado que aceita resultado (READY, DISPATCHED, RETRYING ou COMPLETED) e se o seu dia não foi fechado pelo corte de fim de dia; use um código de resultado ativo e envie future_scheduled_at (hoje ou depois) quando o seu tipo o exigir
429Too Many RequestsRequisições demais em pouco tempoAguarde antes de tentar novamente e distribua as requisições ao longo do tempo

Erros comuns e diagnóstico

401 — Chave não reconhecida

{
  "statusCode": 401,
  "error": "Unauthorized",
  "message": "Invalid or revoked API key"
}

Causas possíveis:

  • A chave foi revogada a partir do painel de administração
  • A chave tem uma data de expiração vencida
  • Erro de formatação (espaços, caracteres extras)
  • O dono da chave está inativo — nesse caso o message é API key owner is inactive or not found
  • A API não conseguiu validar a chave naquele momento — nesse caso o message é API key validation failed; tente a requisição novamente

Uma requisição que não traz chave não recebe este 401. A API só lê x-api-key como chave quando o valor começa com rtn_sk_; qualquer outro valor conta como se não houvesse chave. Sem chave e sem x-tenant-id, a API responde 400 Bad Request com Missing required header: x-tenant-id; com x-tenant-id mas sem credenciais, responde 401.

Erros de projeto

Em GET /api/integration/activities/tasks e POST /api/integration/activity-results/tasks, x-project-id é opcional: os dois são endpoints project-optional. Quando o header é enviado, a API o verifica antes das permissões e do corpo. O 400 de um resultado sem activity_id não faz parte dessa verificação: chega depois da validação do corpo, então um erro no corpo é informado primeiro. Como cada chave escolhe o seu projeto é explicado em Escopo da chave.

StatusQuandomessage
400Um resultado sem activity_id é enviado sem projeto: uma chave de tenant ou um token de usuário que não envia x-project-idFalta el header obligatorio x-project-id: un resultado sin activity_id necesita proyecto.
400x-project-id não é um UUID válido (chave de tenant ou token de usuário)El header x-project-id debe ser un UUID válido.
403Uma chave de projeto envia um x-project-id que não é o seu próprio projetoLa API key pertenece a un proyecto distinto del que declara el header x-project-id.
404O projeto de x-project-id não existe ou pertence a outro tenantEl proyecto no existe.

403 — Permissão insuficiente

{
  "statusCode": 403,
  "error": "Forbidden",
  "message": "Required permissions: activity:view"
}

Causas possíveis:

  • A chave não inclui a permissão exigida para o endpoint
  • Peça ao dono da chave que edite as permissões dela com PUT /api/api-keys/:id/permissions ou em Configurações → Chaves de API

400 — Erro de validação

A API responde 400 quando o corpo não está de acordo com o formato documentado.

Causas possíveis:

  • Campos obrigatórios ausentes: occurred_at e task_result.result sempre; commerce_external_id apenas quando activity_id não é enviado (execuções independentes)
  • Formato de data inválido (deve ser ISO 8601)
  • activity_id não é um UUID válido
  • Campos que não fazem parte do corpo documentado

422 — Estado não processável

{
  "statusCode": 422,
  "error": "Unprocessable Entity",
  "message": "La actividad no está en un estado válido para registrar resultado."
}

Causas possíveis:

  • A atividade vinculada não está em um estado que aceita resultado. READY, DISPATCHED e RETRYING aceitam; COMPLETED também, e enviar de novo atualiza o resultado existente da atividade; CANCELED e FAILED não — message acima
  • A data de execução da atividade já ultrapassou o corte de fim de dia — La actividad corresponde a un día ya cerrado y no admite registrar resultado. Depois desse corte, um fechamento automático é executado e pode registrar o resultado (como NOT_EXECUTED). Execuções independentes (STANDALONE, sem activity_id) estão isentas desta regra e da anterior
  • O código de resultado de task_result.result não existe ou não está ativo — El tipo de resultado seleccionado no está activo. Veja Listar Configurações para obter códigos válidos
  • O tipo de resultado exige task_result.future_scheduled_at e ele não foi enviado — Este tipo de resultado requiere una fecha comprometida.
  • task_result.future_scheduled_at cai em um dia anterior a hoje, no fuso horário do tenant — La fecha programada no puede ser en el pasado.