On this page
Retrieve
Read one payment channel with its permanent per-network addresses, the tokens each network currently accepts, and your current fee rates.
API key: Payment
Read one channel by its pc_ identifier. This is the call to make before showing a payer where to send money: it returns the current address of every network and the tokens that network accepts right now.
Response (200 OK)
{
"id": "pc_2QhKZv6mRt9WdA3nYpLbXf",
"project_id": "prj_xFukZuAJZR06pLVBh3uwzv",
"external_id": "customer-42",
"status": "active",
"is_accepting_payments": true,
"is_fully_provisioned": false,
"is_test": false,
"applied_fee_percent": 1.0,
"customer_fee_percent": 0,
"networks": [
{
"network": "TRC20",
"status": "active",
"address": "TN3W4H6rK2ce4vX9YnFQHwKENnHjoxb3m9",
"tokens": [
{ "symbol": "USDT", "minimum_deposit": "1.00" },
{ "symbol": "USDC", "minimum_deposit": "1.00" }
]
},
{
"network": "ERC20",
"status": "active",
"address": "0x9f2a6c1b4e8d7350ab11c9e5f0d2743b86ce41d9",
"tokens": [
{ "symbol": "USDT", "minimum_deposit": "12.00" },
{ "symbol": "USDC", "minimum_deposit": "12.00" }
]
},
{
"network": "SOL",
"status": "provisioning",
"tokens": [
{ "symbol": "USDC", "minimum_deposit": null }
]
}
],
"created_at": 1767225600,
"updated_at": 1767225780
}
Statuses
| Status | Meaning | Accepts deposits |
|---|---|---|
provisioning |
Created, no address ready yet | No |
active |
At least one address exists | Yes |
blocked |
You paused the channel | No |
active is sticky. Once a channel has produced its first address it never returns to provisioning on its own — the remaining networks continue in the background and appear as they become ready. There is no failed state: provisioning retries until it succeeds.
is_accepting_payments is the single flag to branch on in your UI. It is true only when the project is active, the channel is not blocked, and at least one network has both an address and an accepted token.
Addresses are permanent
An address returned for a channel belongs to that channel forever and is never reassigned to anyone else. Cache it and stop re-fetching it on every page view.
Two things do change, and your integration should follow them:
- —Tokens per network. Enabling or disabling a token on the project changes the
tokensarray. Show only what is listed. - —Which networks appear. Removing every token of a network from the project removes that network from the response. The address itself is not deleted — re-enabling the token brings the same address back — but stop presenting a route the API no longer returns.
Minimums are per network and token
An entry in tokens is an object, not a symbol:
| Field | Meaning |
|---|---|
symbol |
The token code, for example USDT. |
minimum_deposit |
Decimal string, in that token's own units. The smallest transfer that route credits. |
The minimum belongs to the token and the network together, and the two ends of that range sit orders of magnitude apart — the same token is bounded very differently on a chain that costs cents and on one that costs dollars. It is quoted live on every read, so take the number from the response you are rendering and never hardcode it.
A transfer below the minimum is not credited to the channel and is not returned automatically. Put the number next to the address.
minimum_deposit is null when no minimum can be quoted for that route at the moment. That is not a route without a minimum: no amount on it is known to be safe, so do not invite a deposit there until a number comes back. Treating null as zero is how a payment gets sent that nothing can credit.
Fees are current, not historical
applied_fee_percent and customer_fee_percent describe your pricing today. They are informational. The authoritative numbers for any specific payment are on the deposit that recorded it, which carries its own frozen rates and its own gross, fee and net. See Retrieve Deposit.
Errors
| Code | HTTP | When |
|---|---|---|
payment_channels_disabled |
503 | Payment channels are not enabled for your account in this environment. |
payment_key_required |
403 | The request was signed with a Payout (rk_) key. |
payment_channel_not_found |
404 | The id resolves to nothing this credential may see. |
field_invalid_format |
400 | The path segment is not a valid pc_ identifier. |
A channel that belongs to another merchant, another environment or a project outside your credential's scope answers payment_channel_not_found — identical to a channel that does not exist, so the API never confirms what it will not show you.
See Error Codes for the full catalogue.