Pular para o conteúdo
Cuidaro Desenvolvedores API v1 · 2026-10-26 OpenAPI Site do Cuidaro

Conceitos

Erros

Todo erro segue a RFC 7807 com um code estável. Códigos publicados nunca mudam; códigos novos podem surgir, então trate o desconhecido pelo status HTTP.

Exemplo
{
  "type": "https://cuidaro.com.br/errors/settlement-amount-mismatch",
  "title": "Settlement Amount Mismatch",
  "status": 422,
  "detail": "settlement.amount é diferente do total da OS. Nada foi faturado.",
  "instance": "/api/v1/service-orders/731/invoice",
  "code": "SETTLEMENT_AMOUNT_MISMATCH",
  "expected_amount": "149.90",
  "received_amount": "149.00"
}

Em 422, chegam também errors (mensagens por campo) e error_codes (códigos por campo). detail é texto para pessoas e pode mudar. Erro 500 nunca traz mensagem interna.

Códigos e o que fazer

codeHTTPO que significaO que fazer
AUTH_CREDENTIALS_INVALID 401 client_id/client_secret errados ou integração revogada (emissão de token) conferir as credenciais; se revogada ou segredo trocado, pedir as novas ao dono da empresa
AUTH_TOKEN_EXPIRED 401 token com mais de 1 h pedir token novo em POST /oauth/token e repetir a chamada
AUTH_TOKEN_MISSING 401 faltou Authorization: Bearer <token> enviar o cabeçalho
AUTH_TOKEN_INVALID 401 token desconhecido, segredo trocado ou integração revogada pedir token novo; se continuar, a integração foi revogada ou o segredo trocado
AUTH_SCOPE_INSUFFICIENT 403 token sem o escopo da rota, ou scope pedido fora do permitido pedir ao dono da empresa o escopo que falta (nova integração) ou pedir o token sem restringir scope
AUTH_TENANT_SUSPENDED 403 empresa bloqueada a empresa precisa regularizar com o Cuidaro; não insistir
AUTH_TENANT_PLAN_WITHOUT_API 403 o plano da empresa não inclui API a empresa precisa mudar de plano
ACCESS_DENIED 403 acesso negado (genérico) não repetir; reportar se inesperado
BAD_REQUEST 400 requisição malformada (ex.: JSON inválido) corrigir o corpo
VALIDATION_FAILED 422 dados inválidos ler errors/error_codes, corrigir e reenviar com chave nova
FIELD_REQUIRED 422 (em error_codes) campo obrigatório ausente enviar o campo
FIELD_TYPE_INVALID 422 (em error_codes) tipo de dado errado corrigir o tipo
FIELD_MAX_LENGTH 422 (em error_codes) valor maior que o permitido encurtar
FIELD_ENUM_INVALID 422 (em error_codes) valor fora da lista (ex.: settlement.type, escopo, evento) usar um valor da lista do openapi.json
FIELD_INVALID 422 (em error_codes) outra regra (ex.: documento inválido, IBGE de outra UF, serviço inativo) ler a mensagem em errors e corrigir
IDEMPOTENCY_KEY_MISSING 422 POST sem Idempotency-Key enviar a chave
IDEMPOTENCY_KEY_INVALID 422 chave fora do formato 1–255 caracteres ASCII visíveis, sem espaço
IDEMPOTENCY_KEY_CONFLICT 409 chave já usada com outro corpo usar chave nova para a operação nova
IDEMPOTENCY_KEY_IN_PROGRESS 409 a mesma chave ainda está executando comum: esperar alguns segundos e reenviar igual; estrita: consultar a OS e, se não aconteceu, chave nova
RESOURCE_NOT_FOUND 404 recurso inexistente ou de outra empresa (endpoint de webhook: também de outra integração), ou endereço errado conferir o id e a URL
METHOD_NOT_ALLOWED 405 método HTTP não aceito no endereço conferir o método na referência da API
RESOURCE_STATE_CONFLICT 409 operação inválida para o estado do recurso (OS já faturada/cancelada, OS sem valor a faturar, OS faturada pela tela no cancel, endpoint desativado, teto de 10 endpoints) ler detail e service_order_status; consultar o recurso; não repetir igual
PLAN_QUOTA_EXCEEDED 409 limite do plano da empresa atingido (metric, limit) a empresa precisa liberar espaço ou mudar de plano; depois, a mesma chave pode ser reenviada
PAYLOAD_TOO_LARGE 413 corpo acima de 512 KB reduzir o corpo
RATE_LIMIT_EXCEEDED 429 limite de requisições por minuto excedido esperar Retry-After; se for recorrente, pedir aumento ao suporte
HTTP_ERROR o do erro outro erro HTTP sem código específico tratar pelo status; reportar se persistir
INTERNAL_ERROR 500 erro interno tentar de novo depois (mesma chave); em operação estrita, consultar a OS antes; reportar se persistir
SERVICE_UNAVAILABLE 503 manutenção ou indisponibilidade temporária tentar de novo em alguns minutos
WEBHOOK_URL_NOT_ALLOWED 422 (em error_codes.url) URL de webhook não é https:// público usar https:// que resolva só para IP público, sem usuário/senha e sem redirecionar
RESOURCE_ALREADY_EXISTS 409 external_reference já usada em outra OS, ou pagamento (gateway + gateway_reference) já usado em outra OS (existing_resource_id) consultar a OS de existing_resource_id: normalmente é a sua própria criação anterior
SETTLEMENT_AMOUNT_MISMATCH 422 settlement.amount diferente do total da OS (expected_amount, received_amount) conferir o valor; nada foi faturado
EXTERNAL_SETTLEMENT_NOT_ALLOWED 422 a empresa não liberou esta integração a informar pagamento recebido fora do Cuidaro (OS faturável) pedir a liberação ao dono/administrador (Configurações → Integrações (API) → Pagamentos recebidos fora do Cuidaro)
EXTERNAL_SETTLEMENT_ACCOUNT_MISSING 422 liberada, mas sem conta ativa escolhida pedir ao dono/administrador que escolha uma conta ativa

Referência gerada a partir do contrato OpenAPI 3.1 da API v1 (versão 2026-10-26), conferido contra o código por teste automatizado. Dúvidas: suporte@cuidaro.com.br.