---
title: "Create Invoice"
method: POST
path: "/billing/invoices"
tags: ["Invoices"]
---

# Create Invoice

`POST /billing/invoices`

## Request

- Base URL: `https://api.meow.com/v1`
- URL: `https://api.meow.com/v1/billing/invoices`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/meow/apis/meow-api/docs/billing/invoices/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a new invoice. Set `save_as_draft` to save it as a draft for review in the Meow dashboard instead of sending it.

## Headers

- `x-entity-id` string, uuid

## Request body

- CreateInvoiceRequest
  - `customer_id` string, uuid, required: Invoicing customer to bill. Use list_invoicing_customers to find one.
  - `line_items` InvoiceLineRequest[], required: Line items to bill, as a list. At least one is required.
    - `product_id` string, uuid, required: Product this line bills for. Use List Products to find one.
    - `quantity` union, required: Quantity of the product.
      - number
      - string
    - `price` union
      - number
      - string
    - `description` string, nullable: Description of the product. Defaults to the product's description if not provided.
    - `discount_percentage` union
      - number
      - string
    - `discount_description` string, nullable: Description of the discount applied to the product.
  - `invoice_date` string, date, required: ISO 8601 full-date in the format `YYYY-MM-DD` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `due_date` string, date, required: ISO 8601 full-date in the format `YYYY-MM-DD` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `payment_method_types` PaymentMethodType[], required: Payment method types to enable on the invoice. `BANK_TRANSFER` is always enabled.
  - `recurring_schedule` string, nullable: RFC 5545 RRULE string. Required: DTSTART, RRULE. Allowed frequencies: WEEKLY, MONTHLY.
  - `send_email_on_creation` boolean, required: If true, sends an email to the customer (and any additional recipients) on the `invoice_date`. For a draft (`save_as_draft`), nothing is sent until a Meow user publishes it.
  - `additional_recipient_emails` string[], nullable: Additional recipient emails to send the invoice and any reminders to.
  - `note` string, nullable: Note to include on the invoice.
  - `name` string, nullable: Name of the invoice.
  - `collection_account_id` string, uuid, required: The collection account ID where payments on this invoice will be deposited.
  - `show_contact_address` boolean: Whether to show the customer's address on the invoice, if it exists.
  - `save_as_draft` boolean: If true, saves the invoice as a draft. A draft has no invoice number, is not sent, and sends no email, even when `send_email_on_creation` is true. A Meow user reviews and publishes it in the Meow dashboard. Not supported with `recurring_schedule`. If false, the invoice is published, and an `invoice_date` of today or earlier sends it immediately.

## Response `200`

Successful Response

- Invoice
  - `id` string, uuid, required: The unique identifier for the invoice.
  - `name` string, nullable: The name of the invoice.
  - `customer_id` string, uuid, required: The unique identifier for the customer.
  - `status` 'Draft' | 'Open' | 'Pending' | 'Scheduled' | 'Partially Paid' | 'Paid' | 'Canceled' | 'Expired' | 'Overdue', required
  - `amount` string, required: The total amount of the invoice.
  - `amount_paid` string, required: The amount that has been paid on the invoice.
  - `amount_due` string, required: The remaining amount due on the invoice.
  - `invoice_number` string, nullable: The public-facing invoice number.
  - `line_item_ids` string[], required: List of line item IDs associated with the invoice.
  - `invoice_date` string, date: ISO 8601 full-date in the format `YYYY-MM-DD` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `due_date` string, date: ISO 8601 full-date in the format `YYYY-MM-DD` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `payment_method_types` PaymentMethodType[], required: List of allowed payment method types for the invoice.
  - `send_email_on_creation` boolean, required: Whether to send an email upon invoice creation.
  - `additional_recipient_emails` string[], required: List of additional email addresses to receive the invoice.
  - `note` string, nullable: A note associated with the invoice.
  - `collection_account_id` string, uuid, required: The collection account ID where funds will be collected.
  - `created_at` string, date-time, required: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `updated_at` string, date-time: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `paid_at` string, date-time: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `canceled_at` string, date-time: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `sent_at` string, date-time: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `expired_at` string, date-time: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).

## Other responses

- `400`: The request could not be processed.
- `401`: Authentication failed.
- `403`: The API key is not authorized for this operation, or the user of a global API key is an admin or controller without approved KYC. The KYC case returns the message `KYC is required for controllers and admins.` until that user completes KYC in the Meow dashboard.
- `429`: Too many requests.

---

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