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
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:
Hoje a integração Zoop honra
interval_count = 1 apenas. Outros valores são aceitos no schema e exibidos na UI, mas a cobrança cai pro padrão (1) até o ajuste Zoop. 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” da Stripe.
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 (padrão Stripe)
Estes campos não podem ser alterados depois que o preço existe: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 (padrão — equivalente aodefault_price_data da Stripe):
Relação com Zoop (recorrência)
Quando um preçorecurring é criado e o seller tem conta Zoop ativa, o backend cria automaticamente um plano de recorrência Zoop e persiste o ID em price.zoop_recurrence_plan_id. Esse plano é o que a Zoop usa pra cobrar o cliente nos ciclos futuros.
Se o seller ainda não tem Zoop configurado na criação, o campo fica null e o plano é criado lazy na primeira venda elegível.
