Pular navegação

Erros da API

Status HTTP, códigos de erro e recomendações de repetição.

Erros

Toda requisição que falha devolve o mesmo envelope: um status HTTP e um corpo JSON com um code legível por máquina. Ramifique o código pelo error.code, nunca pelo error.message — os códigos são estáveis, as mensagens não.

O código não repete o status HTTP. 404 Not Found chega com o código 400404; uma requisição sem o cabeçalho Authorization chega com HTTP 400 e código 100101. Leia o status e o código de forma independente.

{
  "error": {
    "code": 400301,
    "message": "invalid uuid format",
    "detail": "see https://en.wikipedia.org/wiki/Universally_unique_identifier"
  }
}

O próprio API devolve esse link. Ele cobre apenas uma das notações aceitas: os caminhos também aceitam um UUID sem hífens e uma forma base58 de 21 a 22 caracteres, então um valor rejeitado com este código não é necessariamente um UUID malformado.

Erros de validação trazem invalid_params, uma entrada por campo rejeitado:

{
  "error": {
    "code": 400400,
    "message": "request parameters didn't validate",
    "invalid_params": [
      { "index": 0, "name": "privacy_type", "reason": "oneof", "message": "anywhere nowhere custom" }
    ]
  }
}

O mesmo código chega sem invalid_params quando falta um parâmetro de consulta obrigatório — nesse caso o nome do parâmetro está dentro de message:

{ "error": { "code": 400400, "message": "Parameter 'from' not found" } }

Erros do servidor usam outro formato: path e timestamp no lugar de detail.

{
  "error": {
    "code": 500500,
    "path": "/v1/videos",
    "message": "no message available",
    "timestamp": "2026-09-24T09:25:48.540408556Z"
  }
}

Um corpo de requisição vazio é relatado à parte, com o código 1 e a mensagem io error.

Campos:

CampoTipoDescrição
error.codenumberCódigo legível por máquina. Não repete o status HTTP — a lista completa está abaixo.
error.messagestringExplicação curta em linguagem natural, adequada para logs. Não é estável: não ramifique por ela.
error.detailstringOpcional. Contexto adicional: a posição do erro de JSON, o valor rejeitado ou um link de referência.
error.invalid_paramsarrayOpcional. Detalhamento por campo de uma falha de validação. Cada entrada tem index, name (o campo), reason (required, oneof, notempty_if, not exists, …) e message com os valores aceitos.
error.pathstringSomente em 5xx. O caminho que falhou.
error.timestampstringSomente em 5xx. RFC 3339, UTC.

X-Request-ID. As respostas bem-sucedidas e os erros 400, 401 e 500 trazem este cabeçalho de resposta — informe-o ao acionar o suporte. Ele não é enviado em 404 e 405.

Resumo dos códigos de status HTTP

CódigoNomeDescrição
200OKA requisição foi concluída. O corpo da resposta traz o objeto solicitado.
201CreatedO recurso foi criado. O corpo da resposta traz o novo objeto.
204No ContentA requisição foi concluída; o endpoint não tem corpo a devolver (normalmente após um DELETE).
400Bad RequestRequisição malformada: JSON inválido, identificador que não pôde ser interpretado, valor fora do conjunto permitido. Também é devolvido quando falta o cabeçalho Authorization — código 100101.
401UnauthorizedO token é inválido, foi revogado ou pertence a outro workspace.
402Payment RequiredO plano ou o saldo não cobrem esta operação. Não reproduzido na verificação.
403ForbiddenO token está autenticado, mas não tem permissão. Não reproduzido na verificação.
404Not FoundO objeto não existe ou não é visível para este token. Chega com o código 400404.
405Method Not AllowedO caminho não suporta este método. Chega com o código 400405.
409ConflictConflito de estado; usado pelo Speak. Não reproduzido na verificação.
422Unprocessable EntityO recurso ainda não está pronto; usado pelo Speak. Não reproduzido na verificação.
429Too Many RequestsLimite de requisições. Não reproduzido: 50 requisições paralelas passaram sem nenhum. O API não envia RateLimit-* nem Retry-After.
5xxServer ErrorErro inesperado no servidor. É seguro repetir com backoff exponencial; acione o suporte se persistir.

Códigos numéricos devolvidos em error.code. Um traço na coluna Nome significa que o código ainda não tem um nome legível por máquina — ramifique pelo número. A coluna Repetir indica se repetir a requisição idêntica pode ajudar.

Códigos de autenticação e acesso (1xxxxx)

CódigoHTTPNomeRepetirDescrição
1400IO_ERRORnãoO corpo da requisição não pôde ser lido — normalmente um payload vazio ou truncado, ou uma conexão interrompida.
100101400AUTH_AUTHORIZATION_HEADER_NOT_FOUNDnãoFalta o cabeçalho Authorization. Observe o status: 400, não 401, e nenhum cabeçalho WWW-Authenticate é enviado.
100102401UNAUTHORIZEDnãoO token é inválido, foi revogado ou expirou. A falta do cabeçalho é 100101. Emita um novo token.
100103403ACCESS_DENIEDnãoO token é válido, mas não dá acesso a este recurso ou escopo. Verifique as permissões do token.
100104400INVALID_USERNAME_OR_PASSWORDnãoAs credenciais enviadas ao endpoint de login não correspondem a nenhuma conta.
100105400INVALID_CONFIRMATION_TOKENnãoO token de confirmação de e-mail é desconhecido ou expirou. Solicite um novo.
100106—LIMIT_REACHEDmais tardeUma cota do workspace foi atingida. Verifique o plano.
100107403USER_IS_NOT_OWNERnãoA ação exige privilégios de proprietário do workspace.

Códigos de requisição inválida e validação (4xxxxx)

CódigoHTTPNomeRepetirDescrição
400101400JSON_SYNTAX_ERRORnãoO corpo da requisição não é um JSON válido. detail traz o caractere problemático e seu contexto.
400102400JSON_UNMARSHAL_TYPE_ERRORnãoUm campo tem tipo inesperado — por exemplo, uma string onde se espera um número.
400201400HAS_ALREADY_BEEN_TAKENnãoUma restrição de unicidade foi violada.
400202400EMAIL_IS_ALREADY_TAKENnãoJá existe uma conta com este e-mail.
400203400NAME_IS_ALREADY_TAKENnãoJá existe uma entidade com este nome no escopo atual.
400204400INVITATION_IS_ALREADY_EXISTnãoUm convite já foi enviado a este destinatário.
400205400INVITATION_IS_ALREADY_APPROVEDnãoO convite já foi aceito.
400206400BILLING_ACCOUNT_IS_ALREADY_EXISTnãoJá existe uma conta de cobrança vinculada a este workspace.
400207400NOT_ENOUGH_MONEYmais tardeO saldo do workspace não cobre esta operação.
400208400NO_BILLING_ACCOUNTnãoO workspace ainda não tem conta de cobrança.
400209400NO_PAYMENT_METHODnãoNenhuma forma de pagamento está configurada na conta de cobrança.
400210400NOT_ENOUGH_REQUIRED_PRODUCTSnãoFalta ao plano atual um produto do qual esta operação depende.
400211400NOT_ALLOWED_ADDITIONAL_FOR_TRIALnãoAdicionais não podem ser comprados em um plano de teste.
400212400SUBSCRIPTION_NOT_PAIDmais tardeO workspace tem faturas em aberto.
400213400EMAIL_NOT_CONFIRMEDmais tardeO e-mail do usuário ainda não foi confirmado.
400214400EMAIL_NOT_FOUNDnãoNenhuma conta está associada ao e-mail informado.
400215400RESET_TOKEN_NOT_FOUND_OR_EXPIREDnãoO token de redefinição de senha é desconhecido ou expirou.
400216400NOT_ALLOWED_ORDER_FIELDnãoO parâmetro order indica um campo pelo qual este endpoint não ordena. A direção diferencia maiúsculas: title.DESC é rejeitado, title.desc não.
400236400—nãoA pasta referenciada não existe — por exemplo, parent_id em Copy video. Traz invalid_params; a pasta é verificada antes do vídeo.
400301400—nãoO identificador não pôde ser interpretado em nenhuma notação aceita: UUID com hífens, UUID sem hífens ou base58. Não diz nada sobre o objeto existir.
400302400—nãoO identificador tem 21–22 caracteres, mas carrega um caractere fora do alfabeto base58 (O, I, l). Um 0 inicial é preenchimento e é aceito; um caractere errado em qualquer outra posição não é.
400400400—nãoA validação falhou ou falta um parâmetro de consulta obrigatório. Dois formatos: com invalid_params e sem — veja acima.
400404404—nãoO objeto não existe ou não é visível para este token. O erro mais comum na prática.
400405405—nãoO caminho não suporta este método. Confira o método na página do endpoint.

Outros códigos de erro (402 / 404 / 409 / 422 / 500)

CódigoHTTPNomeRepetirDescrição
402402402VALIDATION_ERRORnãoHerdado do catálogo anterior. Não foi reproduzido, e o único exemplo que o mostrava veio copiado de outro endpoint. A semântica real precisa de confirmação — use 400400 como código de validação.
404404404NO_SUCH_ENTITYnãoConsta neste catálogo. Na prática, um objeto ausente devolve 400404.
409293409—mais tardeConflito de estado em uma transcrição do Speak. Conhecido apenas pelo exemplo de resposta do Speak; não reproduzido.
422100422—simUma transcrição do Speak ainda não está pronta. Conhecido apenas pelo exemplo de resposta do Speak; não reproduzido.
500500500INTERNAL_SERVER_ERRORsimErro interno do servidor. Reproduzido em GET /v1/videos?page=0. Repita com backoff exponencial; se os mesmos parâmetros falharem sempre, repetir não vai ajudar.

Tratamento de erros

  • Novas tentativas. É seguro repetir respostas 5xx e tempos de espera de rede com backoff exponencial; limite a cinco tentativas. As demais respostas 4xx não devem ser repetidas — corrija a requisição antes.
  • Limites de requisições. O API não envia RateLimit-* nem Retry-After. O guia para desenvolvedores indica 10 requisições por segundo e 300 por minuto, mas 50 requisições paralelas passaram sem nenhum 429, então trate o número publicado como não confirmado e aguarde pelo menos 5 segundos antes de repetir após um deles.
  • Validação. Interprete error.invalid_params — name é o campo a corrigir e message lista os valores aceitos. Quando invalid_params não vem, o nome do parâmetro está dentro de message.
  • Identificadores. 400301 e 400302 significam que o identificador não pôde ser interpretado, não que o objeto esteja ausente. Objeto ausente é 400404.
  • Repetir um POST. Idempotency-Key não é suportado de nenhuma forma documentada. Parta do princípio de que repetir um POST após um tempo esgotado cria um segundo objeto; consulte a lista antes de repetir.
  • Logs. Registre error.code e X-Request-ID, não error.message: os códigos são estáveis, as mensagens não.

Os códigos e formatos desta página foram verificados contra o API de produção em 24-09-2026. As linhas marcadas como não reproduzidas vêm do catálogo anterior ou de exemplos de resposta e ainda precisam de confirmação.