Skip to content

API

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.

GET/v1/payment-channels/:payment_channel_id

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 tokens array. 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.