# Taberna > Accept crypto payments for digital goods. Create orders and invoices, hand the buyer a hosted checkout link, and let webhooks tell you when the money lands. > ## 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. ## Docs - [Instructions for AI agents](https://docs.taberna.io/agents.md): Rules for LLMs and coding agents integrating Taberna — the mistakes that cost real money. - [Attach a receipt email](https://docs.taberna.io/api-reference/checkout/attach-a-receipt-email.md): Records the buyer's email on a pending order so the receipt and any delivery can be sent. - [Get a delivery download link](https://docs.taberna.io/api-reference/checkout/get-a-delivery-download-link.md): Mints a short-lived presigned URL for a file delivered with a completed order item. - [Retrieve a checkout](https://docs.taberna.io/api-reference/checkout/retrieve-a-checkout.md): The hosted checkout payload for an order or an invoice, discriminated by `type`. This is what the payment page polls while an attempt is live. - [Start a payment attempt](https://docs.taberna.io/api-reference/checkout/start-a-payment-attempt.md): Locks a crypto quote for the chosen token and mints a fresh deposit wallet, returning the refreshed checkout to poll. - [List invoice templates](https://docs.taberna.io/api-reference/invoice-templates/list-invoice-templates.md): The store's saved invoice templates, newest first. Read-only on this API; templates are authored in the dashboard. - [Create an invoice](https://docs.taberna.io/api-reference/invoices/create-an-invoice.md): Issues an open invoice and returns it, including the hosted payment `url`. Requires the `invoices:write` scope. - [Email an invoice](https://docs.taberna.io/api-reference/invoices/email-an-invoice.md): Emails an open invoice to the address stored on it. Requires the `invoices:write` scope. - [List invoices](https://docs.taberna.io/api-reference/invoices/list-invoices.md): The store's invoices, newest first, optionally filtered by status. Requires the `invoices:read` scope. - [Retrieve an invoice](https://docs.taberna.io/api-reference/invoices/retrieve-an-invoice.md): One invoice by its short id, plus the on-chain transfers that paid it across every payment attempt. Requires the `invoices:read` scope. - [Void an invoice](https://docs.taberna.io/api-reference/invoices/void-an-invoice.md): Marks an open invoice as voided so it can no longer be paid. Requires the `invoices:write` scope. - [Create an order](https://docs.taberna.io/api-reference/orders/create-an-order.md): Creates a pending order for a cart of listed products and returns the hosted checkout link to send the buyer. Requires the `orders:write` scope. - [Expire an order](https://docs.taberna.io/api-reference/orders/expire-an-order.md): Cancels a pending order now instead of waiting out its window, releasing any reserved stock and firing the `order.expired` webhook. Requires the `orders:write` scope. - [List orders](https://docs.taberna.io/api-reference/orders/list-orders.md): The store's orders, newest first, optionally filtered by status and an inclusive `createdAt` window. Requires the `orders:read` scope. - [Retrieve an order](https://docs.taberna.io/api-reference/orders/retrieve-an-order.md): One order by its short id. Requires the `orders:read` scope. - [Add stock to a product](https://docs.taberna.io/api-reference/products/add-stock-to-a-product.md): Appends delivery stock to a `text_pool` product. Requires the `products:write` scope. - [List products](https://docs.taberna.io/api-reference/products/list-products.md): The store's products, newest first, optionally filtered by `listed`. Requires the `products:read` scope. - [Retrieve a product](https://docs.taberna.io/api-reference/products/retrieve-a-product.md): One product by id. `stock` is the live count of available units for pool delivery, and null when the product's delivery is unlimited or unconfigured. Requires the `products:read` scope. - [Retrieve the current store](https://docs.taberna.io/api-reference/store/retrieve-the-current-store.md): "Whoami" for an API key: the store the key belongs to and the scopes it was granted. Any valid key may call this, whatever it was granted — `scopes` is the calling key's own, so an integration can check what it may do without provoking a 403 to find out. - [List webhook deliveries](https://docs.taberna.io/api-reference/webhook-deliveries/list-webhook-deliveries.md): The delivery history for the store's webhook, newest first, optionally filtered by status. Requires the `webhooks:read` scope. - [Resend a webhook delivery](https://docs.taberna.io/api-reference/webhook-deliveries/resend-a-webhook-delivery.md): Pushes a delivery back into the dispatcher queue. Requires the `webhooks:write` scope. - [Authentication](https://docs.taberna.io/authentication.md): Bearer API keys, the eight scopes, and how Taberna answers a bad credential. - [Checkout](https://docs.taberna.io/checkout.md): The hosted payment pages, and the unauthenticated endpoints that drive them. - [Errors and limits](https://docs.taberna.io/errors-and-limits.md): The error shape, status conventions, request limits, and what Taberna does not do yet. - [Introduction](https://docs.taberna.io/introduction.md): Taberna lets you charge a customer in crypto, price it in fiat, and settle straight to your own wallet. - [Invoices](https://docs.taberna.io/invoices.md): Bill for an amount you compose per request, with no product catalogue. - [Orders](https://docs.taberna.io/orders.md): Charge for a cart of catalogue products through a hosted checkout. - [Payment lifecycle](https://docs.taberna.io/payment-lifecycle.md): State machines for orders, invoices and payment attempts — and what partial, confirmed and expired actually mean. - [Products and delivery](https://docs.taberna.io/products-and-delivery.md): Catalogue items, the four digital delivery types, and topping up stock from your server. - [Quickstart](https://docs.taberna.io/quickstart.md): Take your first crypto payment — from an empty store to a fulfilled order. - [Agent Skill](https://docs.taberna.io/skill.md): Install the Taberna skill so your coding agent integrates against the real API instead of a guessed one. - [Webhooks](https://docs.taberna.io/webhooks.md): Signed, retried lifecycle events — the signal you should build fulfilment on. ## OpenAPI Specs - [openapi](https://docs.taberna.io/api-reference/openapi.json)