Documentação
CONTRATO

Política de versão

Quatro perguntas, respondidas por escrito: o que consideramos mudança que quebra, quanto tempo uma versão fica no ar, como avisamos uma depreciação e o que assumimos como compromisso. O que já mudou de fato está no changelog.

Escrevemos aqui só o que conseguimos cumprir com o time de hoje. Promessa de suporte longo sem gente para honrar é pior que não prometer nada, então a última seção diz, com todas as letras, o que ainda não fazemos.

Onde vive a versão

A versão do contrato HTTP está no caminho: /v1. Não existe cabeçalho de versão, e a sua integração não escolhe versão por requisição. Enquanto a URL começar com /v1, valem as regras desta página.

A versão do envelope do evento

O caminho versiona a API. O corpo do webhook versiona a si mesmo: todo evento sai com schema_version, hoje 1, logo depois do id. Ele descreve a forma do envelope, não o conteúdo da verificação.

Esse número não sobe por adição compatível. Campo novo no corpo, módulo novo em check_details e valor novo num enum de saída continuam com schema_version: 1, porque a lista logo acima já obriga a sua integração a tolerar essas três coisas. Ele sobe quando um campo muda de tipo ou de significado, e isso, pela lista de baixo, também exige /v2: os dois marcadores andam juntos de propósito, e é por isso que você nunca vai precisar decidir qual dos dois seguir.

Na prática, para quem integra: leia o campo, registre o valor no seu log e trate um número maior que o esperado como sinal de que existe uma versão nova de caminho para migrar. Não recuse o evento por causa dele: enquanto o número for 1, o corpo é o mesmo que você já sabe ler.

Como entregamos: pelo menos uma vez

Isto não é uma promessa nova, é o registro por escrito do que a plataforma sempre fez. Você vai receber o mesmo evento mais de uma vez em algum momento, e isso não é defeito: é o preço de nunca perder um desfecho. O que garantimos é a entrega, não a unicidade dela, e é por isso que o id do evento é estável, para servir de chave de deduplicação no seu lado.

A consequência prática é uma só: o seu endpoint precisa ser idempotente. Guarde o id já processado e ignore a repetição, ou trate todo evento como um upsert pelo verification_id. Quem processa webhook sem isso credita duas vezes, aprova duas vezes, ou dispara dois e-mails, no primeiro dia em que a rede engasgar.

O que é adição compatível

Estas mudanças entram em /v1 a qualquer momento, sem aviso prévio. A sua integração é obrigada a tolerá-las. Na prática isso significa: não quebre em campo desconhecido no JSON, não trate valor de enum desconhecido como erro fatal, não valide a resposta contra um esquema fechado, e não dependa da ordem das propriedades de um objeto.

O que é mudança que quebra

Estas nunca entram em /v1. Se um dia forem necessárias, elas exigem um caminho novo, /v2, e a versão antiga continua respondendo do jeito que sempre respondeu enquanto estiver no ar.

Duas exceções, pelo mesmo motivo que o mercado inteiro as abre: mudança em respostas 5xx e em 404 de recurso inexistente não conta como quebra, porque são justamente os casos em que o contrato não estava sendo cumprido.

Quanto tempo uma versão fica no ar

Aviso de 90 dias antes de uma versão nova entrar no ar, e 12 meses de convivência entre a nova e a antiga contados a partir do lançamento. Passado esse prazo, a versão antiga responde 410, e não um erro genérico: você recebe uma resposta que diz exatamente o que aconteceu.

Se a /v2 entrasse no ar emEntão
2026-10-03o aviso já estaria publicado no changelog, 90 dias antes.
2027-01-01a /v2 entra no ar e a /v1 continua funcionando igual.
2028-01-01a /v1 sai do ar e passa a responder 410.

Como avisamos uma depreciação

Depreciação é anúncio com data de saída. Ela aparece no changelog classificada como Depreciação, com o dia em que o comportamento antigo sai do ar, e no feed /docs/changelog.json no campo sunset_on daquele item, para o seu monitoramento enxergar sem depender de alguém ler esta página. O painel também traz o aviso, mas o registro que vale é o changelog: o painel é lido por uma pessoa, e integração não é gente.

A exceção de segurança

Correção de vulnerabilidade entra em /v1 na hora, sem janela de aviso, mesmo que altere comportamento observável. Ela é registrada no changelog como Correção logo em seguida. Essa exceção existe para a promessa desta página não virar algema no meio de um incidente: entre cumprir o prazo e fechar um buraco que expõe dado de cliente, a gente fecha o buraco.

O que assumimos

O que ainda não fazemos

Publicado porque a ausência declarada vale mais que a promessa vaga. Se algum destes itens for decisivo para você, diga: prioridade se muda com demanda real.

Onde isso aparece no contrato

A cláusula 2.4 dos Termos de Uso fixa 30 dias de antecedência para mudança que altere de forma relevante o comportamento observável da API, anunciada neste changelog público e por aviso no painel, e diz que mudança que quebra integração existente não entra em /v1. São 30 dias porque é o mesmo prazo que os Termos já usam para alteração de preço de módulo e para o plano gratuito. Os 90 dias desta página são um prazo maior, e valem para o caso mais pesado de todos: colocar uma versão nova no ar.