Create an invoice
Issues an open invoice and returns it, including the hosted payment url. Requires the invoices:write scope.
Supply items directly, or a templateId to take the items, memo and expiry from a saved template — anything sent explicitly replaces the template default wholesale. Creating an invoice never emails anyone; use the send endpoint for that.
Authorizations
A store API key, sent as Authorization: Bearer <key>.
A key looks like tbrn_live_ followed by 48 hex characters, e.g. tbrn_live_4f2a...c91b. Mint one in the Taberna dashboard under Developers → API Keys, tick the scopes the integration needs, and copy it there and then — the full value is shown once and only its hash is stored, so a lost key is replaced rather than recovered.
One key belongs to one store and carries a fixed scope set. Send it from a server, never from a browser: it can create orders and invoices and read every order the store has.
Headers
Optional replay guard, 1–255 characters. Retrying a create with a key already used by this store returns the original resource instead of making a second one.
1 - 255Body
The billed lines, 1–100 of them. Required unless templateId is given; sending both replaces the template's lines wholesale rather than merging.
1 - 100 elementsA saved invoice template to build from — its items, memo and expiry are copied unless this request sets its own. Formatted as a UUID, e.g. 3f1a9c2e-7b04-4d8e-9a6f-2c5b1e0d7a83.
"3f1a9c2e-7b04-4d8e-9a6f-2c5b1e0d7a83"
The fiat currency every amount on this resource is priced in. Crypto is quoted against it at payment time. Defaults to usd when omitted.
usd, eur "usd"
Who the invoice is addressed to. Shown on the payment page.
255"Acme GmbH"
The address the send endpoint will email. Creating an invoice never sends anything; without this, the invoice can never be emailed at all.
"billing@acme.example"
Free-text note shown to the customer on the payment page.
5000"Net 14. Thanks!"
Arbitrary JSON to carry your own reference. Stored verbatim, returned on reads and on webhooks, and never shown to the customer.
Where the payment page sends the customer once the invoice is paid. http/https only, up to 2048 characters.
2048"https://example.com/thanks"
Where the payment page sends the customer if they back out. http/https only, up to 2048 characters.
2048"https://example.com/billing"
How long the invoice stays payable, in minutes (10–129600). Falls back to the templateId template's own expiry, and to 1440 when there is none.
10 <= x <= 1296001440
Response
The invoice. A replayed Idempotency-Key returns the original invoice with this same status.
An invoice as the merchant API reports it.
The invoice's id. Base58 short id, 21–22 characters (never 0, O, I or l), e.g. 7Kq2mVn8pRt3XwYz5Bd4L — the value that appears in checkout and invoice links, and the one this API takes as a path id.
"7Kq2mVn8pRt3XwYz5Bd4L"
Human-facing invoice number, counting up per store from 1. Distinct from id, which is what the API and the payment link use.
-9007199254740991 <= x <= 90071992547409911042
Where the invoice is in its lifecycle. open — issued and payable. paid — settled in full. partial — funds arrived but fell short. expired — the payment window closed unpaid. voided — cancelled by the merchant, no longer payable.
open, paid, partial, expired, voided "open"
The hosted payment page for this invoice — what a customer opens to pay it.
"https://taberna.io/invoice/7Kq2mVn8pRt3XwYz5Bd4L"
The billed lines, in the order they were entered.
Sum of every line. Decimal string in the resource's fiat currency, e.g. "49.99" — a string, never a JSON number, so no precision is lost in transit.
"49.99"
The fiat currency every amount on this resource is priced in. Crypto is quoted against it at payment time.
usd, eur "usd"
Who the invoice is addressed to, shown on the payment page. Null when unset.
"Acme GmbH"
The only address the send endpoint will email; it cannot be overridden per send. Null when unset, which also makes the invoice unsendable.
"billing@acme.example"
Free-text note shown to the customer on the payment page. Null when unset.
"Net 14. Thanks!"
The arbitrary JSON object you attached at creation, returned untouched. Merchant-only: it never reaches the customer's payment page.
Where the payment page sends the customer once the invoice is paid. Null when none was set.
"https://example.com/thanks"
Where the payment page sends the customer if they back out. Null when none was set.
"https://example.com/billing"
Where the invoice came from. api — this API. dashboard — a human created it in the Taberna dashboard.
api, dashboard "api"
When the invoice stops accepting payment. UTC timestamp in ISO 8601, e.g. 2026-07-29T14:30:00.000Z.
"2026-07-29T14:30:00.000Z"
When the invoice was settled in full. Null until it is. UTC timestamp in ISO 8601, e.g. 2026-07-29T14:30:00.000Z.
"2026-07-29T14:30:00.000Z"
When the merchant voided the invoice. Null unless voided. UTC timestamp in ISO 8601, e.g. 2026-07-29T14:30:00.000Z.
"2026-07-29T14:30:00.000Z"
When the invoice was issued. UTC timestamp in ISO 8601, e.g. 2026-07-29T14:30:00.000Z.
"2026-07-29T14:30:00.000Z"
The invoice's remaining email allowance.