Create a payment link.
{
"title": "Market report", // required, <= 120 chars
"description": "Optional note", // optional, <= 1000 chars
"amount": "5.00", // required, decimal string in "asset"
"asset": "USDC" | "EURC", // optional, default "USDC"
"destinationWallet": "0x...", // optional, defaults to your receiving wallet
"linkType": "single" | "reusable", // optional, default "single"
"metadata": { "orderId": "A-1042" }, // optional, flat string map
"clientReferenceId": "order_1042", // optional, <= 200 chars
"returnUrl": "https://shop.example/thanks", // optional, https
"cancelUrl": "https://shop.example/cart" // optional, https
}201 { "link": { "publicId", "payUrl", "title", "description",
"amount", "amountUsdc", "amountUsdcMinor", "asset", "destinationWallet",
"chainId", "linkType", "status", "metadata", "clientReferenceId",
"returnUrl", "cancelUrl", "createdAt", "archivedAt" } }
422 { "error", "issues": [{ "path", "message" }] }amount is the decimal amount in the link's asset — euros on an EURC link, dollars on a USDC one. amountUsdc is the deprecated older name for the same field, still accepted on request and still returned on response; sending both is fine only when they are the same amount, otherwise the request is rejected. Reusable links stay active and accept unlimited confirmed payments; single links are marked paid after one confirmation. metadata, clientReferenceId, returnUrl, and cancelUrl are stored untouched and echoed by every read; unset fields come back as null. See the field limits below.