> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chargefy.io/llms.txt
> Use this file to discover all available pages before exploring further.

# Overview

> O objeto Invoice

Uma `invoice` (fatura) representa a cobrança periódica de uma assinatura ou de itens cobrados manualmente de um cliente. Ela centraliza as informações de valores devidos e pagos, os itens cobrados, os descontos aplicados e as referências aos recursos financeiros que viabilizam o pagamento, como o `payment_intent` e o `customer`.

Na Chargefy, as invoices são geradas automaticamente pelo ciclo de faturamento de uma assinatura (`subscription_cycle`, `subscription_create` ou `subscription_update`) ou podem ser criadas de forma avulsa (`manual`) para cobranças específicas. Compras avulsas diretas (one-off) não geram invoices — essas transitam direto sobre `payment_intents` para manter o fluxo leve e limpo.

Toda invoice nasce pronta para cobrança em `open` ou já liquidada em `paid`, dependendo do fluxo que a criou. Em ciclos de assinatura com cobrança pausada, a invoice pode ficar em `draft` até ser revisada fora da cobrança automática. Os valores, itens de linha, vencimento e snapshots do customer ficam fixos desde a criação. Para corrigir esses dados, cancele a invoice (`void`) e crie uma nova.

O campo `hosted_invoice_url` é a página pública dessa invoice em `billing.chargefy.io/invoice/:token`. O token é opaco e pode expirar; quando você recupera a invoice pela API, a resposta traz uma URL ativa. Enquanto a invoice está `open`, essa página pode receber pagamento pelos métodos permitidos em `payment_method_types`. Depois que a invoice é paga, cancelada ou marcada como incobrável, uma URL ativa continua servindo para visualização do estado da fatura, sem aceitar novo pagamento.

Essa URL pertence a uma invoice específica. Ela não é um `payment_link`: payment links são URLs reutilizáveis de oferta que materializam checkout sessions novas a cada clique.

## Data Object

Este é o formato completo retornado em `create`, `get`, itens de `list`, e em `data.object` dos webhooks `invoice.*`.

```json theme={}
{
  "id": "inv_123",
  "object": "invoice",
  "allow_late_payment": true,
  "amount_credit_balance_applied": 0,
  "amount_discount": 0,
  "amount_due": 9990,
  "amount_due_now": 9990,
  "amount_paid": 9990,
  "amount_remaining": 0,
  "amount_subtotal": 9990,
  "amount_tax": 0,
  "amount_total": 9990,
  "billing_reason": "subscription_cycle",
  "collection_method": "charge_automatically",
  "created_at": "2026-05-19T18:00:00Z",
  "currency": "brl",
  "customer": "cus_123",
  "customer_billing_address": {},
  "customer_billing_name": "Ada Lovelace",
  "customer_document": "12345678901",
  "customer_document_type": "cpf",
  "customer_email": "ada@example.com",
  "customer_name": "Ada Lovelace",
  "default_payment_method": "pm_123",
  "description": null,
  "due_date": "2026-05-19T18:00:00Z",
  "ending_balance": 0,
  "hosted_invoice_url": "https://billing.chargefy.io/invoice/ilink_8Pz6wKf3tVn2Qa9LmXr4Bc7D",
  "interest": null,
  "interest_amount": null,
  "invoice_pdf_url": null,
  "late_fee": null,
  "late_fee_amount": null,
  "latest_charge": "ch_123",
  "line_items": [
    {
      "id": "ili_123",
      "object": "invoice_line_item",
      "amount_discount": 0,
      "amount_subtotal": 9990,
      "amount_tax": 0,
      "amount_total": 9990,
      "currency": "brl",
      "description": "Plano mensal",
      "discountable": true,
      "metadata": {},
      "period_end": "2026-06-19T18:00:00Z",
      "period_start": "2026-05-19T18:00:00Z",
      "position": 0,
      "price": "price_123",
      "price_data": null,
      "product": "prod_123",
      "proration": false,
      "proration_details": {},
      "quantity": 1,
      "recurring_interval": "month",
      "recurring_interval_count": 1,
      "subscription_item": "si_123",
      "unit_amount": 9990
    }
  ],
  "livemode": true,
  "marked_uncollectible_at": null,
  "metadata": {},
  "number": "K7M2-0001",
  "paid_at": "2026-05-19T18:01:02Z",
  "payment_intent": "pi_123",
  "payment_method_types": [
    "credit_card"
  ],
  "payments": {
    "object": "list",
    "data": [
      {
        "id": "inpay_123",
        "object": "invoice_payment",
        "amount_paid": 9990,
        "amount_requested": 9990,
        "canceled_at": null,
        "charge": "ch_123",
        "created_at": "2026-05-19T18:00:05Z",
        "currency": "brl",
        "default": true,
        "livemode": true,
        "metadata": {},
        "paid_at": "2026-05-19T18:01:02Z",
        "payment_intent": "pi_123",
        "status": "paid",
        "updated_at": "2026-05-19T18:01:02Z"
      }
    ],
    "has_more": false,
    "url": "/v1/invoices/inv_123/payments"
  },
  "starting_balance": 0,
  "statement_descriptor": null,
  "status": "paid",
  "subscription": "sub_123",
  "updated_at": "2026-05-19T18:01:02Z",
  "voided_at": null
}
```

<ResponseField name="id" type="string">
  Identificador único da invoice, com o prefixo `inv_*`.
</ResponseField>

<ResponseField name="object" type="string">
  Sempre `"invoice"`.
</ResponseField>

<ResponseField name="amount_credit_balance_applied" type="integer">
  Valor de saldo de crédito aplicado à invoice, em centavos.
</ResponseField>

<ResponseField name="amount_discount" type="integer">
  Valor do desconto aplicado em centavos.
</ResponseField>

<ResponseField name="amount_due" type="integer">
  Valor devido em centavos. É imutável após a criação da invoice.
</ResponseField>

<ResponseField name="amount_due_now" type="integer">
  Valor a pagar no momento da resposta, incluindo multa e juros acumulados
  quando aplicáveis.
</ResponseField>

<ResponseField name="amount_paid" type="integer">
  Valor pago em centavos.
</ResponseField>

<ResponseField name="amount_remaining" type="integer">
  Valor restante devido em centavos.
</ResponseField>

<ResponseField name="amount_subtotal" type="integer">
  Subtotal em centavos, antes de descontos ou taxas.
</ResponseField>

<ResponseField name="amount_tax" type="integer">
  Valor de impostos/taxas calculados em centavos.
</ResponseField>

<ResponseField name="amount_total" type="integer">
  Valor total em centavos, equivalente a `amount_subtotal - amount_discount +
      amount_tax`.
</ResponseField>

<ResponseField name="billing_reason" type="string | null">
  O motivo de faturamento: `subscription_create`, `subscription_cycle`,
  `subscription_update` ou `manual`.
</ResponseField>

<ResponseField name="collection_method" type="string">
  Método de cobrança: `charge_automatically` (tenta cobrar o cartão salvo
  automaticamente) ou `send_invoice` (envia um link/fatura para o cliente pagar
  manualmente via Pix/boleto).
</ResponseField>

<ResponseField name="created_at" type="string">
  Data de criação em formato ISO 8601.
</ResponseField>

<ResponseField name="currency" type="string">
  Moeda da cobrança, em formato de 3 letras ISO (como `brl`).
</ResponseField>

<ResponseField name="customer" type="string | null">
  ID do customer (`cus_*`) ao qual a invoice pertence.
</ResponseField>

<ResponseField name="customer_billing_address" type="object | null">
  Snapshot do endereço de cobrança do comprador.

  <Expandable title="Campos de customer_billing_address">
    <ResponseField name="line1" type="string | null">
      Rua, número e complemento principal.
    </ResponseField>

    <ResponseField name="line2" type="string | null">
      Complemento opcional.
    </ResponseField>

    <ResponseField name="city" type="string | null">
      Cidade.
    </ResponseField>

    <ResponseField name="state" type="string | null">
      Estado ou província.
    </ResponseField>

    <ResponseField name="postal_code" type="string | null">
      CEP ou código postal.
    </ResponseField>

    <ResponseField name="country" type="string | null">
      País em código ISO de 2 letras, como `BR`.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="customer_billing_name" type="string | null">
  Nome de faturamento do comprador.
</ResponseField>

<ResponseField name="customer_document" type="string | null">
  Snapshot do documento fiscal (CPF/CNPJ) do comprador.
</ResponseField>

<ResponseField name="customer_document_type" type="string | null">
  Tipo de documento (`cpf` ou `cnpj`).
</ResponseField>

<ResponseField name="customer_email" type="string | null">
  Snapshot do e-mail do comprador.
</ResponseField>

<ResponseField name="customer_name" type="string | null">
  Snapshot do nome do comprador no momento em que a invoice foi criada.
</ResponseField>

<ResponseField name="default_payment_method" type="string | null">
  Payment method (`pm_*`) escolhido para esta invoice. Quando a invoice é paga
  sem `payment_method` explícito, a ordem de resolução é: `payment_method` do
  request, `default_payment_method` da invoice, `default_payment_method` da
  subscription, e `default_payment_method` do customer.
</ResponseField>

<ResponseField name="description" type="string | null">
  Descrição interna ou observação sobre a invoice.
</ResponseField>

<ResponseField name="due_date" type="string | null">
  Data de vencimento da fatura em formato ISO 8601.
</ResponseField>

<ResponseField name="ending_balance" type="integer">
  Saldo final do customer após a invoice, em centavos.
</ResponseField>

<ResponseField name="hosted_invoice_url" type="string | null">
  URL pública ativa onde o cliente final pode ver a invoice. Enquanto a invoice
  está `open`, a página também permite pagamento pelos métodos em
  `payment_method_types`. O token da URL é opaco e pode ser renovado pela
  Chargefy; não tente montá-lo manualmente.
</ResponseField>

<ResponseField name="interest" type="object | null">
  Configuração de juros da invoice.
</ResponseField>

<ResponseField name="interest_amount" type="integer | null">
  Valor de juros acumulado no momento da resposta, em centavos.
</ResponseField>

<ResponseField name="invoice_pdf_url" type="string | null">
  URL pública para download do PDF da fatura.
</ResponseField>

<ResponseField name="late_fee" type="object | null">
  Configuração de multa por atraso da invoice.
</ResponseField>

<ResponseField name="late_fee_amount" type="integer | null">
  Valor de multa acumulado no momento da resposta, em centavos.
</ResponseField>

<ResponseField name="latest_charge" type="string | null">
  ID do charge (`ch_*`) gerado na tentativa de pagamento bem-sucedida.
</ResponseField>

<ResponseField name="line_items" type="array">
  Lista de itens de linha faturados.

  <Expandable title="Campos de line_items[]">
    <ResponseField name="id" type="string">
      Identificador único do item.
    </ResponseField>

    <ResponseField name="object" type="string">
      Sempre `"invoice_line_item"`.
    </ResponseField>

    <ResponseField name="amount_discount" type="integer">
      Descontos aplicados especificamente a este item.
    </ResponseField>

    <ResponseField name="amount_subtotal" type="integer">
      Subtotal do item em centavos (unit\_amount \* quantidade).
    </ResponseField>

    <ResponseField name="amount_tax" type="integer">
      Impostos calculados para o item.
    </ResponseField>

    <ResponseField name="amount_total" type="integer">
      Total líquido do item em centavos.
    </ResponseField>

    <ResponseField name="currency" type="string">
      Moeda (ex: `brl`).
    </ResponseField>

    <ResponseField name="description" type="string | null">
      Descrição detalhada do item.
    </ResponseField>

    <ResponseField name="discountable" type="boolean">
      Indica se o item pode receber descontos.
    </ResponseField>

    <ResponseField name="metadata" type="object">
      Metadados associados ao item.
    </ResponseField>

    <ResponseField name="period_end" type="string | null">
      Fim do período correspondente à cobrança do item.
    </ResponseField>

    <ResponseField name="period_start" type="string | null">
      Início do período correspondente à cobrança do item.
    </ResponseField>

    <ResponseField name="position" type="integer">
      Posição/ordem do item na lista.
    </ResponseField>

    <ResponseField name="price" type="string | null">
      ID do preço (`price_*`) associado.
    </ResponseField>

    <ResponseField name="price_data" type="object | null">
      Snapshot dos dados do preço no momento do faturamento.
    </ResponseField>

    <ResponseField name="product" type="string | null">
      ID do produto (`prod_*`) associado.
    </ResponseField>

    <ResponseField name="proration" type="boolean">
      `true` quando o item representa ajuste proporcional de assinatura.
    </ResponseField>

    <ResponseField name="proration_details" type="object">
      Detalhes públicos do ajuste proporcional. Retorna `{}` quando vazio.
    </ResponseField>

    <ResponseField name="quantity" type="integer">
      Quantidade contratada/faturada.
    </ResponseField>

    <ResponseField name="recurring_interval" type="string | null">
      Intervalo de recorrência (`month`, `year`, etc.).
    </ResponseField>

    <ResponseField name="recurring_interval_count" type="integer | null">
      Multiplicador do intervalo de recorrência.
    </ResponseField>

    <ResponseField name="subscription_item" type="string | null">
      Item de assinatura (`si_*`) que originou a linha, quando existir.
    </ResponseField>

    <ResponseField name="unit_amount" type="integer">
      Valor unitário do item em centavos.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="livemode" type="boolean">
  `true` se gerada em produção; `false` se em testes.
</ResponseField>

<ResponseField name="marked_uncollectible_at" type="string | null">
  Data em que a cobrança foi marcada como incobrável.
</ResponseField>

<ResponseField name="metadata" type="object">
  Objeto de metadados customizados livre. Retorna `{}` quando vazio.
</ResponseField>

<ResponseField name="number" type="string">
  Número legível da fatura, sequencial por cliente (ex: `K7M2-0001`). Cada cliente
  recebe um prefixo próprio e a numeração reinicia nele. Sempre presente: atribuído
  na criação da fatura a partir do prefixo do cliente.
</ResponseField>

<ResponseField name="paid_at" type="string | null">
  Data de liquidação da invoice.
</ResponseField>

<ResponseField name="payment_intent" type="string | null">
  ID do payment intent (`pi_*`) utilizado para a tentativa de pagamento mais
  recente desta invoice.
</ResponseField>

<ResponseField name="payment_method_types" type="array">
  Meios de pagamento permitidos para a cobrança da invoice.
</ResponseField>

<ResponseField name="payments" type="object">
  Lista dos pagamentos/tentativas vinculados à invoice.

  <Expandable title="Campos de payments.data[]">
    <ResponseField name="id" type="string">
      ID do invoice payment (`inpay_*`).
    </ResponseField>

    <ResponseField name="object" type="string">
      Sempre `"invoice_payment"`.
    </ResponseField>

    <ResponseField name="amount_paid" type="integer | null">
      Valor pago por esta tentativa, em centavos.
    </ResponseField>

    <ResponseField name="amount_requested" type="integer">
      Valor solicitado nesta tentativa, em centavos.
    </ResponseField>

    <ResponseField name="canceled_at" type="string | null">
      Data de cancelamento desta tentativa.
    </ResponseField>

    <ResponseField name="charge" type="string | null">
      Charge (`ch_*`) vinculada à tentativa, quando existir.
    </ResponseField>

    <ResponseField name="created_at" type="string">
      Data de criação.
    </ResponseField>

    <ResponseField name="currency" type="string">
      Moeda em ISO 4217, como `brl`.
    </ResponseField>

    <ResponseField name="default" type="boolean">
      Indica a tentativa principal/atual da invoice.
    </ResponseField>

    <ResponseField name="livemode" type="boolean">
      `true` em produção; `false` em testes.
    </ResponseField>

    <ResponseField name="metadata" type="object">
      Metadados da tentativa.
    </ResponseField>

    <ResponseField name="paid_at" type="string | null">
      Data de liquidação desta tentativa.
    </ResponseField>

    <ResponseField name="payment_intent" type="string | null">
      Payment intent (`pi_*`) vinculado à tentativa.
    </ResponseField>

    <ResponseField name="status" type="string">
      `open`, `paid` ou `canceled`.
    </ResponseField>

    <ResponseField name="updated_at" type="string | null">
      Data da última atualização.
    </ResponseField>
  </Expandable>
</ResponseField>

<ResponseField name="starting_balance" type="integer">
  Saldo inicial do customer antes da invoice, em centavos.
</ResponseField>

<ResponseField name="statement_descriptor" type="string | null">
  Descrição amigável que aparece na fatura do cartão do cliente.
</ResponseField>

<ResponseField name="status" type="string">
  Estado atual da invoice: `draft`, `open`, `paid`, `uncollectible` ou `void`.
</ResponseField>

<ResponseField name="subscription" type="string | null">
  ID da assinatura (`sub_*`) associada a esta invoice.
</ResponseField>

<ResponseField name="updated_at" type="string | null">
  Data da última atualização em formato ISO 8601.
</ResponseField>

<ResponseField name="voided_at" type="string | null">
  Data em que a invoice foi cancelada.
</ResponseField>

## Operações

* [Criar invoice](/api-reference/invoices/create)
* [Listar invoices](/api-reference/invoices/list)
* [Consultar invoice](/api-reference/invoices/get)
* [Enviar invoice](/api-reference/invoices/send)
* [Pagar invoice](/api-reference/invoices/pay)
* [Cancelar invoice](/api-reference/invoices/void)

## Webhooks

Mudanças nesse objeto disparam os seguintes eventos de webhook:

* [`invoice.created`](/api-reference/webhooks/invoice.created)
* [`invoice.paid`](/api-reference/webhooks/invoice.paid)
* [`invoice.payment.failed`](/api-reference/webhooks/invoice.payment.failed)
* [`invoice.voided`](/api-reference/webhooks/invoice.voided)

O payload sempre carrega o objeto `invoice` completo em `data.object`.
