Docs
...

Cobrança

A Central de Cobranças (Billing) é o app da plataforma que fatura, em nome do seu app, as áreas de trabalho que o instalam. O seu app não emite boletos nem processa pagamentos: ele declara que emite cobrança, publica um plano com preços por evento e, a cada uso cobrável, envia um evento à Central de Cobranças. Ela agrupa os eventos por competência, gera as faturas, cobra e repassa. Esta página mostra o caminho do lado do Console e da API; a referência da Central de Cobranças está em Funcionalidades para Desenvolvedores.

Passo a passo

1. Marcar o app como “Emite cobrança”

Na aba Listagens, marque Emite cobrança e salve — ou, pela CLI, iugu app publish --billable true (é uma decisão de publicação: exige aprovação). A partir daí:

  • a área de trabalho publicadora vê a pendência Aplicativos com cobrança devem ter um plano configurado e publicado até que o passo 2 esteja concluído;
  • instalar o app passa a exigir que a área de trabalho tenha os dados de cobrança preenchidos na Central de Cobranças (o Console a encaminha para lá quando faltam);
  • cada instalação cria uma assinatura do plano padrão, e a desinstalação a cancela;
  • o app não pode mais ser descartado enquanto emitir cobrança.

2. Publicar um plano na Central de Cobranças

Um plano tem versões; cada versão tem preços que ligam um nome de evento a um valor (unitário, por faixas, mínimo…). Só a versão publicada e definida como padrão é cobrada; uma versão publicada não muda mais — cria-se outra. Duas formas:

  • Pela interface, em https://billing.iugu.com/apps/<id do app> — o roteiro está em Planos de cobrança.
  • Pela CLI ou por um agente, com as ações que a Central de Cobranças expõe como provedora (veja Expor ações):
iugu call billing create_plan     --arg app_id=<id do app> --arg name="Pro"        # idempotente: cria o plano com a versão 1 em rascunho
iugu call billing add_price       --arg plan_version_id=<id da versão> \
     --arg name="Fatura emitida" --arg event=invoice.created --arg model=unit --arg 'config={"amount":"1.50"}'
iugu call billing preview_pricing --arg plan_version_id=<id da versão> --arg 'quantities={"invoice.created":230}'
iugu call billing publish_version --arg plan_version_id=<id da versão> --arg set_as_default=true   # a pessoa confirma no navegador

Os preços ligam um nome de evento (exatamente o que o seu app vai enviar) a um modelounit (por unidade), package (por pacote), tiered ou bulk (por faixas) — com valores em reais como texto ("1.50"). set_prices substitui a lista inteira de uma versão em rascunho; create_plan_version abre a próxima versão clonando os preços da atual.

Ação Permissão Nível
get_plan, get_plan_version, preview_pricing, get_events_summary billing:plans.read
create_plan, create_plan_version, set_prices, add_price, update_price, remove_price billing:plans.edit
publish_version, set_default_version billing:plans.publish Gerenciamento de Configurações — a pessoa confirma no navegador, com uma prévia dos preços que entram em vigor
discard_plan billing:plans.discard Gerenciamento de Configurações
get_revenue, list_subscriptions billing:reports.read
list_invoices, get_invoice, get_pending_amount billing:invoices.show

Info

Publicar uma versão exige que o app já esteja marcado como Emite cobrança no Console; caso contrário a Central de Cobranças responde 422 not_billable. Quem publica precisa ter as permissões billing:plans.* na área de trabalho publicadora (o papel Administrador as tem).

3. Consumir billing:event.create

Na aba Permissões do seu app, adicione billing:event.create às Ações Consumidas (e billing:event.show, billing:event.list_failed se quiser consultar e reenviar eventos). Como a Central de Cobranças está instalada em todas as áreas de trabalho, a política gerenciada concede essas ações ao seu app em cada instalação.

4. Enviar eventos de uso

O seu backend obtém um token do próprio app dirigido à Central de Cobranças e envia os eventos em lotes:

# token do app, com audiência da Central de Cobranças
# (33qqIXOLGKohFVkWBN1Apf é o id público e fixo do app Central de Cobranças, o mesmo em todos os ambientes)
curl -X POST https://identity.iugu.com/token \
  -u "<client_id>:<client_secret>" \
  -d grant_type=client_credentials \
  -d audience=Iugu.Platform.33qqIXOLGKohFVkWBN1Apf

# eventos (até 1000 por requisição)
curl -X POST https://billing.iugu.com/api/events \
  -H "Authorization: Bearer <token>" \
  -H "Workspace-Id: <id curto da área de trabalho cobrada>" \
  -H "Content-Type: application/json" \
  -d '{
        "events": [{
          "name": "invoice.created",
          "idempotency_key": "acme-invoices:inv_8f2a:created",
          "timestamp": "2026-09-20T15:04:05Z",
          "entity_name": "invoice",
          "entity_id": "inv_8f2a",
          "custom_unit_quantity": 1,
          "metadata": { "customer": "ACME Ltda" }
        }]
      }'
Campo Obrigatório Regras
name sim O nome do evento exatamente como está no preço do plano (até 255 caracteres).
idempotency_key sim Até 60 caracteres, única por app, área de trabalho e chave. Use uma chave determinística derivada da entidade cobrada (<tag>:<id>:<sufixo>), nunca um valor aleatório.
timestamp sim ISO 8601 em UTC; no máximo 23 h no passado e 1 h no futuro. Define a competência.
entity_name, entity_id não O objeto do seu domínio que gerou o evento — aparece na fatura e nos relatórios.
custom_unit_quantity não Quantidade para preços por quantidade (padrão 0).
tpv não Valor transacionado, para preços percentuais.
metadata não Objeto livre para a sua conciliação.
test não true marca o evento como teste: é registrado, não é cobrado.

A resposta 201 traz created com as chaves aceitas e, quando algum evento falhou na validação, errors por chave; 422 quando nenhum foi aceito.

Warning

Reenviar é seguro. Um evento cuja chave já foi aceita é ignorado (a chave volta ausente de created, sem erro), então um retentador simples nunca cobra duas vezes. A chave é única por app e área de trabalho: dois apps diferentes podem usar o mesmo formato de chave na mesma área de trabalho sem interferir um no outro.

Para acompanhar: GET https://billing.iugu.com/api/events/<idempotency_key> mostra um evento e seu estado; GET https://billing.iugu.com/api/events/list_failed lista os que falharam nas últimas 23 h, para correção e reenvio. A referência completa está no API Explorer da Central de Cobranças.

Faturas, valores em aberto e relatórios

As áreas de trabalho que instalaram o seu app acompanham as faturas na Central de Cobranças; quem tem billing:invoices.show e billing:reports.read também as vê no painel do Console, nos widgets Receita, Em aberto e Faturas pendentes que a Central de Cobranças oferece como provedora de ações — e pode consultá-las por um assistente conectado ao Iugu for AI (billing__list_invoices, billing__get_pending_amount, billing__get_revenue) ou pela CLI (iugu call billing list_invoices --workspace <id>).

Info

Uma área de trabalho com faturas pendentes, a vencer ou vencidas não pode ser descartada no Console: a verificação é feita ao vivo na Central de Cobranças no momento do descarte.

Resumo do modelo

Conceito Onde vive
Emite cobrança, categorias, publicação Console — aba Listagens
Plano, versões, preços por evento Central de Cobranças (interface ou ações billing:plans.*)
Assinatura da área de trabalho ao plano Criada e cancelada pelo Console na instalação e desinstalação
Eventos de uso Enviados pelo seu backend com billing:event.create
Faturas e pagamentos Central de Cobranças; visíveis nos widgets do Console e pelo Iugu for AI