Skip to main content
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)

O unit_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)
Isso substitui o que antes era chamado de “seat-based pricing” — ver Precificação por Quantidade.

Tax behavior

Declaração de como o imposto se relaciona com unit_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 = 10000 já 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 via PATCH /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:
  • currency
  • unit_amount
  • type
  • interval
  • interval_count
  • product_id
Pra mudar qualquer um deles: crie um preço novo e arquive o antigo. O PATCH /v1/prices/:id rejeita os campos acima com 400. Mutáveis via PATCH:
  • active (arquivar/desarquivar)
  • metadata
  • tax_behavior

Criar via API

Inline com o produto (padrão — equivalente ao default_price_data da Stripe):
Standalone (adicionar preço a produto existente):
Ver Criar Preço e Atualizar Preço.

Relação com Zoop (recorrência)

Quando um preço recurring é 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.