Accept Payments
This guide explains how to configure your account to accept cryptocurrency payments
Supported Networks
The following blockchain networks are supported:
| Network |
|---|
| Solana |
| Arbitrum |
| BNB Chain |
| Litecoin |
Supported Cryptocurrencies
The following cryptocurrencies are supported:
- USDC
- USDT
- LTC (Litecoin)
LTC is the native cryptocurrency of the Litecoin network. To accept it, configure a Litecoin receiving address and enable LTC in your Settlement Settings. The networks and cryptocurrencies offered at checkout depend on the available assets and your enabled settlement settings.
Public payment API
For the simplest integration, redirect buyers to the hosted Paylink or Checkout Session. A custom payment UI can create an invoice with POST /api/public/payments. This endpoint is public and does not require an organization API key.
| Field | Type | Required | Description |
|---|---|---|---|
paylinkId | UUID | one source required | An enabled Paylink. Omit when using checkoutSessionId. |
checkoutSessionId | string | one source required | A valid ycs_ Checkout Session ID. Use its saved amount and customer data. |
network | string | yes | An available network from public checkout data. |
symbol | string | yes | An enabled token symbol, at most 20 characters; normalized to uppercase. |
customerEmail | effective email required | Up to 255 characters. May be omitted only when the Checkout Session already supplies the email. | |
customerName | string | no | Up to 255 characters. |
customerPhone | string | no | Up to 50 characters. |
customerDateOfBirth | string | no | Up to 20 characters. |
customerAddress | string | no | Up to 500 characters. |
clientReferenceId | string | no | Your customer reference, up to 255 characters. |
subscriptionId | UUID | no | Existing subscription when paying a recurring renewal. |
language | string | no | Supported checkout language code, at most 10 characters. |
metadata | object | no | Up to 20 primitive values; metadata constraints. |
Read GET /api/public/paylinks/{id} or GET /api/public/checkout-sessions/{id} to obtain the applicable checkout configuration. Do not invent network identifiers or token availability. The server determines the price from the Paylink or immutable Checkout Session; a browser-supplied amount is not accepted here.
Read payment progress
GET /api/public/payments/{id} returns { "success": true, "data": ... } for an existing invoice. Inspect success as well as the HTTP status.
| Fields | Meaning |
|---|---|
status | Public payment status: PENDING, CONFIRMING, SUCCESS, EXPIRED, FAILED, or CANCELLED. |
requiredAmount, amountReceived, remainingAmount | Decimal strings in the payment asset's units. Preserve decimal precision. |
isFullyPaid | Enough funds have been received; this alone does not establish confirmation or settlement. |
confirmations, requiredConfirmations | Deposit confirmation progress when available. null means unavailable, not zero or complete. |
confirmationStages | For Litecoin, separate deposit and payout objects, each with confirmations and requiredConfirmations. Other networks return null. |
createdAt, detectedAt, paidAt, expiresAt | Unix timestamps in milliseconds. Except for createdAt, these may be null; paidAt represents completed settlement when known. |
Use the returned confirmation thresholds instead of assuming a fixed count. Litecoin deposit confirmation and merchant payout confirmation are separate stages; finishing the deposit stage does not mean the payment has completed. Preserve unknown progress instead of inventing a completed percentage.
Payment status = SUCCESS or a verified payment.confirmed webhook is required for fulfillment. Invoice creation, browser redirects, and isFullyPaid are not payment confirmation. For recurring access, also follow the subscription lifecycle rules.