> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.fluveo.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.fluveo.com/_mcp/server.

# Invoice items

> **Status: `contracted_test`.** In the machine-checked test-mode contract
> (`openapi.subset.json`) and the [API Reference](/api-reference): create only.
> Served by the `fluveo-billing` sidecar (ADR 0019); promoted 2026-07-13.
> Retrieve/update/list are not in the contract yet. The `Stripe-Version` header
> is optional. See [API coverage](/api-coverage).

An Invoice Item is a single charge you add to a [customer](/resources/customers)'s
next [invoice](/billing/invoices) — a one-off fee or an amount-based line. It sits
pending until an invoice create with `pending_invoice_items_behavior=include` sweeps it
in (omitted or `exclude` leaves it pending, as in Stripe); the invoice's `lines` echo
each item's description and amount.

Served operations: **create** (in the contract), the pending-item **list**, and
**delete** of a pending item (`DELETE /v1/invoiceitems/{id}`, served but not in the
contract yet); retrieve and update are not served. Delete answers `{id, object: "invoiceitem", deleted: true}`.
An unknown id, another account's or mode's item, or an already deleted one answers the
same `resource_missing` error. An item on an open, paid or void invoice answers Stripe's 400.
An item on a draft invoice answers a 400 and is not deleted (Stripe deletes it and
re-totals the draft). The create response is the minimal confirmation
(`{id, object: "invoiceitem", customer}`); the full line shape appears on the
invoice's `lines` after the invoice is created.

## Hidden from the public API

Each item below is hidden because it does not follow the Stripe parity ADR (ADR 0004 as amended). The [hidden public `/v1` registry](https://github.com/fluveohq/fluveo/blob/main/tests/api-contract/stripe/hidden-public-v1.json) lists every
hidden item. Public `/v1` answers a hidden operation as an unknown URL, refuses a hidden request
parameter or value with Stripe's `invalid_request_error`, and omits a hidden response key.

* the request parameter `price` of `POST /v1/invoiceitems` (HIDE0-018)