1.
O termo é um documento de texto livre (
content). Percentuais e valores citados no texto são informativos: eles não são extraídos nem usados no cálculo de Comissões. Os parâmetros de comissionamento (percentuais, valores fixos, vigência por data) vivem nas regras de comissão do programa. O elo entre os termos e o resto da plataforma é o aceite.A entidade Termo
Um termo (term_...) é uma versão publicada do acordo de um programa:
string
Identificador com prefixo de tipo:
term_ + ULID de 26 caracteres.string
Organização (tenant) dona do termo.
string
Programa dono do termo (
prog_...). O versionamento é por programa.integer
Número da versão, sequencial a partir de
1. Atribuído automaticamente pelo servidor como a próxima versão do programa (a maior versão existente mais um). Único por programa.string
O texto do acordo. Mínimo de 1 caractere, sem limite máximo e sem estrutura.
boolean
Default
false. Sinaliza que esta versão deveria exigir re-aceite dos afiliados já cadastrados. A flag é armazenada, devolvida e incluída no evento terms.published, útil para que sua integração decida notificar os afiliados a re-aceitar. A plataforma não força o re-aceite automaticamente.string
Momento da publicação (timestamp ISO 8601).
acceptedTermsVersion (inteiro, anulável) no afiliado. Um afiliado recém-criado nasce com acceptedTermsVersion = null.
Ciclo de vida
O termo não tem um campo de status: o estado é derivado da numeração. A versão de maior número do programa é a vigente. Versões antigas continuam consultáveis e aceitáveis para sempre.- Publicação:
POST /programs/{programId}/termscria a próxima versão e emite o eventoterms.published. - Substituição: acontece implicitamente quando uma versão mais nova é publicada. Não há transição explícita, evento próprio nem alteração na versão antiga.
- Não existem operações de edição, despublicação ou exclusão. Mudar o acordo significa publicar uma nova versão.
Publicar uma nova versão
POST /programs/{programId}/terms exige papel owner ou admin. O corpo aceita content (obrigatório, mínimo 1 caractere) e requireReacceptance (opcional, default false). O endpoint suporta Idempotência via header Idempotency-Key.
Erros de POST /programs/{programId}/terms
Erros de POST /programs/{programId}/terms
400 parameter_invalid: corpo inválido (ex.:contentvazio ou ausente) ouprogramIdmal formado.401 unauthorized: sem sessão ou API key válida.403 not_allowed: membro sem papel owner/admin.404 resource_not_found: programa inexistente na organização.409 idempotency_in_flight: replay enquanto a requisição original ainda processa.400 idempotency_key_reused: mesmaIdempotency-Keycom payload diferente.
Listar versões
GET /programs/{programId}/terms está disponível para qualquer membro da organização. Diferente das demais listagens da API, este endpoint não usa paginação por cursor nem expand: devolve todas as versões do programa em data, ordenadas da mais nova para a mais antiga (version decrescente). O volume baixo de versões por programa torna a paginação desnecessária.
Erros de GET /programs/{programId}/terms
Erros de GET /programs/{programId}/terms
400 parameter_invalid:programIdmal formado (deve casarprog_+ ULID).401 unauthorized: sem sessão ou API key válida.404 resource_not_found: programa inexistente na organização.
Biblioteca de templates
Para não escrever o acordo do zero,GET /terms/templates devolve um catálogo de modelos de termos em Markdown curados pelo Repass, disponível para qualquer membro autenticado. Cada template traz variables (placeholders {{chave}} com rótulo, exemplo e valor sugerido) e o content integral: preencha as variáveis, substitua os tokens e use o resultado como content na publicação normal.
O template é um ponto de partida, não um vínculo: o texto aplicado vira o
content de uma versão publicada normalmente (snapshot imutável). Revisões futuras do catálogo não alteram termos já publicados ou aceitos, e nenhum templateId é gravado na versão.Aceite pelo afiliado
O aceite registra qual versão o afiliado concordou. A plataforma valida que o afiliado existe e que a versão informada existe no programa do afiliado, gravaacceptedTermsVersion e emite o evento affiliate.terms_accepted (com programId e termsVersion).
Pontos importantes do aceite:
- O aceite resolve a versão dentro do programa do afiliado. Aceitar uma versão que não existe naquele programa retorna
404 resource_not_foundcom o parâmetrotermsVersion. - O aceite aponta para qualquer versão publicada do programa, não apenas a vigente. É possível (e permitido) aceitar uma versão antiga, inclusive regredindo
acceptedTermsVersion: não há validação de ordem.
Eventos emitidos
Toda mudança de estado emite um evento no Event Store, disponível também para Webhooks.Próximos passos
Programas e regras
Os parâmetros de comissionamento que os termos não computam.
Afiliados
Onde mora o campo acceptedTermsVersion.
Event Store
Consulte terms.published e affiliate.terms_accepted.
Idempotência
Como evitar publicações duplicadas no POST.