Versionamento
A Public API segue versionamento por URL — toda chamada inclui /api/v1/ no path. A versão é parte do contrato: enquanto você usa v1, garantimos compatibilidade.
Política de breaking changes
Mudanças que quebram consumidores (remover campos, renomear endpoints, mudar tipos) só acontecem em major versions novas (v2, v3).
v1 será mantida em paralelo por mínimo 12 meses após o lançamento de uma versão nova, com:
- Aviso prévio de 6 meses no changelog e e-mail pra admins
- Header
Deprecation+Sunsetnas respostas durante o período de transição - Guia de migração documentado (campos novos, campos removidos, exemplos de antes/depois)
O que NÃO é breaking change
Essas mudanças são não-breaking e podem acontecer dentro de v1 sem aviso:
- Adicionar novos campos em responses (seu cliente deve ignorar campos desconhecidos)
- Adicionar novos endpoints
- Adicionar novos query params opcionais
- Adicionar novos valores em enums (ex: novo tipo de atividade)
- Adicionar novos scopes
- Tornar campos opcionais que antes eram obrigatórios (request relaxado)
- Mudar mensagens humanas (
messageem erros) - Melhorar performance, mudar internals
O que É breaking change
Essas exigem v2:
- Remover ou renomear campos em responses
- Remover endpoints
- Mudar tipo de um campo (
string→number, etc.) - Tornar campos obrigatórios que eram opcionais
- Remover valores de enum
- Mudar códigos de erro (
errorfield) - Mudar shape de respostas (ex: trocar array por
{ data, pagination }sem fallback)
Como saber se vai mudar
- Changelog público: github.com/indutiva/indutivacrm/blob/main/CHANGELOG.md
- Header de resposta: quando um endpoint estiver deprecated, todas as respostas incluem:
Deprecation: trueSunset: Wed, 22 May 2027 00:00:00 GMTLink: <https://developers.indutivacrm.com.br/migration/v2-contacts>; rel="successor-version"
- E-mail pros admins do tenant 6 meses antes do sunset
Convenção semver dos campos
Embora a API use versionamento por URL (não semver no path), internamente a gente trata:
- Patch (bugfix): correção de bug sem mudar contrato — sai sem aviso
- Minor (feature aditiva): novos endpoints/campos/params — anunciado no changelog
- Major (breaking): nova
v*com sunset da anterior — anunciado com 6+ meses de antecedência
Tolerância no cliente
Boas práticas pra tornar sua integração robusta:
- Ignore campos desconhecidos — não falhe se a resposta tem campos novos que você não esperava
- Lide com enums novos — em vez de
switchexaustivo, tenha umdefaultque faz algo razoável - Não dependa da ordem dos campos em JSON
- Não dependa de mensagens humanas — sempre
switchnoerrorfield, nunca nomessage - Persista IDs como string — IDs são strings opacas (cuids), nunca trate como número