Skip to content

API

On this page

List

Page through your payment channels newest first with cursor pagination, and filter by project, status or your own external ID.

GET/v1/payment-channels

API key: Payment

Returns the channels visible to this credential, newest first. Use it to reconcile your own payer records against ours, or to find a channel by the external_id you assigned.

Query parameters

Parameter Type Default Description
limit integer 20 Page size from 1 to 100.
cursor string Opaque cursor from the previous page's next_cursor.
status string active, blocked or provisioning. May be repeated; duplicates are rejected.
external_id string Exact match on the identifier you supplied at creation.
project_id string Restrict to one project (prj_…).

Any other parameter is rejected. There is no external_order_id and no created_from / created_to: those belong to invoices and withdrawals, not to channels.

Example

GET /v1/payment-channels?limit=50&status=active&status=provisioning HTTP/1.1
Host: api.paymos.io
Authorization: HMAC-SHA256 pk_live_…:…
X-Request-Timestamp: 1767225660

Response (200 OK)

{
  "items": [
    {
      "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
    },
    {
      "id": "pc_6BwTyH4nPl8QmZ2vKrJdSc",
      "project_id": "prj_xFukZuAJZR06pLVBh3uwzv",
      "external_id": "customer-41",
      "status": "provisioning",
      "is_accepting_payments": false,
      "is_fully_provisioned": false,
      "is_test": false,
      "applied_fee_percent": 1.0,
      "customer_fee_percent": 0,
      "networks": [
        {
          "network": "TRC20",
          "status": "provisioning",
          "tokens": [
            { "symbol": "USDT", "minimum_deposit": null },
            { "symbol": "USDC", "minimum_deposit": null }
          ]
        },
        {
          "network": "ERC20",
          "status": "provisioning",
          "tokens": [
            { "symbol": "USDT", "minimum_deposit": null },
            { "symbol": "USDC", "minimum_deposit": null }
          ]
        },
        {
          "network": "SOL",
          "status": "provisioning",
          "tokens": [
            { "symbol": "USDC", "minimum_deposit": null }
          ]
        }
      ],
      "created_at": 1767225540,
      "updated_at": 1767225540
    }
  ],
  "next_cursor": "CfDJ8JvN…"
}

Pagination

Ordering is created_at then channel id, both descending, so the sequence is stable while you page.

  • next_cursor is null on the last page. That is the signal to stop.
  • A cursor is bound to the filters that produced it. Change status, external_id or project_id and reuse the old cursor and you get 400 pagination_cursor_invalid — the alternative would be silently skipping rows you never saw.
  • Cursors expire 24 hours after they are issued. Restart from the first page after that.
  • A project_id outside your credential's scope returns an empty page rather than a 404, so the API never confirms whether a project you cannot see exists.

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.
pagination_cursor_invalid 400 The cursor is malformed, expired, or bound to different filters.
field_invalid_enum 400 An unknown status value.
field_invalid_format 400 project_id is not a valid prj_ identifier, or status was repeated with the same value twice.
payment_channel_external_id_invalid 400 external_id is longer than 128 characters.
field_out_of_range 400 limit is outside 1–100.
query_parameter_unknown 400 A parameter that is not in the table above.

See Error Codes for the full catalogue.