---
title: "Create a new invoice"
method: POST
path: "/api/invoices"
tags: ["Invoices"]
---

# Create a new invoice

`POST /api/invoices`

Create a draft invoice with line items. The total amount is automatically calculated from the items.

## Request body

- CreateInvoiceDto
  - `customerId` string, required — Customer ID
  - `subscriptionId` string — Subscription ID (optional)
  - `items` InvoiceItemDto[], required
    - `description` string, required
    - `quantity` number, required
    - `unitAmount` number, required
  - `dueDate` string, required — Due date
  - `status` 'DRAFT' | 'PENDING' | 'PAID' | 'FAILED' | 'CANCELED' — Override invoice status for imports
  - `invoiceNumber` string — Override invoice number (e.g. INV-00042). Auto-generated if omitted.
  - `currency` string — Currency override (defaults to customer currency)
  - `paidAt` string — Paid at date (ISO 8601). For importing paid invoices.
  - `createdAt` string — Backdate createdAt (ISO 8601). For data imports.

## Response `201`

Invoice created in draft status

- InvoiceResponse
  - `id` string, required
  - `invoiceNumber` string, required
  - `subscriptionId` string
  - `customerId` string, required
  - `amount` string, required — Decimal amount as string
  - `currency` string, required
  - `status` 'DRAFT' | 'PENDING' | 'PAID' | 'FAILED' | 'CANCELED', required
  - `dueDate` string, required
  - `paidAt` string
  - `pdfUrl` string
  - `metadata` object — Line items, plan info, discounts
  - `customer` InvoiceCustomerResponse
    - `id` string, required
    - `name` string, required
    - `email` string, required
  - `createdAt` string, required
  - `updatedAt` string, required

## Other responses

- `404` — Customer not found

---

[API](https://skmtc.net/novabilling/apis/novabilling-api.md) · [All operations](https://skmtc.net/novabilling/apis/novabilling-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/novabilling/novabilling-api/versions/0e449a4e0dc8/schema)
