Payment links
A reusable, fixed-price payment page on aliquot.cc. Every payment started from it creates a new invoice.
Last updated Oct 27, 2026
A payment link is a public page with a title, a USD price and the network and token pairs you accept. Share its URL anywhere. Each time a buyer starts a payment, Aliquot creates a new invoice in AWAITING_SELECTION and sends the buyer to that invoice's hosted checkout, where they pick one of the accepted pairs.
Use a payment link when the price is fixed and you do not need to create an invoice per order from your server. Use invoices when you need splits, your own order ID or a per-buyer amount.
Create a link
POST /api/v1/crypto/payment-links — permission crypto-links:create. No Idempotency-Key.
curl -X POST https://api.aliquot.cc/api/v1/crypto/payment-links \
-H "Authorization: Bearer $ALIQUOT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Halden Grotesk — Desktop license",
"description": "Five desktop seats, OTF and TTF.",
"amount": "49.00",
"accepted_pairs": [
{ "network": "POLYGON_AMOY", "token": "USDC" },
{ "network": "BASE_SEPOLIA", "token": "USDC" }
],
"merchant": "halden_type",
"redirect_url": "https://shop.example.com/thanks"
}'| Field | Type | Required | Description |
|---|---|---|---|
title | string | Yes | 1–200 characters. |
amount | string | Yes | Price in USD, at most two decimals, minimum "1.00". |
accepted_pairs | array | Yes | 1–8 { "network", "token" } pairs, no duplicates, all Sandbox (mode: "test" in the API) networks or all Live networks. This decides the link's environment, which cannot change later. |
description | string or null | No | Up to 2000 characters. |
merchant | string | No | Reference of the MERCHANT account selling. Omitted: your platform account. Cannot be changed later. |
fee_payer | string or null | No | CUSTOMER or MERCHANT. null or omitted: the organization default (CUSTOMER) at the time of each checkout. |
markup_percent | number or null | No | 0–20, at most two decimals. null or omitted: the organization default (0) at the time of each checkout. |
fulfillment_type | string | No | NONE (default), SECRET_TEXT, REDIRECT, FILE_DOWNLOAD or WEBHOOK_ONLY. See Fulfilment. |
fulfillment_payload | string or null | For SECRET_TEXT, REDIRECT, FILE_DOWNLOAD | Up to 4000 characters. For REDIRECT and FILE_DOWNLOAD, an http or https URL; anything else is a 422 on this field. |
redirect_url | string or null | No | Copied to every invoice the link creates. |
active | boolean | No | Default true. |
A Sandbox link uses the test networks; a link whose pairs are all Live networks takes real payments.
Fulfilment
The fulfilment is what the buyer gets on the checkout receipt once the invoice is PAID or OVERPAID:
fulfillment_type | The receipt shows |
|---|---|
NONE | Nothing. |
SECRET_TEXT | fulfillment_payload as text, with a copy button: a license key, an invite code, instructions. |
REDIRECT | A button that opens fulfillment_payload, the URL of an access page. |
FILE_DOWNLOAD | A button that opens fulfillment_payload, a download URL. Aliquot does not host the file. |
WEBHOOK_ONLY | Nothing. You deliver from your invoice.paid handler. |
- Never before payment. In every other status the public view's
fulfillmentisnull; the payload does not reach the browser. - Fixed per invoice. The fulfilment is copied onto the invoice when the buyer starts the checkout. Editing the link changes what later checkouts deliver, never the receipt of an invoice that already exists.
- Public receipt. Anyone with the invoice ID can open the receipt, like the rest of the checkout. For anything that must stay bound to one buyer, use a signed, expiring URL or deliver from your webhook.
- No automatic return. A receipt with a fulfilment does not count down to
redirect_url; the buyer gets a button back instead.
The public view (GET /api/v1/public/pay/{id} and its stream) carries it as:
"fulfillment": { "type": "FILE_DOWNLOAD", "payload": "https://files.example.com/halden-grotesk.zip" }Every invoice.* webhook carries payment_link_id, so your invoice.paid handler can tell which link the payment came from without another request.
The link object
201 Created returns:
{
"id": "plink_01JB7RZ4C2W8M6Q1N3H5T7V9XA",
"slug": "k7m2q9x4hd",
"url": "https://aliquot.cc/l/k7m2q9x4hd",
"livemode": false,
"title": "Halden Grotesk — Desktop license",
"description": "Five desktop seats, OTF and TTF.",
"amount": "49.00",
"currency": "USD",
"merchant": { "reference": "halden_type", "name": "Halden Type" },
"accepted_pairs": [
{ "network": "POLYGON_AMOY", "token": "USDC" },
{ "network": "BASE_SEPOLIA", "token": "USDC" }
],
"fee_payer": null,
"markup_percent": null,
"fulfillment_type": "NONE",
"fulfillment_payload": null,
"redirect_url": "https://shop.example.com/thanks",
"active": true,
"sales_count": 0,
"created_at": "2026-10-27T14:00:00.000Z",
"updated_at": "2026-10-27T14:00:00.000Z"
}Aliquot generates the slug; share url. sales_count counts the invoices from this link that reached PAID or OVERPAID.
List, retrieve and update
| Endpoint | Permission | Description |
|---|---|---|
GET /api/v1/crypto/payment-links?mode=test | crypto-links:read | All links of one environment, { "items": [...] }. mode defaults to your key's environment (live with a legacy key). |
GET /api/v1/crypto/payment-links/{id} | crypto-links:read | One link. |
PATCH /api/v1/crypto/payment-links/{id} | crypto-links:update | Change any of title, description, amount, accepted_pairs, fee_payer, markup_percent, fulfillment_type, fulfillment_payload, redirect_url, active. Fields that accept null are cleared with null. New accepted_pairs must stay in the link's environment. |
There is no delete. To take a link down, set "active": false: its page answers 404 and it creates no new invoices. Invoices it already created are not affected. Changes apply to checkouts started afterwards.
What a checkout creates
When a buyer starts a payment on https://aliquot.cc/l/{slug}, the new invoice gets:
- the link's
title,description,amount,merchantandredirect_url; - the link's
fee_payerandmarkup_percent, or the organization defaults when they arenull; - no
splits, nomerchant_order_id, nobuyer_emailand nometadata; payment_link_idset to the link'sid, and a copy of the link's fulfilment;- the link's environment, and the organization's default payment window (30 minutes), which restarts with its full length when the buyer picks a pair.
These invoices behave like any other: they appear in GET /api/v1/crypto/invoices and send the same webhooks.
Public endpoints
The link page uses two unauthenticated endpoints, which you can call to put a pay button on your own page:
| Endpoint | Description |
|---|---|
GET /api/v1/public/links/{slug} | { "slug", "livemode", "title", "description", "amount", "currency", "merchant_name", "platform_name", "allowed_pairs" }. 404 if the link does not exist or is inactive. |
POST /api/v1/public/links/{slug}/checkout | Creates the invoice and answers 201 with { "invoice_id", "pay_url" }. Send the buyer to pay_url. |
allowed_pairs lists the accepted pairs that can take payments right now.
Invoices
Create, list, retrieve and void invoices; every field; quotes; and how the hosted checkout handles network selection, live status and the return to your site.
Webhooks
The events Aliquot sends, their payloads, how to verify the signature, the retry schedule, how to resend a delivery, and how to manage endpoints and rotate the signing secret.