Skip to main content
Ideal para SaaS B2BA precificação por assento é o modelo mais popular para SaaS B2B. Cada “assento” representa um usuário que tem acesso ao produto, e o valor da assinatura é proporcional à quantidade de assentos contratados.

Visão Geral

No modelo de precificação por assento (per-seat pricing), o cliente paga um valor fixo por cada usuário que utiliza o produto. Conforme a equipe cresce, o valor da assinatura aumenta proporcionalmente.

Como funciona

Valor da assinatura = Preço por assento × Quantidade de assentos

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

Vantagens do modelo

VantagemDescrição
PrevisibilidadeO cliente sabe exatamente quanto vai pagar
EscalabilidadeA receita cresce junto com o uso do cliente
SimplicidadeFácil de entender e comunicar
AlinhamentoPreço proporcional ao valor entregue

Configuração no Produto

Criar produto com precificação por assento

import { Chargefy } from "@chargefy/sdk";

const chargefy = new Chargefy({
  accessToken: process.env.CHARGEFY_ACCESS_TOKEN,
  server: "https://api.chargefy.io",
});

const product = await chargefy.products.create({
  name: "Plataforma de Gestão",
  description: "Gerencie sua equipe com eficiência",
  prices: [
    {
      type: "recurring",
      amount_type: "fixed",
      price_amount: 4990, // R$ 49,90 por assento
      price_currency: "brl",
      recurring_interval: "month",
      is_seat_based: true,
      minimum_seats: 1,
      maximum_seats: 500,
    },
    {
      type: "recurring",
      amount_type: "fixed",
      price_amount: 49900, // R$ 499,00 por assento/ano (2 meses grátis)
      price_currency: "brl",
      recurring_interval: "year",
      is_seat_based: true,
      minimum_seats: 1,
      maximum_seats: 500,
    },
  ],
});

Parâmetros de configuração

ParâmetroTipoDescrição
is_seat_basedbooleanAtiva o modelo de precificação por assento
price_amountnumberValor por assento em centavos (ex: 4990 = R$ 49,90)
minimum_seatsnumberQuantidade mínima de assentos (padrão: 1)
maximum_seatsnumberQuantidade máxima de assentos (opcional)

Múltiplos planos com assentos

É comum oferecer diferentes planos com preços por assento distintos:
// Plano Starter - R$ 29,90/assento/mês
const starter = await chargefy.products.create({
  name: "Starter",
  prices: [
    {
      type: "recurring",
      amount_type: "fixed",
      price_amount: 2990,
      price_currency: "brl",
      recurring_interval: "month",
      is_seat_based: true,
      minimum_seats: 1,
      maximum_seats: 10,
    },
  ],
});

// Plano Professional - R$ 49,90/assento/mês
const professional = await chargefy.products.create({
  name: "Professional",
  prices: [
    {
      type: "recurring",
      amount_type: "fixed",
      price_amount: 4990,
      price_currency: "brl",
      recurring_interval: "month",
      is_seat_based: true,
      minimum_seats: 5,
      maximum_seats: 100,
    },
  ],
});

// Plano Enterprise - R$ 39,90/assento/mês (desconto por volume)
const enterprise = await chargefy.products.create({
  name: "Enterprise",
  prices: [
    {
      type: "recurring",
      amount_type: "fixed",
      price_amount: 3990,
      price_currency: "brl",
      recurring_interval: "month",
      is_seat_based: true,
      minimum_seats: 50,
      maximum_seats: 500,
    },
  ],
});

Checkout com Assentos

Ao criar um checkout para um produto com precificação por assento, o cliente pode selecionar a quantidade desejada.

Criar checkout com quantidade pré-definida

const checkout = await chargefy.checkouts.create({
  product_price_id: "price_abc123",
  quantity: 10, // 10 assentos
  success_url: "https://app.meusaas.com.br/welcome",
});

console.log(`Checkout URL: ${checkout.url}`);
// Valor total: 10 × R$ 49,90 = R$ 499,00/mês

Checkout com seleção dinâmica

Quando o cliente acessa o checkout sem quantidade definida, ele pode escolher a quantidade de assentos na página de checkout. O valor total é calculado em tempo real.
// Checkout onde o cliente escolhe a quantidade
const checkout = await chargefy.checkouts.create({
  product_price_id: "price_abc123",
  allow_quantity_selection: true,
  success_url: "https://app.meusaas.com.br/welcome",
});
No checkout, a Chargefy exibe automaticamente o cálculo do valor total baseado na quantidade de assentos selecionada. O mínimo e máximo configurados no produto são respeitados.

Gerenciamento de Assentos

Após a assinatura ser criada, o cliente pode adicionar ou remover assentos via API ou pelo portal do cliente.

Consultar assentos atuais

const subscription = await chargefy.subscriptions.get(subscriptionId);

console.log(`Assentos contratados: ${subscription.quantity}`);
console.log(`Valor por assento: R$ ${(subscription.price_amount / 100).toFixed(2)}`);
console.log(`Valor total: R$ ${(subscription.total_amount / 100).toFixed(2)}`);

Adicionar assentos

// Adicionar 5 assentos (de 10 para 15)
const updated = await chargefy.subscriptions.updateSeats(subscriptionId, {
  quantity: 15,
});

console.log(`Novos assentos: ${updated.quantity}`);
console.log(`Novo valor mensal: R$ ${(updated.total_amount / 100).toFixed(2)}`);
// Proration aplicado automaticamente para o ciclo atual

Remover assentos

// Remover 3 assentos (de 15 para 12)
const updated = await chargefy.subscriptions.updateSeats(subscriptionId, {
  quantity: 12,
});

console.log(`Assentos atualizados: ${updated.quantity}`);
A quantidade de assentos não pode ser menor que o minimum_seats configurado no produto. A API retornará um erro se a quantidade solicitada for inferior ao mínimo.

Listar membros de uma assinatura

const members = await chargefy.subscriptions.listMembers(subscriptionId);

for (const member of members.items) {
  console.log(`${member.name} - ${member.email} - ${member.role}`);
}

console.log(`Total de membros: ${members.items.length}`);
console.log(`Assentos contratados: ${members.seats_total}`);
console.log(`Assentos disponíveis: ${members.seats_available}`);

Proration (Rateio)

Quando assentos são adicionados ou removidos no meio de um ciclo de cobrança, a Chargefy calcula automaticamente o proration (rateio).

Como o proration funciona

Exemplo: Plano mensal R$ 49,90/assento, ciclo dia 1 a 30

Dia 15: Cliente adiciona 5 assentos
  → 15 dias restantes no ciclo (50%)
  → Cobrança adicional: 5 × R$ 49,90 × 50% = R$ 124,75

Dia 20: Cliente remove 2 assentos
  → 10 dias restantes no ciclo (33,3%)
  → Crédito: 2 × R$ 49,90 × 33,3% = R$ 33,23
  → Crédito aplicado na próxima fatura

Comportamento do proration

AçãoCobrançaQuando
Adicionar assentosCobrança proporcional imediataNa hora da alteração
Remover assentosCrédito na próxima faturaNo próximo ciclo

Consultar proration antes de aplicar

// Preview da alteração sem aplicar
const preview = await chargefy.subscriptions.previewSeatChange(
  subscriptionId,
  {
    quantity: 20,
  }
);

console.log(`Assentos atuais: ${preview.current_quantity}`);
console.log(`Novos assentos: ${preview.new_quantity}`);
console.log(`Diferença: ${preview.seat_difference}`);
console.log(`Valor do proration: R$ ${(preview.proration_amount / 100).toFixed(2)}`);
console.log(`Próxima fatura: R$ ${(preview.next_invoice_amount / 100).toFixed(2)}`);

Dashboard

No painel da Chargefy, você pode visualizar e gerenciar assentos de todas as assinaturas:

Métricas disponíveis

  • Total de assentos ativos: Quantidade total de assentos em todas as assinaturas
  • Receita por assento: Receita média por assento contratado
  • Taxa de expansão: Percentual de clientes que adicionaram assentos
  • Assentos ociosos: Assentos contratados mas não utilizados

Ações no dashboard

1

Visualizar assinaturas por assento

Em Assinaturas, filtre por produtos com precificação por assento para ver a distribuição de assentos.
2

Ajustar assentos manualmente

Clique em uma assinatura e use o botão Alterar Assentos para ajustar a quantidade manualmente.
3

Configurar limites

Em Produtos, edite o produto para ajustar os limites mínimo e máximo de assentos.

Exemplo Completo

Sistema de gerenciamento de assentos

import { Chargefy } from "@chargefy/sdk";

const chargefy = new Chargefy({
  accessToken: process.env.CHARGEFY_ACCESS_TOKEN,
  server: "https://api.chargefy.io",
});

// 1. Criar produto com precificação por assento
const product = await chargefy.products.create({
  name: "Ferramenta de Projetos",
  description: "Gerencie projetos e equipes com facilidade",
  prices: [
    {
      type: "recurring",
      amount_type: "fixed",
      price_amount: 3990, // R$ 39,90/assento/mês
      price_currency: "brl",
      recurring_interval: "month",
      is_seat_based: true,
      minimum_seats: 3,
      maximum_seats: 200,
    },
  ],
});

// 2. Criar checkout para 10 assentos
const checkout = await chargefy.checkouts.create({
  product_price_id: product.prices[0].id,
  quantity: 10,
  success_url: "https://app.meuprojeto.com.br/welcome",
});

console.log(`Checkout: ${checkout.url}`);
// Valor: 10 × R$ 39,90 = R$ 399,00/mês

// 3. Após a compra, verificar assentos
const subscription = await chargefy.subscriptions.get("sub_xyz789");
console.log(`Assentos: ${subscription.quantity}`);

// 4. Equipe cresceu, adicionar mais 5 assentos
const previewAdd = await chargefy.subscriptions.previewSeatChange(
  subscription.id,
  { quantity: 15 }
);
console.log(`Proration: R$ ${(previewAdd.proration_amount / 100).toFixed(2)}`);

// Confirmar alteração
await chargefy.subscriptions.updateSeats(subscription.id, {
  quantity: 15,
});
// Novo valor: 15 × R$ 39,90 = R$ 598,50/mês

// 5. Membro saiu, remover 1 assento
await chargefy.subscriptions.updateSeats(subscription.id, {
  quantity: 14,
});
// Novo valor: 14 × R$ 39,90 = R$ 558,60/mês
// Crédito do assento removido aplicado na próxima fatura

Webhook para monitorar alterações de assento

import express from "express";

const app = express();
app.use(express.json());

app.post("/webhooks/chargefy", async (req, res) => {
  const event = req.body;

  switch (event.type) {
    case "subscription.updated":
      const { quantity, previous_quantity } = event.data;

      if (quantity !== previous_quantity) {
        const diff = quantity - previous_quantity;
        const action = diff > 0 ? "adicionados" : "removidos";

        console.log(
          `${Math.abs(diff)} assento(s) ${action} na assinatura ${event.data.id}`
        );

        if (diff > 0) {
          // Assentos adicionados - provisionar acessos
          await provisionNewSeats(event.data.id, diff);
        } else {
          // Assentos removidos - revogar acessos excedentes
          await revokeExcessSeats(event.data.id, Math.abs(diff));
        }
      }
      break;

    case "subscription.active":
      if (event.data.is_proration) {
        console.log(
          `Cobrança de proration: R$ ${(event.data.amount / 100).toFixed(2)}`
        );
      }
      break;
  }

  res.status(200).json({ received: true });
});

Boas Práticas

Configure o minimum_seats baseado no perfil do seu cliente ideal. Para produtos B2B, um mínimo de 3 a 5 assentos ajuda a qualificar clientes e aumentar o ticket médio.
Crie planos com preços por assento decrescentes conforme a quantidade aumenta. Ex: Starter (1-10 assentos) R49,90/assento,Pro(1150)R 49,90/assento, Pro (11-50) R 39,90/assento, Enterprise (51+) R$ 29,90/assento.
Assentos contratados mas não utilizados são indicadores de possível churn. Envie notificações para administradores quando assentos ficam inativos por mais de 30 dias.
Permita que administradores da conta adicionem e removam assentos pelo portal do cliente sem precisar entrar em contato com o suporte. Isso reduz fricção e acelera a expansão.
Antes de confirmar uma alteração de assentos, sempre mostre o preview do proration para o cliente. Use o endpoint previewSeatChange para exibir o valor que será cobrado ou creditado.
Configure alertas quando o cliente atingir 80% do maximum_seats. Isso abre oportunidade de upgrade para um plano com limite maior e evita bloqueios inesperados.