Erros

Formato dos erros e lista de códigos retornados pela API e pelo MCP.

Toda resposta de erro tem o mesmo formato:

{
  "error": {
    "code": "conflict",
    "message": "O roteiro mudou em outro lugar. Revise antes de substituir.",
    "details": {}
  }
}
error.codestring

Código estável, próprio para tratamento no seu código.

error.messagestring

Mensagem em português, pensada para pessoas. Pode mudar sem aviso; não use em comparações.

error.detailsobject

Opcional. Informações extras, como a versão atual em conflitos ou os campos inválidos.

No MCP, o mesmo objeto chega no resultado da ferramenta, com isError: true.

Códigos

StatusCódigoSignificado
400invalid_bodyA requisição não tem corpo.
400invalid_jsonO corpo não é um JSON válido.
401unauthorizedCredencial ausente ou token OAuth inválido, expirado ou revogado. Entre novamente.
401invalid_tokenChave inválida, expirada, revogada ou do tipo errado, ou header Authorization malformado.
403insufficient_scopeFalta um escopo. details.scope indica qual.
403web_session_requiredA ação só pode ser feita pela sessão web (chaves, webhooks, dados da conta).
403invalid_originOrigem não permitida (MCP ou mutações da web).
403invalid_hostO MCP foi acessado por um host diferente do oficial.
404not_foundRecurso inexistente ou de outra conta.
409conflictRevisão desatualizada, roteiro no estado errado ou id já usado. details.current traz a versão salva.
413body_too_largeCorpo acima de 1 MB.
415unsupported_media_typeEnvie Content-Type: application/json.
422invalid_inputCampos inválidos. details lista os problemas.
422invalid_queryParâmetros de query inválidos (cursor, limit, deleted).
429rate_limitedLimite por conta atingido. details.retryAfter e o header Retry-After indicam a espera.
500internal_errorFalha inesperada. Tente novamente.

Erros de validação

Em invalid_input, details separa erros gerais (formErrors) e erros por campo (fieldErrors):

{
  "error": {
    "code": "invalid_input",
    "message": "Confira os campos do roteiro.",
    "details": {
      "formErrors": [],
      "fieldErrors": {
        "title": ["O título pode ter até 160 caracteres."],
        "expectedRevision": ["Invalid input: expected number, received undefined"]
      }
    }
  }
}

Campos desconhecidos no corpo também geram invalid_input: envie apenas os campos documentados.

Respostas 401

Respostas 401 incluem WWW-Authenticate: Bearer realm="LiveTP". No MCP, o header aponta para os metadados OAuth (resource_metadata), permitindo que o cliente inicie o login.