> ## Documentation Index
> Fetch the complete documentation index at: https://scaleup-c34c4386.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Precificação por Quantidade

> Cobre por unidade/assento usando o campo quantity do checkout (modelo Stripe licensed)

> [!NOTE]
>
> **Modelo licensed (Stripe)**
>
> A Chargefy segue o padrão da Stripe: um price tem **valor unitário fixo**, e a multiplicação por quantidade acontece no **checkout** (campo `quantity`) e na **assinatura** (`subscription_product_prices.quantity`). Isso cobre o caso "por assento" sem precisar de um tipo especial de preço.

## Visão Geral

No modelo **licensed + quantity**, cada price tem um `unit_amount` estável, e o total da cobrança é `unit_amount × quantity`. Conforme o cliente adiciona ou remove assentos, o `quantity` da assinatura é atualizado — o `unit_amount` do price nunca muda.

```
Total = unit_amount × quantity

Exemplo: R$ 49,90/assento × 10 assentos = R$ 499,00/mês
```

### Vantagens do modelo

| Vantagem | Descrição |
| - | - |
| Previsibilidade | Cliente sabe exatamente `unit_amount × quantity` |
| Escalabilidade | Ajuste de `quantity` não recria o price |
| Auditabilidade | Cada cobrança registra `quantity` no momento |
| Alinhamento Stripe | Mesmo modelo usado pelo mercado |

## Modelagem no banco

```
prices
├── id
├── type           = 'recurring'
├── currency       = 'brl'
├── unit_amount    = 4990      (R$ 49,90 por assento)
├── interval       = 'month'
├── interval_count = 1
└── ...

checkouts / subscription_product_prices
└── quantity       = 10         (definido no checkout, persiste na assinatura)
```

A `Price` é criada **uma vez** com o valor por assento. Todos os checkouts e assinaturas reusam essa mesma price; o que varia é o `quantity`.

## Criar produto com preço por assento

```typescript theme={null}
import { Chargefy } from '@chargefy/sdk';
const chargefy = new Chargefy({ accessToken: process.env.CHARGEFY_ACCESS_TOKEN });

await chargefy.sdk.organizations.createProduct('org_01j9abc333', {
  name: 'Team Plan',
  description: 'Assinatura mensal por assento',
  prices: [
    {
      currency: 'brl',
      unit_amount: 4990,        // R$ 49,90 por assento/mês
      type: 'recurring',
      interval: 'month',
      interval_count: 1,
    },
  ],
});
```

## Criar checkout com quantidade

No corpo do checkout (hosted ou programático), informe `quantity` junto com o `product_price_id`:

```typescript theme={null}
const session = await chargefy.checkouts.create({
  product_price_id: 'price_01j9xyz998',
  quantity: 10,
});
// session.amount = 4990 * 10 = 49900 (R$ 499,00)
```

## Atualizar assinatura (aumentar/reduzir assentos)

```typescript theme={null}
await chargefy.subscriptions.update('sub_01j9xyz123', {
  quantity: 15,
});
// Próxima cobrança usa quantity=15; período atual é pro-rateado conforme política
```

## Boas práticas

* **Valide o `quantity` no backend** antes de processar pagamentos — números negativos ou `0` devem rejeitar.
* **Não edite `unit_amount` pra representar outra faixa** — crie um novo price (ex: `price_team_starter_5` vs `price_team_pro_50`) e migre a assinatura se necessário.
* **Proration** de mudanças de quantity é política da plataforma; a Chargefy recalcula `unit_amount × quantity` no próximo ciclo por padrão.
* **Quantidade em faturas/comprovantes**: o `quantity` é persistido em `subscription_product_prices` e usado pra calcular cada fatura.

## Diferença vs "seat-based" legado

A Chargefy **não tem mais** um `amount_type='seat_based'` ou flag `is_seat_based`. O modelo Stripe-licensed + `quantity` substitui integralmente essa categoria. Qualquer produto que você queira comercializar "por assento" vira simplesmente:

* Um price com `type='recurring'`
* Um cliente chama o checkout com `quantity`

Nenhuma configuração especial em nível de produto.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.