Z Zise Developers 简体中文

Available corridors, filtered by merchant authorization

GET /v1/remit/corridors scope: remittances:read
Merchant account

A corridor is receiving country × payout currency × payment method × clearing network. It is the prerequisite for everything in this flow: it determines the field contract and payee onboarding, and orders are dispatched through the corridor attached to their payee.

A corridor has four parts: country × currency × payment_method × clearing_systems[]. The first three are selectors; the clearing network is the fourth choice afterward. The database stores one row per clearing network, aggregated here into an array. Payee creation must include one of them as clearing_system. If any of the four parts is missing, both GET /v1/remit/payee-form-schema and POST /v1/remit/payees return corridor_not_supported, even though the wording can sound like we do not offer that corridor.

⚠ Send clearing_system back exactly as received, preserving every letter. The upstream actually returns FASTER PAYMENTS, while its own documentation says Faster Payments.

entity_type, individual / company, is not a corridor property here. It describes the payee, is selected by the end user during onboarding, and is supplied to payee-form-schema. Before 2026-08-13 this endpoint returned it incorrectly: the corridor table had no such column, and the implementation error made this endpoint always return an empty list.

All five filters run server-side: 1. enabled = 1: we have enabled the corridor, a decision under our control. 2. upstream_gone_at IS NULL: the upstream still supports it, maintained by synchronization cron. Without this, withdrawn corridors would remain listed and users would only fail at order creation after filling in their payee. 3. Merchant authorization: no authorization entries means all are available; once entries exist, only authorized (country, currency) pairs remain. 4. Payout currencies that cannot be converted from our settlement currency are excluded; otherwise order validation would reject them with corridor_not_supported. 5. Restricted jurisdictions and corridors for which we cannot construct a valid upstream request are excluded.

This is your list, not the platform-wide catalog. Do not cache and reuse it across merchants. Filter 4 also depends on line, since the two lines can use different settlement currencies.

⚠ Retrieval failures return 5xx with request_id, not an empty list. An empty list means exactly that no corridor remains available to you after these five filters.

Query Parameters

FieldTypeRequiredDescription
line "express" | "pobo" Optional Product line. Only affects filter 4, settlement-currency convertibility; the two lines can use different settlement currencies. Unrecognized values are treated as express.

Response

200OK. has_more is always false; enumeration lists are not paginated.
{
  "data": [
    {
      "country": "GB",
      "currency": "GBP",
      "payment_method": "LOCAL",
      "clearing_systems": [
        "FASTER PAYMENTS",
        "CHAPS"
      ]
    },
    {
      "country": "SG",
      "currency": "SGD",
      "payment_method": "LOCAL",
      "clearing_systems": [
        "FAST"
      ]
    }
  ],
  "next_cursor": null,
  "has_more": false
}
403insufficient_scope: this key lacks remittances:read.
Request
curl -X GET 'https://api.zinfra.vip/v1/remit/corridors' \
  -H 'x-auth-token: Bearer $TOKEN'
const res = await fetch("https://api.zinfra.vip/v1/remit/corridors", {
  method: "GET",
  headers: {
    "x-auth-token": "Bearer $TOKEN",
  },
});
// Keep monetary amounts as strings, never numbers.
const data = await res.json();
import requests

res = requests.get(
    "https://api.zinfra.vip/v1/remit/corridors",
    headers={
        "x-auth-token": "Bearer $TOKEN",
    },
)
# Use Decimal(str(...)) for amounts, not float.
data = res.json()
req, _ := http.NewRequest("GET", "https://api.zinfra.vip/v1/remit/corridors",
    nil)
req.Header.Set("x-auth-token", "Bearer $TOKEN")
res, err := http.DefaultClient.Do(req)
// Decode amount fields as string, not float64.
HttpRequest req = HttpRequest.newBuilder()
    .uri(URI.create("https://api.zinfra.vip/v1/remit/corridors"))
    .header("x-auth-token", "Bearer $TOKEN")
    .method("GET", HttpRequest.BodyPublishers.noBody())
    .build();
// Use String / BigDecimal for amounts, not double.
$ch = curl_init('https://api.zinfra.vip/v1/remit/corridors');
curl_setopt_array($ch, [
  CURLOPT_CUSTOMREQUEST => 'GET',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_HTTPHEADER => [
    'x-auth-token: Bearer $TOKEN',
  ],
]);
$res = curl_exec($ch);
// Use bcmath / strings for amounts, not floatval.
200
{
  "data": [
    {
      "country": "GB",
      "currency": "GBP",
      "payment_method": "LOCAL",
      "clearing_systems": [
        "FASTER PAYMENTS",
        "CHAPS"
      ]
    },
    {
      "country": "SG",
      "currency": "SGD",
      "payment_method": "LOCAL",
      "clearing_systems": [
        "FAST"
      ]
    }
  ],
  "next_cursor": null,
  "has_more": false
}