> For the complete documentation index, see [llms.txt](https://developer.paddle.com/llms.txt).

# Create and issue invoices

Create invoices as part of a sales-assisted billing process using manually-collected transactions. Paddle automatically creates a subscription for you once an invoice is issued.

---

[Invoices](https://developer.paddle.com/concepts/sell/sales-assisted-invoice.md) let you offer sales-assisted billing. Your sales team can draft and send invoices for subscriptions, collecting payment manually rather than by charging a card on file.

They're generally used for bigger-dollar deals, like enterprise plans, and might include one-time or recurring fees for things like implementation or support.

## How it works

When customers sign up and pay for a subscription using [Paddle Checkout](https://developer.paddle.com/concepts/sell/self-serve-checkout.md), Paddle collects using an automatically-collected transaction and creates a [subscription](https://developer.paddle.com/api-reference/subscriptions/overview.md) where the collection mode is automatic. The payment method used is stored internally for renewals and other subscription-related charges; it's only saved as a [saved payment method](https://developer.paddle.com/api-reference/payment-methods/overview.md) if the customer opts in.

Invoices work using manually-collected transactions. This means that Paddle sends an invoice that customers must pay themselves by [bank transfer](https://developer.paddle.com/concepts/payment-methods/wire-transfer.md) or using Paddle Checkout. Paddle creates a subscription when an invoice is issued, and future renewals and charges send new invoices that the customer must pay manually.

### Invoice lifecycle

Transaction statuses mirror the invoice lifecycle:

{% steps level=4 %}
{% step-item title="Draft your invoice" %}
When you create an invoice (manually-collected transaction), it's initially a draft. You can work through changes with the customer, adding or removing items as you scope out their requirements. Draft invoices may have the status `draft` or `ready`. They're `ready` when they have all the required fields to be issued.
{% /step-item %}
{% step-item title="Issue your invoice" %}
Once you and the customer are happy with an invoice (manually-collected transaction), you can issue it by marking the transaction as billed. At this point, it is assigned an invoice number and becomes a financial record. Paddle automatically sends a copy to the customer and creates a subscription for them. In Paddle, the status updates to `billed`.
{% /step-item %}
{% step-item title="Payment received" %}
When the customer pays an invoice (manually-collected transaction), Paddle automatically handles reconciliation and marks the invoice as paid. The status in Paddle is now `completed`.
{% /step-item %}
{% /steps %}

Payments, including failed payment attempts, are logged against a transaction. Customers can pay invoices by [bank transfer](https://developer.paddle.com/concepts/payment-methods/wire-transfer.md), or you can turn Paddle Checkout for an invoice to let customers pay using card, digital wallet, or [a local payment method](https://developer.paddle.com/concepts/payment-methods/overview.md). This is especially handy for lower-value changes, like adding users or modules mid-cycle.

{% callout type="note" %}
This guide focuses on creating **manually-collected transactions**. You can also [create automatically-collected transactions](https://developer.paddle.com/build/transactions/create-transaction.md), then pass them to Paddle.js to open a checkout for the items on them.
{% /callout %}

## Before you begin

- **Set your default payment link**  
  [Set your default payment link](https://developer.paddle.com/build/transactions/default-payment-link.md) under **Paddle > Checkout > Checkout settings > Default payment link** and get it approved.
- **Create products and prices**  
  Transactions work with products and prices to say what a customer is purchasing, so you'll also need to [create a product and a related price](https://developer.paddle.com/build/products/create-products-prices.md) to bill for an item in your catalog.

If you're working with the Paddle dashboard, you can create all the entities that you'll be working with as you create your invoice (manually-collected transaction). If you're working with the API, you'll need to:

- [Create a customer](https://developer.paddle.com/build/customers/create-update-customers#create-customer.md) and [a related address](https://developer.paddle.com/build/customers/create-update-customers#create-address.md)
- Optionally create [a related business](https://developer.paddle.com/build/customers/create-update-customers#create-business.md)

## Create a draft invoice

To create an invoice, create a transaction with the `collection_mode` set to `manual`.

Manually-collected transactions have the status of either `draft` or `ready` when you first create them. They're draft `draft` while they're missing `items`, `customer_id`, and `address_id`, and they automatically change to `ready` when you add those fields.

{% tabs sync="interaction-preference" %}
{% tab-item title="Dashboard" %}

1. Go to **Paddle > Invoices**.
2. Click New invoice
3. Choose or create a customer, business, and address for the customer.
4. Choose whether to bill in `USD`, `EUR`, or `GBP`.
5. Choose a product, related price, and quantity for your first item.
6. Click the Add line item link to add items new items to the items list. Choose a product, related price, and quantity for each item.
7. Click Save draft to save as a draft.

{% callout type="info" %}
Grab a copy of the draft invoice as a PDF from the main invoices screen by clicking  next to the invoice in the list, then choosing Download PDF from the menu.
{% /callout %}

{% /tab-item %}
{% tab-item title="API" %}

Send a `POST` request to the `/transactions` endpoint to create a manually-collected transaction.

Set `collection_mode` to `manual` to say this is an invoice, rather than a transaction for a checkout.

In your request, include:

- `items`: an array of price IDs and quantities from your catalog, or [custom items](https://developer.paddle.com/build/transactions/bill-create-custom-items-prices-products.md) with inline price objects
- `billing_details`: invoicing-specific fields like purchase order number and payment terms
- `customer_id` and `address_id`: who the invoice is for; include `business_id` if billing a business

Transactions are automatically marked `ready` (eligible to issue) when they have `customer_id`, `address_id`, and `items`.

{% callout type="info" %}
Recurring items on a transaction must have the same billing interval. For example, you can't have a transaction with some prices that are billed monthly and some products that are billed annually.
{% /callout %}

{% api-example method="POST" path="/transactions" href="/api-reference/transactions/create-transaction" %}

```json
{
  "items": [
    {
      "price_id": "pri_01gsz91wy9k1yn7kx82aafwvea",
      "quantity": 50
    },
    {
      "price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
      "quantity": 1
    },
    {
      "price_id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
      "quantity": 1
    }
  ],
  "customer_id": "ctm_01h3h38xn5c2701bb5eecy9m6a",
  "address_id": "add_01h3h38xqmv1xy0tjsnj0g1ke5",
  "collection_mode": "manual",
  "billing_details": {
    "enable_checkout": false,
    "payment_terms": {
      "interval": "day",
      "frequency": 14
    }
  }
}
```

```json
{
  "data": {
    "id": "txn_01hgjw25swyhhdfr29aj43rx1w",
    "status": "ready",
    "customer_id": "ctm_01h3h38xn5c2701bb5eecy9m6a",
    "address_id": "add_01h3h38xqmv1xy0tjsnj0g1ke5",
    "business_id": null,
    "custom_data": null,
    "origin": "api",
    "collection_mode": "manual",
    "subscription_id": null,
    "invoice_id": null,
    "invoice_number": null,
    "billing_details": {
      "enable_checkout": false,
      "payment_terms": {
        "interval": "day",
        "frequency": 14
      },
      "purchase_order_number": null,
      "additional_information": null
    },
    "billing_period": null,
    "currency_code": "USD",
    "discount_id": null,
    "created_at": "2023-12-01T14:21:01.127846913Z",
    "updated_at": "2023-12-01T14:21:01.127846913Z",
    "billed_at": null,
    "items": [
      {
        "price": {
          "id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "description": "Annual (per seat)",
          "name": null,
          "product_id": "pro_01gsz4vmqbjk3x4vvtafffd540",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "50000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 100
          },
          "status": "active"
        },
        "quantity": 50
      },
      {
        "price": {
          "id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "description": "One-time charge",
          "name": "One-time charge",
          "product_id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
          "billing_cycle": null,
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "19900",
            "currency_code": "USD"
          },
          "unit_price_overrides": [
            {
              "country_codes": ["AU"],
              "unit_price": {
                "amount": "40000",
                "currency_code": "AUD"
              }
            }
          ],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      },
      {
        "price": {
          "id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "description": "Annual (recurring addon)",
          "name": "Annual (recurring addon)",
          "product_id": "pro_01h1vjes1y163xfj1rh1tkfb65",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "100000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      }
    ],
    "details": {
      "tax_rates_used": [
        {
          "tax_rate": "0.08875",
          "totals": {
            "subtotal": "2619900",
            "discount": "0",
            "tax": "232516",
            "total": "2852416"
          }
        }
      ],
      "totals": {
        "subtotal": "2619900",
        "tax": "232516",
        "discount": "0",
        "total": "2852416",
        "grand_total": "2852416",
        "fee": null,
        "credit": "0",
        "balance": "2852416",
        "earnings": null,
        "currency_code": "USD"
      },
      "adjusted_totals": {
        "subtotal": "2619900",
        "tax": "232516",
        "total": "2852416",
        "grand_total": "2852416",
        "fee": "0",
        "earnings": "0",
        "currency_code": "USD"
      },
      "payout_totals": null,
      "adjusted_payout_totals": null,
      "line_items": [
        {
          "id": "txnitm_01hgjw269kayg28zp7gm15sfy6",
          "price_id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "quantity": 50,
          "totals": {
            "subtotal": "2500000",
            "tax": "221875",
            "discount": "0",
            "total": "2721875"
          },
          "product": {
            "id": "pro_01gsz4vmqbjk3x4vvtafffd540",
            "name": "ChatApp Enterprise",
            "description": "The ultimate solution for businesses that require top-of-the-line features and customizations. Includes all the features of the Pro plan, plus personalized onboarding, dedicated account management, and the ability to pay via invoice.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/2nmP8MQSret0aWeDemRw_icon1.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "50000",
            "tax": "4437",
            "discount": "0",
            "total": "54437"
          }
        },
        {
          "id": "txnitm_01hgjw269kayg28zp7gnjef73r",
          "price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "quantity": 1,
          "totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          },
          "product": {
            "id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
            "name": "Custom domains",
            "description": "Make ChatApp truly your own with custom domains! Custom domains reinforce your brand identity and make it easy for your team to access ChatApp.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/SW3OevDQ92dUHSkN5a2x_icon3.png",
            "custom_data": {
              "crm_id": "ABC"
            },
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          }
        },
        {
          "id": "txnitm_01hgjw269kayg28zp7gpndy87v",
          "price_id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "quantity": 1,
          "totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          },
          "product": {
            "id": "pro_01h1vjes1y163xfj1rh1tkfb65",
            "name": "Voice rooms addon",
            "description": "Create voice rooms in your chats to work in real time alongside your colleagues. Includes unlimited voice rooms and recording backup for compliance.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/GcZzBjXRfiraensppgtQ_icon2.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          }
        }
      ]
    },
    "payments": [],
    "checkout": {
      "url": null
    }
  },
  "meta": {
    "request_id": "d57e8d4d-dc31-488e-b87f-a1993c9744a3"
  }
}
```

{% /api-example %}

{% /tab-item %}
{% /tabs %}

## Update a draft invoice

While transactions are `draft` or `ready`, they don't have invoice numbers and aren't considered financial records yet. This means that you can make changes to the transaction and its items.

{% tabs sync="interaction-preference" %}
{% tab-item title="Dashboard" %}

1. Go to **Paddle > Invoices**.
2. Search for the invoice that you want to change.
3. Click the  next to an invoice in the list, then choose Edit invoice from the menu.
4. Change customer details or items on your invoice.
5. Click Save draft to save as a draft.

{% /tab-item %}
{% tab-item title="API" %}

Send a `PATCH` request to the `/transactions/{transaction_id}` endpoint to update a manually-collected transaction.

Send the complete list of items you want on the invoice — including any existing items you want to keep. Omitting an item removes it. See [work with lists](https://developer.paddle.com/api-reference/about/lists.md).

{% accordion %}
{% accordion-item title="Update a purchase order number" %}

{% api-example method="PATCH" path="/transactions/{transaction_id}" href="/api-reference/transactions/update-transaction" %}

```json
{
  "billing_details": {
    "purchase_order_number": "PO-123"
  }
}
```

```json
{
  "data": {
    "id": "txn_01hgjw25swyhhdfr29aj43rx1w",
    "status": "ready",
    "customer_id": "ctm_01h3h38xn5c2701bb5eecy9m6a",
    "address_id": "add_01h3h38xqmv1xy0tjsnj0g1ke5",
    "business_id": null,
    "custom_data": null,
    "origin": "api",
    "collection_mode": "manual",
    "subscription_id": null,
    "invoice_id": "inv_01hgjw26sp5exv8233w3stc3a1",
    "invoice_number": null,
    "billing_details": {
      "enable_checkout": false,
      "payment_terms": {
        "interval": "day",
        "frequency": 14
      },
      "purchase_order_number": "PO-123",
      "additional_information": null
    },
    "billing_period": {
      "starts_at": "2023-12-01T00:00:00Z",
      "ends_at": "2024-11-30T23:59:00Z"
    },
    "currency_code": "USD",
    "discount_id": null,
    "created_at": "2023-12-01T14:21:01.127846Z",
    "updated_at": "2023-12-01T14:36:24.408358Z",
    "billed_at": null,
    "items": [
      {
        "price": {
          "id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "description": "Annual (per seat)",
          "name": null,
          "product_id": "pro_01gsz4vmqbjk3x4vvtafffd540",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "50000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 100
          },
          "status": "active"
        },
        "quantity": 50
      },
      {
        "price": {
          "id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "description": "One-time charge",
          "name": "One-time charge",
          "product_id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
          "billing_cycle": null,
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "19900",
            "currency_code": "USD"
          },
          "unit_price_overrides": [
            {
              "country_codes": ["AU"],
              "unit_price": {
                "amount": "40000",
                "currency_code": "AUD"
              }
            }
          ],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      },
      {
        "price": {
          "id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "description": "Annual (recurring addon)",
          "name": "Annual (recurring addon)",
          "product_id": "pro_01h1vjes1y163xfj1rh1tkfb65",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "100000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      }
    ],
    "details": {
      "tax_rates_used": [
        {
          "tax_rate": "0.08875",
          "totals": {
            "subtotal": "2619900",
            "discount": "0",
            "tax": "232516",
            "total": "2852416"
          }
        }
      ],
      "totals": {
        "subtotal": "2619900",
        "tax": "232516",
        "discount": "0",
        "total": "2852416",
        "grand_total": "2852416",
        "fee": null,
        "credit": "0",
        "balance": "2852416",
        "earnings": null,
        "currency_code": "USD"
      },
      "adjusted_totals": {
        "subtotal": "2619900",
        "tax": "232516",
        "total": "2852416",
        "grand_total": "2852416",
        "fee": "0",
        "earnings": "0",
        "currency_code": "USD"
      },
      "payout_totals": null,
      "adjusted_payout_totals": null,
      "line_items": [
        {
          "id": "txnitm_01hgjw269kayg28zp7gm15sfy6",
          "price_id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "quantity": 50,
          "totals": {
            "subtotal": "2500000",
            "tax": "221875",
            "discount": "0",
            "total": "2721875"
          },
          "product": {
            "id": "pro_01gsz4vmqbjk3x4vvtafffd540",
            "name": "ChatApp Enterprise",
            "description": "The ultimate solution for businesses that require top-of-the-line features and customizations. Includes all the features of the Pro plan, plus personalized onboarding, dedicated account management, and the ability to pay via invoice.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/2nmP8MQSret0aWeDemRw_icon1.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "50000",
            "tax": "4437",
            "discount": "0",
            "total": "54437"
          }
        },
        {
          "id": "txnitm_01hgjw269kayg28zp7gnjef73r",
          "price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "quantity": 1,
          "totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          },
          "product": {
            "id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
            "name": "Custom domains",
            "description": "Make ChatApp truly your own with custom domains! Custom domains reinforce your brand identity and make it easy for your team to access ChatApp.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/SW3OevDQ92dUHSkN5a2x_icon3.png",
            "custom_data": {
              "crm_id": "ABC"
            },
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          }
        },
        {
          "id": "txnitm_01hgjw269kayg28zp7gpndy87v",
          "price_id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "quantity": 1,
          "totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          },
          "product": {
            "id": "pro_01h1vjes1y163xfj1rh1tkfb65",
            "name": "Voice rooms addon",
            "description": "Create voice rooms in your chats to work in real time alongside your colleagues. Includes unlimited voice rooms and recording backup for compliance.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/GcZzBjXRfiraensppgtQ_icon2.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          }
        }
      ]
    },
    "payments": [],
    "checkout": {
      "url": null
    }
  },
  "meta": {
    "request_id": "c9e31d4b-e776-4495-8535-3be1a836e6fe"
  }
}
```

{% /api-example %}

{% /accordion-item %}
{% accordion-item title="Update items on an invoice" %}

{% api-example method="PATCH" path="/transactions/{transaction_id}" href="/api-reference/transactions/update-transaction" %}

```json
{
  "items": [
    {
      "price_id": "pri_01gsz91wy9k1yn7kx82aafwvea",
      "quantity": 50
    },
    {
      "price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
      "quantity": 1
    },
    {
      "price_id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
      "quantity": 1
    },
    {
      "price_id": "pri_01gsz96z29d88jrmsf2ztbfgjg",
      "quantity": 1
    }
  ]
}
```

```json
{
  "data": {
    "id": "txn_01hgjw25swyhhdfr29aj43rx1w",
    "status": "ready",
    "customer_id": "ctm_01h3h38xn5c2701bb5eecy9m6a",
    "address_id": "add_01h3h38xqmv1xy0tjsnj0g1ke5",
    "business_id": null,
    "custom_data": null,
    "origin": "api",
    "collection_mode": "manual",
    "subscription_id": null,
    "invoice_id": "inv_01hgjw26sp5exv8233w3stc3a1",
    "invoice_number": null,
    "billing_details": {
      "enable_checkout": false,
      "payment_terms": {
        "interval": "day",
        "frequency": 14
      },
      "purchase_order_number": null,
      "additional_information": null
    },
    "billing_period": {
      "starts_at": "2023-12-01T00:00:00Z",
      "ends_at": "2024-11-30T23:59:00Z"
    },
    "currency_code": "USD",
    "discount_id": null,
    "created_at": "2023-12-01T14:21:01.127846Z",
    "updated_at": "2023-12-01T14:48:50.514249112Z",
    "billed_at": null,
    "items": [
      {
        "price": {
          "id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "description": "Annual (per seat)",
          "name": null,
          "product_id": "pro_01gsz4vmqbjk3x4vvtafffd540",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "50000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 100
          },
          "status": "active"
        },
        "quantity": 50
      },
      {
        "price": {
          "id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "description": "One-time charge",
          "name": "One-time charge",
          "product_id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
          "billing_cycle": null,
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "19900",
            "currency_code": "USD"
          },
          "unit_price_overrides": [
            {
              "country_codes": ["AU"],
              "unit_price": {
                "amount": "40000",
                "currency_code": "AUD"
              }
            }
          ],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      },
      {
        "price": {
          "id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "description": "Annual (recurring addon)",
          "name": "Annual (recurring addon)",
          "product_id": "pro_01h1vjes1y163xfj1rh1tkfb65",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "100000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      },
      {
        "price": {
          "id": "pri_01gsz96z29d88jrmsf2ztbfgjg",
          "description": "Annual (recurring addon)",
          "name": null,
          "product_id": "pro_01gsz92krfzy3hcx5h5rtgnfwz",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "300000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      }
    ],
    "details": {
      "tax_rates_used": [
        {
          "tax_rate": "0.08875",
          "totals": {
            "subtotal": "2919900",
            "discount": "0",
            "tax": "259141",
            "total": "3179041"
          }
        }
      ],
      "totals": {
        "subtotal": "2919900",
        "tax": "259141",
        "discount": "0",
        "total": "3179041",
        "grand_total": "3179041",
        "fee": null,
        "credit": "0",
        "balance": "3179041",
        "earnings": null,
        "currency_code": "USD"
      },
      "adjusted_totals": {
        "subtotal": "2919900",
        "tax": "259141",
        "total": "3179041",
        "grand_total": "3179041",
        "fee": "0",
        "earnings": "0",
        "currency_code": "USD"
      },
      "payout_totals": null,
      "adjusted_payout_totals": null,
      "line_items": [
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k16r67pc60",
          "price_id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "quantity": 50,
          "totals": {
            "subtotal": "2500000",
            "tax": "221875",
            "discount": "0",
            "total": "2721875"
          },
          "product": {
            "id": "pro_01gsz4vmqbjk3x4vvtafffd540",
            "name": "ChatApp Enterprise",
            "description": "The ultimate solution for businesses that require top-of-the-line features and customizations. Includes all the features of the Pro plan, plus personalized onboarding, dedicated account management, and the ability to pay via invoice.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/2nmP8MQSret0aWeDemRw_icon1.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "50000",
            "tax": "4437",
            "discount": "0",
            "total": "54437"
          }
        },
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k16thb9ahg",
          "price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "quantity": 1,
          "totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          },
          "product": {
            "id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
            "name": "Custom domains",
            "description": "Make ChatApp truly your own with custom domains! Custom domains reinforce your brand identity and make it easy for your team to access ChatApp.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/SW3OevDQ92dUHSkN5a2x_icon3.png",
            "custom_data": {
              "crm_id": "ABC"
            },
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          }
        },
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k16ty9m70d",
          "price_id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "quantity": 1,
          "totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          },
          "product": {
            "id": "pro_01h1vjes1y163xfj1rh1tkfb65",
            "name": "Voice rooms addon",
            "description": "Create voice rooms in your chats to work in real time alongside your colleagues. Includes unlimited voice rooms and recording backup for compliance.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/GcZzBjXRfiraensppgtQ_icon2.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          }
        },
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k170m19nnv",
          "price_id": "pri_01gsz96z29d88jrmsf2ztbfgjg",
          "quantity": 1,
          "totals": {
            "subtotal": "300000",
            "tax": "26625",
            "discount": "0",
            "total": "326625"
          },
          "product": {
            "id": "pro_01gsz92krfzy3hcx5h5rtgnfwz",
            "name": "Reporting module",
            "description": "Get access to comprehensive reports and customizable analytics dashboards.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/SW3OevDQ92dUHSkN5a2x_icon3.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "300000",
            "tax": "26625",
            "discount": "0",
            "total": "326625"
          }
        }
      ]
    },
    "payments": [],
    "checkout": {
      "url": null
    }
  },
  "meta": {
    "request_id": "6f0a5cd0-3b3f-4ca7-aaa2-d9cfc5f9ef2b"
  }
}
```

{% /api-example %}

{% /accordion-item %}
{% /accordion %}

{% /tab-item %}

{% /tabs %}

## Issue an invoice

When you're happy with an invoice, issue it to mark it as finalized. At this point, it becomes a financial record so you can't make changes to it. It gets an invoice number and is sent to the customer.

{% callout type="note" %}
You can create a transaction and mark it as `billed` by including `"status": "billed"` in your request to create or update, along with the other required fields — no need to make a separate request.
{% /callout %}

{% tabs sync="interaction-preference" %}
{% tab-item title="Dashboard" %}

1. Go to **Paddle > Invoices**.
2. Search for the invoice that you want to issue.
3. Click the  next to an invoice in the list, then choose Edit invoice from the menu.
4. Click Continue
5. Review the summary of your invoice.
6. Click Send invoice to issue and send.

{% /tab-item %}
{% tab-item title="API" %}

Send a `PATCH` request to the `/transactions/{transaction_id}` endpoint to update a manually-collected transaction, setting `status` to `billed` in your request.

The transaction must be `ready`. If successful,Paddle automatically assigns an invoice number and creates a related subscription.

{% api-example method="PATCH" path="/transactions/{transaction_id}" href="/api-reference/transactions/update-transaction" %}

```json
{
  "status": "billed"
}
```

```json
{
  "data": {
    "id": "txn_01hgjw25swyhhdfr29aj43rx1w",
    "status": "billed",
    "customer_id": "ctm_01h3h38xn5c2701bb5eecy9m6a",
    "address_id": "add_01h3h38xqmv1xy0tjsnj0g1ke5",
    "business_id": null,
    "custom_data": null,
    "origin": "api",
    "collection_mode": "manual",
    "subscription_id": "sub_01hgjybs66bxwbzz6g1akb9b4n",
    "invoice_id": "inv_01hgjw26sp5exv8233w3stc3a1",
    "invoice_number": "325-10301",
    "billing_details": {
      "enable_checkout": false,
      "payment_terms": {
        "interval": "day",
        "frequency": 14
      },
      "purchase_order_number": null,
      "additional_information": null
    },
    "billing_period": {
      "starts_at": "2023-12-01T00:00:00Z",
      "ends_at": "2024-11-30T23:59:00Z"
    },
    "currency_code": "USD",
    "discount_id": null,
    "created_at": "2023-12-01T14:21:01.127846Z",
    "updated_at": "2023-12-01T15:01:16.161268Z",
    "billed_at": "2023-12-01T15:01:11.658471Z",
    "items": [
      {
        "price": {
          "id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "description": "Annual (per seat)",
          "name": null,
          "product_id": "pro_01gsz4vmqbjk3x4vvtafffd540",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "50000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 100
          },
          "status": "active"
        },
        "quantity": 50
      },
      {
        "price": {
          "id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "description": "One-time charge",
          "name": "One-time charge",
          "product_id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
          "billing_cycle": null,
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "19900",
            "currency_code": "USD"
          },
          "unit_price_overrides": [
            {
              "country_codes": ["AU"],
              "unit_price": {
                "amount": "40000",
                "currency_code": "AUD"
              }
            }
          ],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      },
      {
        "price": {
          "id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "description": "Annual (recurring addon)",
          "name": "Annual (recurring addon)",
          "product_id": "pro_01h1vjes1y163xfj1rh1tkfb65",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "100000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      },
      {
        "price": {
          "id": "pri_01gsz96z29d88jrmsf2ztbfgjg",
          "description": "Annual (recurring addon)",
          "name": null,
          "product_id": "pro_01gsz92krfzy3hcx5h5rtgnfwz",
          "billing_cycle": {
            "interval": "year",
            "frequency": 1
          },
          "trial_period": null,
          "tax_mode": "account_setting",
          "unit_price": {
            "amount": "300000",
            "currency_code": "USD"
          },
          "unit_price_overrides": [],
          "custom_data": null,
          "quantity": {
            "minimum": 1,
            "maximum": 1
          },
          "status": "active"
        },
        "quantity": 1
      }
    ],
    "details": {
      "tax_rates_used": [
        {
          "tax_rate": "0.08875",
          "totals": {
            "subtotal": "2919900",
            "discount": "0",
            "tax": "259141",
            "total": "3179041"
          }
        }
      ],
      "totals": {
        "subtotal": "2919900",
        "tax": "259141",
        "discount": "0",
        "total": "3179041",
        "grand_total": "3179041",
        "fee": null,
        "credit": "0",
        "balance": "3179041",
        "earnings": null,
        "currency_code": "USD"
      },
      "adjusted_totals": {
        "subtotal": "2919900",
        "tax": "259141",
        "total": "3179041",
        "grand_total": "3179041",
        "fee": "0",
        "earnings": "0",
        "currency_code": "USD"
      },
      "payout_totals": null,
      "adjusted_payout_totals": null,
      "line_items": [
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k16r67pc60",
          "price_id": "pri_01gsz91wy9k1yn7kx82aafwvea",
          "quantity": 50,
          "totals": {
            "subtotal": "2500000",
            "tax": "221875",
            "discount": "0",
            "total": "2721875"
          },
          "product": {
            "id": "pro_01gsz4vmqbjk3x4vvtafffd540",
            "name": "ChatApp Enterprise",
            "description": "The ultimate solution for businesses that require top-of-the-line features and customizations. Includes all the features of the Pro plan, plus personalized onboarding, dedicated account management, and the ability to pay via invoice.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/2nmP8MQSret0aWeDemRw_icon1.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "50000",
            "tax": "4437",
            "discount": "0",
            "total": "54437"
          }
        },
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k16thb9ahg",
          "price_id": "pri_01gsz98e27ak2tyhexptwc58yk",
          "quantity": 1,
          "totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          },
          "product": {
            "id": "pro_01gsz97mq9pa4fkyy0wqenepkz",
            "name": "Custom domains",
            "description": "Make ChatApp truly your own with custom domains! Custom domains reinforce your brand identity and make it easy for your team to access ChatApp.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/SW3OevDQ92dUHSkN5a2x_icon3.png",
            "custom_data": {
              "crm_id": "ABC"
            },
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "19900",
            "tax": "1766",
            "discount": "0",
            "total": "21666"
          }
        },
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k16ty9m70d",
          "price_id": "pri_01h1vjg3sqjj1y9tvazkdqe5vt",
          "quantity": 1,
          "totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          },
          "product": {
            "id": "pro_01h1vjes1y163xfj1rh1tkfb65",
            "name": "Voice rooms addon",
            "description": "Create voice rooms in your chats to work in real time alongside your colleagues. Includes unlimited voice rooms and recording backup for compliance.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/GcZzBjXRfiraensppgtQ_icon2.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "100000",
            "tax": "8875",
            "discount": "0",
            "total": "108875"
          }
        },
        {
          "id": "txnitm_01hgjxn4j5mkbmn8k170m19nnv",
          "price_id": "pri_01gsz96z29d88jrmsf2ztbfgjg",
          "quantity": 1,
          "totals": {
            "subtotal": "300000",
            "tax": "26625",
            "discount": "0",
            "total": "326625"
          },
          "product": {
            "id": "pro_01gsz92krfzy3hcx5h5rtgnfwz",
            "name": "Reporting module",
            "description": "Get access to comprehensive reports and customizable analytics dashboards.",
            "tax_category": "standard",
            "image_url": "https://paddle-sandbox.s3.amazonaws.com/user/10889/SW3OevDQ92dUHSkN5a2x_icon3.png",
            "custom_data": null,
            "status": "active"
          },
          "tax_rate": "0.08875",
          "unit_totals": {
            "subtotal": "300000",
            "tax": "26625",
            "discount": "0",
            "total": "326625"
          }
        }
      ]
    },
    "payments": [],
    "checkout": {
      "url": null
    }
  },
  "meta": {
    "request_id": "40beae18-b4ef-488c-8332-16bf3d5d5a9c"
  }
}
```

{% /api-example %}

{% callout type="info" %}
`invoice_number` and `subscription_id` are added asynchronously and may not appear in the initial response. Send a follow-up request to [get the transaction](https://developer.paddle.com/api-reference/transactions/get-transaction.md), or listen for [the `transaction.completed` webhook](https://developer.paddle.com/webhooks/transactions/transaction-completed.md).
{% /callout %}

{% /tab-item %}
{% /tabs %}

## Get created subscription

Paddle automatically creates a subscription when you issue an invoice for recurring items. This lets you [provision your app](https://developer.paddle.com/build/subscriptions/provision-access-webhooks.md) for the customer right away, rather than waiting for payment to complete. This is especially important when working with high-value invoices where payment is by bank transfer.

### Using webhooks

- `subscription.created`  
   If you've subscribed to a webhook for [`subscription.created`](https://developer.paddle.com/webhooks/subscriptions/subscription-created.md), you'll get a notification that includes the `id` of the new subscription. Use the `transaction_id` against the `subscription.created` notification to match to the correct transaction.
- `transaction.updated`  
   After `subscription.created` occurs, Paddle updates the transaction with the created `subscription_id` and [`transaction.updated`](https://developer.paddle.com/webhooks/transactions/transaction-updated.md) occurs. Use `subscription_id` against the `transaction.updated` notification to get the related subscription.

### Using the API

Use the `subscription_id` against the transaction you just marked as billed to find the new subscription. Subscriptions are created asynchronously after a transaction is billed, so this may not be present in the initial response.

1. Send a `GET` request to [the `/transactions/{transaction_id}` endpoint](https://developer.paddle.com/api-reference/transactions/get-transaction.md), using the `transaction_id` of the manually-collected transaction you marked as `billed`.
2. Extract the `subscription_id` from the response.
3. Send a `GET` request to [the `/subscriptions/{subscription_id}` endpoint](https://developer.paddle.com/api-reference/subscriptions/get-subscription.md), using the `subscription_id` you just extracted.