Documentation Index
Fetch the complete documentation index at: https://docs.chargefy.io/llms.txt
Use this file to discover all available pages before exploring further.
Price é o objeto canônico de cobrança.Todo pagamento (único ou recorrente) usa um
Price atrelado a um Product. O valor, a moeda, a cadência e o comportamento tributário vivem aqui.Um produto pode ter vários preços; o checkout escolhe qual usar.Campos
| Campo | Tipo | Descrição |
|---|---|---|
id | string | ID único do preço |
product_id | string | FK obrigatória pra um produto |
type | 'one_time' | 'recurring' | Tipo — compra única ou assinatura |
currency | string | ISO 4217 em minúsculas (ex: brl, usd) |
unit_amount | integer | Valor unitário em minor units (centavos) |
interval | 'day' | 'week' | 'month' | 'year' | null | Obrigatório se type='recurring' |
interval_count | integer | Quantidade de intervalos entre cobranças. null em one_time, default 1 em recurring |
tax_behavior | 'unspecified' | 'inclusive' | 'exclusive' | Como o imposto se relaciona com unit_amount |
active | boolean | Ativo pra novas vendas. false = arquivado |
metadata | object | Metadata livre (chave/valor) |
zoop_recurrence_plan_id | string | null | Set pelo backend quando o seller tem cadastro financeiro completo |
Tipos de preço
One-time (type = 'one_time')
Cobrança única. Aceita PIX, cartão e boleto. unit_amount pode ser 0 (produto gratuito).
Recurring (type = 'recurring')
Assinatura. Requer interval + interval_count. unit_amount precisa ser > 0.
Cadências suportadas
interval × interval_count dá bastante flexibilidade:
| Cadência | interval | interval_count |
|---|---|---|
| Diária | day | 1 |
| Semanal | week | 1 |
| Quinzenal | week | 2 |
| Mensal | month | 1 |
| Bimestral | month | 2 |
| Trimestral | month | 3 |
| Semestral | month | 6 |
| Anual | year | 1 |
| Bienal | year | 2 |
Hoje só
interval_count = 1 é honrado na cobrança. Outros valores são aceitos no schema e exibidos na UI, mas caem pro padrão (1) até o roadmap próximo.Quantidade (licensed)
Ounit_amount é unitário. Multiplicação por quantity acontece no checkout / assinatura — não no preço. É o modelo “licensed”.
quantity é persistido em:
checkouts.quantity(definido pelo comprador)subscription_product_prices.quantity(persistido na assinatura, base de toda renovação)
Tax behavior
Declaração de como o imposto se relaciona comunit_amount:
unspecified(default) — o campo existe mas não afeta cobrança. Use quando não tem posição definida.inclusive— imposto já incluso no valor. Ex:unit_amount = 10000já contém ISS/IVA.exclusive— imposto adicional. Ex:unit_amount = 10000+ imposto somado no checkout.
Hoje o campo é declarativo e não afeta o cálculo final da cobrança. Roadmap aplica durante finalização do pagamento quando o módulo de impostos for lançado.
Arquivar vs deletar
Prices não são deletáveis — cobranças históricas dependem deles. A operação correta é arquivar viaPATCH /v1/prices/:id { active: false }.
- Preço arquivado: some de novos checkouts
- Assinaturas em curso: continuam renovando com o preço original (imutabilidade)
- Pra reativar:
PATCH { active: true }
Imutabilidade
Estes campos não podem ser alterados depois que o preço existe (campos de valor precisam ser auditáveis):currencyunit_amounttypeintervalinterval_countproduct_id
PATCH /v1/prices/:id rejeita os campos acima com 400.
Mutáveis via PATCH:
active(arquivar/desarquivar)metadatatax_behavior
Criar via API
Inline com o produto (cria produto e preço em uma chamada):Provisionamento do plano de recorrência
Quando um preçorecurring é criado e o seller tem cadastro financeiro ativo, o backend cria automaticamente um plano de recorrência e persiste o ID em price.zoop_recurrence_plan_id. Esse plano é usado pra cobrar o cliente nos ciclos futuros.
Se o seller ainda não tem cadastro completo na criação, o campo fica null e o plano é criado lazy na primeira venda elegível.
