curl --request GET \
--url https://sandbox-api.polygon.technology/v0.11/networks \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.11/networks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.polygon.technology/v0.11/networks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.polygon.technology/v0.11/networks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.polygon.technology/v0.11/networks"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.polygon.technology/v0.11/networks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.11/networks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"network": "<string>",
"displayName": "<string>",
"assets": [
{
"asset": "<string>",
"contractAddress": "<string>",
"decimals": 123
}
],
"supportedBy": {
"externalAccount": {
"asSource": [
"<string>"
],
"asDestination": [
"<string>"
]
},
"depositAddress": {
"asSource": true,
"asDestination": true
},
"virtualAccount": {
"asSource": true,
"asDestination": true
},
"cashIn": {
"asSource": true,
"asDestination": true
},
"wallet": {
"asSource": true,
"asDestination": true
}
},
"chainId": 123
}
],
"object": "list"
}List supported networks
Lists every network BPN supports, with its identifiers, available assets, and which OMS resources can use it in which direction. Availability is derived from live route configuration, so a network absent from this list is not routable. Fiat-rail availability reflects the calling project’s own configuration; crypto networks are global.
“Network” here means any rail, not only a blockchain: category
(crypto | fiatAccount | cash) and type (blockchain | bankRail |
card | physical) are what distinguish them, and chainId /
networkFamily are absent on everything that is not a blockchain.
Declared here, beside the other Reference operations, to match the
ratified OMS v0.12 contract — which tags /networks, /assets and
/reference/account-type-requirements alike. The handler lives in
services/platform; tag and Go package are independent, exactly as
getAccountTypeRequirements above is served from
services/externalaccount.
curl --request GET \
--url https://sandbox-api.polygon.technology/v0.11/networks \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.11/networks"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://sandbox-api.polygon.technology/v0.11/networks', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sandbox-api.polygon.technology/v0.11/networks",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sandbox-api.polygon.technology/v0.11/networks"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sandbox-api.polygon.technology/v0.11/networks")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.11/networks")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"network": "<string>",
"displayName": "<string>",
"assets": [
{
"asset": "<string>",
"contractAddress": "<string>",
"decimals": 123
}
],
"supportedBy": {
"externalAccount": {
"asSource": [
"<string>"
],
"asDestination": [
"<string>"
]
},
"depositAddress": {
"asSource": true,
"asDestination": true
},
"virtualAccount": {
"asSource": true,
"asDestination": true
},
"cashIn": {
"asSource": true,
"asDestination": true
},
"wallet": {
"asSource": true,
"asDestination": true
}
},
"chainId": 123
}
],
"object": "list"
}Authorizations
Token from POST /auth/token
Response
The request has succeeded.
Hide child attributes
Hide child attributes
Partner-facing network token — the value to send in a request network
field. Internal route-config codes are mapped here at the boundary
(international_wire is emitted as swift), so this is never a
snake_case internal token. achSameDay and local are also
contract-legal request values with no distinct entry here: routes are
validated against the coarser ach / swift rail respectively, so
achSameDay availability is reported under ach and local under
swift rather than as their own network.
Which broad class of network this is.
crypto, fiatAccount, cash The transport a network uses. Named NetworkKind rather than NetworkType
because NetworkType is already taken by the internal admin vocabulary
(chain | fiat_rail) in admin.tsp — a different set with a different audience.
blockchain, bankRail, card, physical Human-readable label, e.g. "Polygon PoS".
Hide child attributes
Hide child attributes
Lowercase canonical asset code, e.g. usdc.
Token contract address. OMITTED — the JSON key is absent, not sent as an
explicit null — for a native asset (BPN stores token_id = 'native'
for those) and for any asset with no on-chain identity row. ?: T | null
in TypeSpec compiles (oapi-codegen) to a Go *string tagged omitempty,
so a nil pointer drops the key rather than emitting null; "key absent"
and "explicit null" are treated as equivalent here on purpose, not by
oversight — every consumer already does (the generated Zod schema
accepts both via .nullish()), so there is no case that needs telling
the two apart.
Count of decimal places in the on-chain smallest unit. OMITTED (key
absent, not explicit null) — see contractAddress for why absent and
null are equivalent here — when BPN has no on-chain identity row for
this (asset, network): the scale is then genuinely unknown, not zero.
A partner must not assume a default scale and must not format an amount
in this asset while decimals is absent — the same "absent means
unproven, not false" convention supportedBy.wallet uses for a
capability instead of a scale.
Which OMS resources can use this network, and in which direction.
Every property is optional, and absence is meaningful: it means BPN has not
established the answer, NOT that the answer is no. A client must not treat a
missing property as false. wallet is the field this applies to in
practice — see its own docstring.
Two spec fields are deliberately absent from the whole response rather than
null, because their values are not BPN's to invent:
assets[].gasSponsorshipSupported (today's sponsor_gas columns are
per-request defaults, not a statement of what BPN can absorb) and
assets[].limits (BPN's existing transfer_limits subsystem is rail-scoped
USD, a different key and denomination — two overlapping limit surfaces would
invite "which one wins" bugs). Both are additive later. See #2754.
Hide child attributes
Hide child attributes
Whether an OMS-custodied wallet can hold value on this network and use it as a source or destination.
ABSENT means unproven, not false. OMS wallet custody is an enforced
two-vendor allow-list (services/depositaddress/helpers.go —
WalletRecord.VendorID must be the multi-asset Erebor-embedded wallet, and
a Coinme-custodial wallet fails closed). Erebor's served networks are
therefore provable and are populated here. Coinme has no equivalent
capability authority — canonicalChains is a name-normalisation set, not a
support list, and it contains bitcoin — so polygon, the one
Coinme-only network, omits this property until #2763 establishes Coinme's
matrix. That will be a data change, not a contract change.
EVM chain id. OMITTED (key absent, not explicit null) for a non-EVM
network — see contractAddress for why absent and null are equivalent
here. BPN stores chain_id as non-empty text for every row including
Solana, whose value is a base58 genesis hash — anything that does not
parse as an integer omits the key.
Declared int64, not safeint, despite safeint — "an integer
exactly representable in JS" — being the semantically correct scalar
for a value this small (every real chain id fits well under 2^53;
Aurora's 1313161554 is the largest in practice, and int32 is already
too small for it). Tried as the fix for comment 3732256949 (the
generated Zod schema coerces to bigint while the generated TS type is
number, so parsing a response can silently hand a caller a bigint
where the exported type promised number) and reverted: the
@typespec/openapi3 emitter's default safeint strategy still emits
format: int64 in the OpenAPI schema — identical to plain int64 —
and hey-api's Zod generator decides bigint-coercion purely from that
format string (shouldCoerceToBigInt), so the scalar swap changes
nothing generated. Fixing this for real needs the emitter's
safeint-strategy: double-int option, which is a schema-wide (not
per-field) setting untested against every other int64/safeint use
in this spec — out of scope for a one-field fix. Tracked as a known
generator quirk rather than half-fixed here.
OMITTED (key absent, not explicit null) for non-blockchain networks —
see contractAddress for why absent and null are equivalent here.
evm, solana list Was this page helpful?