---
title: "Upsert invoice"
method: POST
path: "/billing/invoices"
tags: ["billing"]
---

# Upsert invoice

`POST /billing/invoices`

## Request body

- CreateInvoiceRequestBody
  - `amount_due` integer, required
  - `amount_paid` integer, required
  - `amount_remaining` integer, required
  - `collection_method` string, required
  - `currency` string, required
  - `customer_external_id` string, required
  - `due_date` string, date-time, nullable
  - `ending_balance` integer, nullable
  - `external_id` string, nullable
  - `payment_method_external_id` string, nullable
  - `starting_balance` integer, nullable
  - `status` 'draft' | 'open' | 'paid' | 'uncollectible' | 'void'
  - `subscription_external_id` string, nullable
  - `subtotal` integer, required
  - `url` string, nullable

## Response `201`

Created

- object
  - `data` InvoiceResponseData, required
    - `amount_due` integer, required
    - `amount_paid` integer, required
    - `amount_remaining` integer, required
    - `collection_method` string, required
    - `company_id` string, nullable
    - `created_at` string, date-time, required
    - `currency` string, required
    - `customer_external_id` string, required
    - `due_date` string, date-time, nullable
    - `ending_balance` integer, required
    - `environment_id` string, required
    - `external_id` string, nullable
    - `id` string, required
    - `payment_method_external_id` string, nullable
    - `provider_type` 'metronome' | 'orb' | 'schematic' | 'stripe', required
    - `starting_balance` integer, required
    - `status` 'draft' | 'open' | 'paid' | 'uncollectible' | 'void'
    - `subscription_external_id` string, nullable
    - `subtotal` integer, required
    - `updated_at` string, date-time, required
    - `url` string, nullable
  - `params` object, required — Input parameters

## Other responses

- `400` — Bad request
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not found
- `500` — Server error

## Changes

> 125 revisions in range; 61 could not be searched.

- **2026-07-13** `8dc48f048ad5` — 4 info
  - added the new optional request property `ending_balance`
  - added the new optional request property `starting_balance`
  - added the required property `data/ending_balance` to the response with the `201` status
  - added the required property `data/starting_balance` to the response with the `201` status
- **2026-06-05** `c0d7b479cd11` — 1 warning
  - added the new `metronome` enum value to the `data/provider_type` response property for the response status `201`

[Change history](https://skmtc.dev/schematichq/apis/schematic-api/changes/billing/invoices/post.md)

---

[API](https://skmtc.dev/schematichq/apis/schematic-api.md) · [All operations](https://skmtc.dev/schematichq/apis/schematic-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/schematichq/schematic-api/revisions/0b238e148fa1/schema)
