---
title: "Send Invoice"
method: POST
path: "/invoices/{id}/send"
tags: ["Invoices"]
---

# Send Invoice

`POST /invoices/{id}/send`

## Request

- Base URL: `https://api.whop.com/api/v1`
- URL: `https://api.whop.com/api/v1/invoices/{id}/send`
- Auth: one of:
  - HTTP bearer
  - HTTP bearer
  - HTTP bearer

Issues a draft and emails it to its recipients, with reminders after the due date. A draft with no `payment_method_id` needs `invoice:update`, `invoice:create`, or `payment:charge`, and is never charged. A draft with a `payment_method_id` needs `payment:charge`: with a `charge_at`, or when its `due_at` is still ahead, it is emailed now and charged to that method at that time (see `scheduled_charge_at`); otherwise it is charged right away instead of emailed. Voiding the invoice, marking it uncollectible, or paying it first cancels the scheduled charge, and its recipients get the payment link if a charge fails. Sending an open invoice needs `payment:charge` and emails it again, up to three emails a day including the first send. With `send_at`, the draft is sent at that time instead, and cannot be edited, except its recipients, until it is sent or unscheduled. Each email, reminders included, is sent separately to the customer email shown on the invoice and to each address in `recipient_emails`, so recipients never see each other's addresses.

## Headers

- `Idempotency-Key` string

## Request body

- object
  - `charge_at` string, date-time, nullable: When to charge the draft's `payment_method_id`, as an ISO 8601 timestamp in the future and no earlier than `send_at`. Only for a draft with a `payment_method_id` and a total above zero. Omit to charge on `due_at` if it is still ahead when the draft is sent, or right away otherwise. A scheduled send that runs after `charge_at` charges right away.
  - `send_at` string, date-time, nullable: When to send the draft, as an ISO 8601 timestamp in the future. Omit to send now.

## Response `200`

invoice sent

- Invoice
  - `account_id` string, required
  - `amount_due` Money, required
    - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
    - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
    - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
    - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
  - `billing_address` PaymentAddress, required
    - `city` string, nullable, required: The city.
    - `country` string, nullable, required: The ISO 3166-1 alpha-2 country code.
    - `line1` string, nullable, required: The first street address line.
    - `line2` string, nullable, required: The second street address line.
    - `name` string, nullable, required: The name on the address.
    - `postal_code` string, nullable, required: The postal or ZIP code.
    - `state` string, nullable, required: The state, province or region.
  - `buyer_fee_amount` Money, required
    - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
    - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
    - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
    - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
  - `buyer_fee_percentage` number, required
  - `checkout_link` string, nullable, required: A signed link that opens this invoice in a checkout session so the buyer can pay it: pass it as `link` to `POST /checkout_sessions`. Present while the invoice is open; null in any other status, for an invoice billed to a business buyer or whose membership was canceled, and unless you have `payment:charge`, or `invoice:create` or `invoice:update` on an invoice with no `payment_method_id`.
  - `created_at` string, required
  - `customer_name` string, nullable, required
  - `due_at` string, nullable, required
  - `email_address` string, nullable, required
  - `id` string, required
  - `invoice_prefix` string, nullable, required
  - `line_items` InvoiceLineItem[], required
    - `discount_amount` Money, required
      - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
      - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
      - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
      - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
    - `id` string, nullable, required: Line item ID, prefixed `li_`. Null when the payment predates item snapshots and the item is read from the payment's variant.
    - `label` string, nullable, required: The item's name as shown at checkout — the product title, else the variant title.
    - `product_id` string, nullable, required: The product the variant belongs to, prefixed `prod_`. Null for a variant with no product.
    - `quantity` number, required: How many units were bought.
    - `subtotal` Money, required
      - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
      - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
      - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
      - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
    - `tax_amount` Money, required
      - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
      - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
      - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
      - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
    - `unit_amount` Money, required
      - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
      - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
      - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
      - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
    - `variant_id` string, nullable, required: The variant bought, prefixed `plan_`. Null when the variant has since been deleted.
  - `mailing_address_id` string, nullable, required
  - `member_id` string, nullable, required
  - `metadata` object, required
  - `number` string, required
  - `object` 'invoice', required
  - `overdue` boolean, required
  - `paid_at` string, nullable, required
  - `payment_method_id` string, nullable, required
  - `recipient_emails` string[], required
  - `scheduled_charge_at` string, nullable, required: When the invoice's saved payment method will be charged, as an ISO 8601 timestamp: the `charge_at` it was sent or issued with, or `due_at` when an invoice with a `payment_method_id` is sent or issued before it is due without one. On a draft, the `charge_at` of its scheduled send. `null` otherwise, once the charge starts, and once the invoice is paid, void, or uncollectible.
  - `scheduled_send_at` string, nullable, required
  - `status` 'draft' | 'open' | 'authorized' | 'paid' | 'pending' | 'uncollectible' | 'unresolved' | 'void', required
  - `subtotal` Money, required
    - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
    - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
    - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
    - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
  - `tax_amount` Money, required
    - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
    - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
    - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
    - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
  - `total` Money, required
    - `amount` string, required: The amount in major units, as an exact decimal string — `"10.00"` is ten dollars. A string so no float rounds it in transit.
    - `currency` string, required: Three-letter ISO 4217 currency code, lowercase.
    - `decimals` integer, required: How many decimal places the amount CARRIES — the precision the charge itself runs at.
    - `display_decimals` integer, required: How many decimal places to SHOW. Usually equal to `decimals`, and deliberately not always: COP is charged in centavos but written in whole pesos, so it is `2` and `0`. Format the number in your own locale using this.
  - `totals_status` 'estimated' | 'final', required
  - `updated_at` string, required

## Other responses

- `400`: Invalid Parameters
- `403`: Forbidden
- `409`: Conflict

## Changes

> 203 revisions in range; 1 not diffed.

- **2026-10-31** `9993d9eaebc8`: 2 info
  - the security scope `invoice:update` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `payment:charge` was removed from the endpoint's security scheme `bearerAuth`
- **2026-10-30** `dd8b68e5d7c8`: 2 info
  - the security scope `invoice:update` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `payment:charge` was removed from the endpoint's security scheme `bearerAuth`
- **2026-10-30** `2af1a3aa41c9`: 2 info
  - the security scope `invoice:update` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `payment:charge` was removed from the endpoint's security scheme `bearerAuth`
- **2026-10-30** `7777af2c99e5`: 2 info
  - the security scope `invoice:update` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `payment:charge` was removed from the endpoint's security scheme `bearerAuth`
- **2026-10-30** `dfe1a28eca1d`: 2 info
  - the security scope `invoice:update` was added to the endpoint's security scheme `bearerAuth`
  - the security scope `payment:charge` was removed from the endpoint's security scheme `bearerAuth`

[Operation history](https://skmtc.dev/whop/apis/whop-api/changes/invoices/:id/send/post.md)

---

[API](https://skmtc.dev/whop/apis/whop-api.md) - [All operations](https://skmtc.dev/whop/apis/whop-api/llms.txt) - [OpenAPI document](https://skmtc.dev/whop/apis/whop-api/revisions/9993d9eaebc8?raw)
