The catalog model
The catalog uses a two-level hierarchy:- Product — What you are selling. A name, description, and optional images. Think of it as the item in your shop window.
- Price — How you charge for it. An amount in a specific currency, a tax rate, and either a one-time charge or a recurring billing interval. One product can have multiple prices (for example, a monthly plan and an annual plan, or USD and EUR variants).
Products
Product fields
Deactivating a product
Settingactive: false on a product removes it from catalog searches. Existing invoice lines that already reference the product are not affected — the line’s recorded values remain intact. Re-activate the product at any time by setting active: true.
Prices
A price belongs to exactly one product. It specifies the amount to charge, the currency, how tax is applied, and whether this is a one-time or recurring charge.Price fields
The recurring object
When type is recurring, the price includes a recurring object:
For
one_time prices, recurring is null.
One-time vs. recurring prices
One-time (type: "one_time")
A one-time price represents a single charge with no repeat. Use this for:
- Fixed-scope project fees
- Product sales
- One-off consulting engagements
- Setup fees
Recurring (type: "recurring")
A recurring price carries billing interval information — how often the charge repeats and how many intervals between each charge.
Recurring is a data model that lets you describe subscription-style pricing in your catalog. Invoice AI does not automatically generate invoices on a schedule — you create each invoice yourself (or via the API). The recurring data is informational and useful for integrations that manage their own billing logic.
Creating a product and price
Here is how to create a product and then attach a price to it using the API.Step 1: Create a product
Step 2: Create a one-time price
unit_amount is in minor units. 250000 represents $2,500.00.Step 3: Create a recurring price for the same product
Using catalog prices on invoice lines
When you create or update an invoice draft, each line item can reference a catalog price by itsprice_… ID. Invoice AI then borrows the description (from the product name), the rate, and the tax rate from the price — you only need to specify the quantity.
description or discount_percent even when a price ID is provided.
Ad-hoc lines
If you don’t reference aprice_… ID, the line is ad-hoc and must include all values directly:
The price’s currency must match the invoice’s currency. If you create an invoice in
USD, only prices denominated in USD can be attached to its lines.Price and product IDs
Product and price IDs use a fixed prefix format:
The different prefixes mean that pasting a product ID into a field that expects a price ID will fail with a clear error, rather than silently succeeding.
Deactivating prices
Settingactive: false on a price removes it from catalog searches but does not affect invoices already using it. You cannot modify the type, unit_amount, or currency of a price after creation — if you need to change these, create a new price and deactivate the old one.