# Crypto invoice

> A one-off request for a fixed amount with a time limit and its own payment page. How a CryptoLike invoice is created, priced, paid and reported.

Source: https://cryptolike.net/glossary/crypto-invoice
Updated: 2026-10-04

A one-off request for a fixed amount, priced in crypto or in fiat, with a time limit and its own payment page and deposit address.

## How it works in CryptoLike

In CryptoLike an invoice is a payment: `POST /v1/invoices` with `amount` and `currency` — a fiat code (`USD`, `EUR`) or a coin ticker (`BTC`, `USDT`). The response carries `id`, `status: new`, `checkout_url` and `ttl_expires_at`. Pass `coin_id` to fix the asset at once, or leave it out and let the payer choose on the checkout page, where a fiat price gets a [locked rate](https://cryptolike.net/glossary/rate-lock). The payer chooses from the coins you offer for invoices (Coins → For invoices in the cabinet), each shown with an approximate amount marked ≈; `allowed_coin_ids` narrows the list for one invoice.

The status then moves `new` → `pending` → `paid`; it can also end `underpaid`, `expired` or `cancelled` (`POST /v1/invoices/{id}/cancel`, only from `new`). Every change arrives as an `invoice.*` webhook. `order_id`, `description` and `metadata` (up to 20 string pairs, 4 KB at most, never shown to the payer) tie the payment to your order; `idempotency_by_order_id: true` returns the open payment of the same order instead of creating a second one.

Without code, create a payment in the cabinet — fiat or crypto amount, time to pay, return URL, who pays the platform fee — or in the Telegram bot, then share its [payment link](https://cryptolike.net/glossary/payment-link). `GET /v1/invoices?format=csv` or `?format=xlsx` exports the list. Step by step: [create a crypto invoice](https://cryptolike.net/guides/create-crypto-invoice).

## Example

The smallest CryptoLike invoice request needs only an amount and a currency; `order_id` links it to your order and `return_url` is the "back to the shop" link shown after payment. Send it with an `Idempotency-Key` header so a retry never creates a second invoice:

```json
{
  "amount": "10.50",
  "currency": "USD",
  "order_id": "A-1001",
  "return_url": "https://shop.example/thanks"
}
```
