type para o fluxo de controle e por code para o tratamento
específico. Os dois são estáveis; message é escrito para humanos e pode ser
reescrito.
Sempre logue request_id. Ele é ecoado no header de resposta X-Request-ID,
e citá-lo nos deixa encontrar a sua requisição exata.
Tipos
Um 404 não distingue “não existe” de “pertence a outro workspace”. É
deliberado: distinguir os dois deixaria qualquer um sondar ids de registro
entre workspaces.
Scopes faltando
Um 403 de um cheque de scope nomeia exatamente o que falta, para você não ter que adivinhar:insufficient_scope costuma significar política de write
do workspace — por exemplo, uma entidade espelhada de um CRM externo. Chame
GET /v1/capabilities para ver quais entidades você pode escrever.
Tentando de novo
Tente de novorate_limit_error e api_error. Não tente de novo erros 4xx
sem mudanças; eles vão falhar igual.
Códigos de erro
Todos oserror.code, agrupados por status HTTP. error.documentation_url leva direto à entrada do código que você recebeu. Os códigos são permanentes: use-os para decidir o que fazer.
HTTP 400
bad_request
Não foi possível entender a requisição.invalid_cursor
O cursor está corrompido ou foi emitido para outra consulta. Envielinks.next sem alterações, com os mesmos filtros e a mesma ordenação.
unknown_expand
Um relacionamento emexpand não existe neste recurso.
expand_limit_exceeded
Relacionamentos demais emexpand; o limite é 4.
unknown_field
Um nome emfields não existe neste recurso.
unknown_sort_field
Este recurso não pode ser ordenado por essa chave.unknown_entity
Nenhum recurso tem esse nome.too_many_filter_values
Um parâmetro de filtro foi repetido mais vezes do que o permitido.unsupported_sort
Esta coleção não pode ser ordenada assim.invalid_window
A janela de tempo está vazia ou invertida.HTTP 401
unauthorized
O token está ausente, é desconhecido, foi revogado ou expirou.token_expired
O token de acesso OAuth expirou. Renove-o e tente de novo.HTTP 403
insufficient_scope
Falta ao token um escopo de que este endpoint precisa;param nomeia o primeiro que falta. GET /v1/me lista o que o token tem.
forbidden
A requisição não é permitida para este token.local_write_denied
O workspace desligou este tipo de escrita, em geral porque um CRM externo é a fonte da verdade.GET /v1/capabilities mostra a política.
user_grant_denied
A pessoa que autorizou esta conexão OAuth não pode fazer essa alteração na Sailer.note_author_only
Só a pessoa da equipe que escreveu a nota pode alterá-la ou excluí-la.conversation_access_denied
A pessoa que autorizou esta conexão OAuth não pode agir nesta conversa na Sailer.channel_access_denied
A pessoa que autorizou esta conexão OAuth não pode usar um canal pelo qual esta campanha envia.campaign_dispatch_denied
A pessoa que autorizou esta conexão OAuth não tem permissão para enviar campanhas.HTTP 404
not_found
Não existe esse registro neste workspace.contact_not_found
Um id de contato na requisição não existe neste workspace.pipeline_not_found
O id do funil não existe neste workspace.stage_not_found
Não há etapa com esse id ou nome no funil.record_not_found
Um id de contato, organização ou negócio no corpo não existe neste workspace ou não é visível para este token;param nomeia o campo, como record_id, contact_id ou organization_id.
HTTP 405
api_error
O método não é suportado neste caminho.HTTP 409
conflict
A requisição conflita com o estado atual.already_exists
O registro já existe.external_id_taken
Outro registro do mesmo recurso já tem esseexternal_id; a mensagem diz qual.
external_id_conflict
Oexternal_id e o phone de um upsert apontam para contatos diferentes, ou o contato encontrado já tem outro external id.
phone_mismatch
O contato com esseexternal_id tem outro telefone. O upsert nunca muda o telefone de um contato.
contact_already_exists
Já existe um contato com esse telefone; a mensagem diz qual.POST /v1/contacts/upsert cria ou atualiza numa chamada só.
campaign_not_accepting_participants
A campanha terminou e não aceita novos participantes.idempotency_key_reused
EsseIdempotency-Key já foi usado com outro corpo. Use uma chave nova para uma requisição nova.
idempotency_key_in_flight
Uma requisição com esseIdempotency-Key ainda está em processamento. Tente de novo quando ela terminar.
tag_already_exists
O catálogo de tags do recurso já tem uma tag com esse nome.conversation_closed
A conversa está encerrada; não pode ser transferida, atribuída nem retomada.conversation_not_with_ai
Uma pessoa da equipe ou a fila já está com esta conversa, então não há o que transferir. Useassign para trocar a pessoa.
conversation_with_ai
O agente de IA está com esta conversa. Usehandoff para passá-la a uma pessoa antes.
conversation_already_with_ai
O agente de IA já está com esta conversa.conversation_has_no_contact
A conversa não tem contato, ou o contato não existe mais, então não pode ser encerrada por aqui.no_agent_available
A fila da conversa não tem um agente de IA ativo com parte do trabalho para recebê-la de volta.conversation_queue_unavailable
A fila em que a conversa está não existe mais, então ela não pode ser transferida. Mova-a para outra fila na Sailer.campaign_not_running
Só uma campanha em execução pode ser pausada.campaign_not_paused
Só uma campanha pausada pode ser retomada.campaign_not_ready
Falta à campanha uma configuração de que ela precisa para enviar; a mensagem diz qual.campaign_has_no_message
A campanha não tem mensagem ativa para enviar.campaign_template_variables_unresolved
Uma variável de template na mensagem da campanha não pode ser preenchida.campaign_template_not_approved
Um template que a campanha envia ainda não foi aprovado pelo WhatsApp.campaign_channel_unavailable
Um canal pelo qual a campanha envia está faltando ou inativo.already_reversed
Este evento já foi estornado; um evento só pode ser estornado uma vez.not_a_record
Um estorno não pode ser estornado.HTTP 422
validation_failed
Alguns campos são inválidos;detail lista cada um. Problemas de query, caminho ou header respondem 400 com o mesmo código.
invalid_request
A requisição está bem formada, mas não pode ser aplicada como foi enviada.stage_not_in_pipeline
A etapa pertence a um funil diferente do do negócio.agent_activity_read_only
Esta atividade é o plano do agente de IA de falar de novo com o contato; ela só pode ser concluída ou cancelada.assignee_not_found
Oassignee_id não é de uma pessoa da equipe que possa assumir esta conversa.
won_reason_without_won
won_reason só é aceito com outcome: won.
unknown_event_code
O workspace não tem tipo de evento de sucesso com esse código.GET /v1/success-event-types lista os tipos.
value_basis_mismatch
O tipo de evento exige umvalue e nenhum foi enviado, ou proíbe e um foi enviado.
HTTP 429
rate_limit_exceeded
Requisições demais neste token. EspereRetry-After segundos antes de tentar de novo.
HTTP 500
internal_error
Algo deu errado do nosso lado. Tente de novo com backoff e informeerror.request_id ao suporte se persistir.
Códigos por campo
Um errovalidation_failed lista cada campo problemático em detail, com um destes códigos ou um tipo de validação padrão como missing.