> ## Documentation Index
> Fetch the complete documentation index at: https://docs.taberna.io/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> Taberna is a crypto payments API. Amounts are priced in fiat (USD or EUR) and paid in crypto.
> Fiat amounts are ALWAYS decimal strings ("9.99"), never numbers. Crypto amounts are integer strings in the asset's smallest unit.
> Authenticate merchant endpoints with `Authorization: Bearer tbrn_live_...`. Every key is bound to one store and carries an explicit scope set, so never pass a store id to a /v1 endpoint.
> A 401 means the credential is bad; a 403 means the key lacks a scope. Never retry or re-authenticate on a 403 — surface it as a configuration error.
> The /v1/checkouts endpoints are deliberately unauthenticated and run in the buyer's browser. Never send an API key to a browser.
> Verify webhook signatures over the RAW request body before parsing JSON, and treat delivery as at-least-once: handlers must be idempotent.
> Never grant value based on a browser redirect to successUrl. Fulfil on a signature-verified webhook, or on a server-side read of GET /v1/orders/{id} or GET /v1/invoices/{id}.
> There is no test mode: every payment method is a live chain moving real funds.
> A merchant can run an entire shop with no code: the dashboard creates products and invoices, and every store can host a storefront at {slug}.taberna.io with its own theme, sections, branding and optional custom domain. Never assume the reader has an API integration.
> Taberna issues no refunds and performs no KYC. A refund is something the merchant sends from their own payout wallet, off-platform.

# Digital delivery

> Hand over keys, text, a file or a link the moment a payment lands.

Delivery is what your customer receives after paying. Taberna hands it over
automatically, on the payment page, the instant the money confirms — you do not have to
be awake.

Open a saved product and use the **Delivery** card. New products have to be created
first; the card is not on the create form.

## Pick a delivery method

There are four, plus **None**.

### Text — unique per order

A pool of lines, one handed to each item sold: licence keys, gift-card codes, account
logins, e-pins.

**Use this when** every customer must get something different. This is the only method
that can run out, and the only one with a stock count.

### Text — same for everyone

One block of text every buyer receives: a Discord invite, a coupon, a set of
instructions. Up to 10,000 characters.

**Use this when** the thing you are selling is the same for everybody and never runs out.

### File — download every buyer receives

One file, up to 100 MB — a ZIP, PDF, text or JSON file. It is kept in private storage and
never made public; buyers reach it through a short-lived download link generated for
them.

**Use this when** you are selling an ebook, a pack of assets, a template or software.

### Redirect

An `https://` address the buyer is sent to after paying — your own fulfilment page, a
course platform, a vendor portal.

**Use this when** something else already does the handing over and just needs the buyer
delivered to it.

### None

The buyer gets a receipt and nothing else. Perfectly valid when you fulfil by hand.

## Quantity limits

Every method except None lets you set **Min quantity per order** and **Max quantity per
order**. Leave the maximum blank for no limit — for a stock pool that means "as many as
are left".

## Managing stock

Stock applies to **Text — unique per order** only. Once you save that method, a **Stock**
card appears.

<Frame caption="The stock manager, with the three counters and the bulk paste box.">
  <img src="https://mintcdn.com/taberna/CSV07Wzd5bzv2KKK/images/dashboard-stock-manager.png?fit=max&auto=format&n=CSV07Wzd5bzv2KKK&q=85&s=f22e1ba24ba98e3cb9b1a9d222a53818" alt="The Stock card showing Available, Reserved and Delivered counters above an Add stock textarea" width="1200" height="675" data-path="images/dashboard-stock-manager.png" />
</Frame>

Three counters tell you where everything is:

* **Available** — ready to sell.
* **Reserved** — held for an order that has not been paid yet. If that order expires, the
  units come back to Available.
* **Delivered** — already handed to a customer.

### Adding stock

Paste your lines into **Add stock** and press the button. Up to 10,000 lines at a time.
Taberna splits them on your delimiter, trims each one, drops blanks, and skips anything
already in the pool — so pasting the same batch twice is safe, and it tells you how many
duplicates it skipped.

Your stock is **encrypted at rest**, and Taberna never shows it back to you in full. The
recent-units list masks each line to its first few and last two characters.

### Delimiter and order

Two settings on the Delivery card control how the pool behaves:

* **Delimiter** — how your pasted text is split into units. New line, comma, space, or
  something of your own up to 8 characters.
* **Selection order** — **FIFO** hands out the oldest units first, **LIFO** the newest.
  FIFO is the sensible default.

### Running low

Below 10 available units the card shows a low-stock warning. Take it seriously: when the
pool empties, customers cannot buy the product at all.

### Clearing stock

**Clear available stock** deletes unsold units and leaves reserved and delivered ones
alone. It cannot be undone.

## What to read next

<CardGroup cols={2}>
  <Card title="Orders and payments" icon="receipt" href="/guides/orders-and-payments">
    Watching a sale complete.
  </Card>

  <Card title="Products" icon="box" href="/guides/products">
    The product form itself.
  </Card>
</CardGroup>
