Payments

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.

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"
  }'
FieldTypeRequiredDescription
titlestringYes1–200 characters.
amountstringYesPrice in USD, at most two decimals, minimum "1.00".
accepted_pairsarrayYes1–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.
descriptionstring or nullNoUp to 2000 characters.
merchantstringNoReference of the MERCHANT account selling. Omitted: your platform account. Cannot be changed later.
fee_payerstring or nullNoCUSTOMER or MERCHANT. null or omitted: the organization default (CUSTOMER) at the time of each checkout.
markup_percentnumber or nullNo0–20, at most two decimals. null or omitted: the organization default (0) at the time of each checkout.
fulfillment_typestringNoNONE (default), SECRET_TEXT, REDIRECT, FILE_DOWNLOAD or WEBHOOK_ONLY. See Fulfilment.
fulfillment_payloadstring or nullFor SECRET_TEXT, REDIRECT, FILE_DOWNLOADUp to 4000 characters. For REDIRECT and FILE_DOWNLOAD, an http or https URL; anything else is a 422 on this field.
redirect_urlstring or nullNoCopied to every invoice the link creates.
activebooleanNoDefault 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_typeThe receipt shows
NONENothing.
SECRET_TEXTfulfillment_payload as text, with a copy button: a license key, an invite code, instructions.
REDIRECTA button that opens fulfillment_payload, the URL of an access page.
FILE_DOWNLOADA button that opens fulfillment_payload, a download URL. Aliquot does not host the file.
WEBHOOK_ONLYNothing. You deliver from your invoice.paid handler.
  • Never before payment. In every other status the public view's fulfillment is null; 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.

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

EndpointPermissionDescription
GET /api/v1/crypto/payment-links?mode=testcrypto-links:readAll 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:readOne link.
PATCH /api/v1/crypto/payment-links/{id}crypto-links:updateChange 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, merchant and redirect_url;
  • the link's fee_payer and markup_percent, or the organization defaults when they are null;
  • no splits, no merchant_order_id, no buyer_email and no metadata;
  • payment_link_id set to the link's id, 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:

EndpointDescription
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}/checkoutCreates 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.