curl --request GET \
--url https://sandbox-api.polygon.technology/v0.11/external-accounts \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.11/external-accounts"
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/external-accounts', 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/external-accounts",
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/external-accounts"
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/external-accounts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.11/external-accounts")
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{
"object": "<string>",
"limit": 123,
"hasMore": true,
"nextCursor": "<string>",
"previousCursor": "<string>",
"data": [
{
"id": "<string>",
"object": "externalAccount",
"owner": {
"kind": "customer",
"customerId": "<string>"
},
"failureDetail": {
"provider": "<string>",
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
],
"providerRequestId": "<string>"
},
"rejectionReason": "<string>",
"invalidReason": "<string>",
"label": "<string>",
"metadata": {},
"bankUs": {
"accountNumberLast4": "<string>",
"routingNumber": "<string>",
"bankName": "<string>"
},
"bankIban": {
"ibanLast4": "<string>",
"BIC": "<string>",
"countryCode": "<string>",
"bankAddress": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>",
"zipCode": "<string>"
}
},
"bankCanada": {
"institutionNumber": "<string>",
"transitNumber": "<string>",
"accountNumberLast4": "<string>",
"bankName": "<string>"
},
"walletExternal": {
"blockchainAddress": "<string>",
"otherCustodian": "<string>",
"supportedDestinations": [
{
"asset": "<string>",
"network": "<string>"
}
]
},
"card": {
"cardNumberLast4": "<string>",
"expiryMonth": 123,
"expiryYear": 123
},
"resolvedTransactions": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}List External Accounts
List External Accounts. Both customerId and counterpartyId are optional
filters — omit both to list all external accounts in the project (still
tenant-scoped by project).
curl --request GET \
--url https://sandbox-api.polygon.technology/v0.11/external-accounts \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.11/external-accounts"
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/external-accounts', 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/external-accounts",
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/external-accounts"
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/external-accounts")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.11/external-accounts")
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{
"object": "<string>",
"limit": 123,
"hasMore": true,
"nextCursor": "<string>",
"previousCursor": "<string>",
"data": [
{
"id": "<string>",
"object": "externalAccount",
"owner": {
"kind": "customer",
"customerId": "<string>"
},
"failureDetail": {
"provider": "<string>",
"code": "<string>",
"message": "<string>",
"details": [
"<string>"
],
"providerRequestId": "<string>"
},
"rejectionReason": "<string>",
"invalidReason": "<string>",
"label": "<string>",
"metadata": {},
"bankUs": {
"accountNumberLast4": "<string>",
"routingNumber": "<string>",
"bankName": "<string>"
},
"bankIban": {
"ibanLast4": "<string>",
"BIC": "<string>",
"countryCode": "<string>",
"bankAddress": {
"line1": "<string>",
"line2": "<string>",
"city": "<string>",
"state": "<string>",
"country": "<string>",
"zipCode": "<string>"
}
},
"bankCanada": {
"institutionNumber": "<string>",
"transitNumber": "<string>",
"accountNumberLast4": "<string>",
"bankName": "<string>"
},
"walletExternal": {
"blockchainAddress": "<string>",
"otherCustodian": "<string>",
"supportedDestinations": [
{
"asset": "<string>",
"network": "<string>"
}
]
},
"card": {
"cardNumberLast4": "<string>",
"expiryMonth": 123,
"expiryYear": 123
},
"resolvedTransactions": [
"<string>"
],
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
]
}Authorizations
Token from POST /auth/token
Query Parameters
Page size, supported range 1-100. The default and maximum are per-resource
(see each endpoint's description; most endpoints default to
50) and are resolved at runtime from configuration. Values outside the range
are clamped to the nearest bound rather than rejected. The range is published
machine-readably via the x-minimum/x-maximum OpenAPI extensions below —
deliberately NOT via @minValue/@maxValue, which emit JSON-Schema
minimum/maximum and make the generated SDK (Zod) reject values the server
accepts and clamps. See PaginatedList.limit for the effective value applied.
Filter to a single customer (cst_ prefix).
Counterparty ID (ctp_ prefix).
Response
The request has succeeded.
Paginated list of ExternalAccount resources.
Resource type discriminator.
The effective page size applied to this response, after clamping an
out-of-range or unset requested limit into the supported bound.
True when more rows exist beyond this page in the direction of travel (forward by default, backward when endingBefore was supplied).
Opaque cursor pointing at the last item in this page. Present when
data is non-empty. Pass as startingAfter to fetch the next page;
hasMore=false signals no more pages forward.
Opaque cursor pointing at the first item in this page. Present when
data is non-empty. Pass as endingBefore to page backward; when
this yields an empty response the client is at the start of the list.
The page of results.
Hide child attributes
Hide child attributes
External Account ID (ext_ prefix).
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$Resource type discriminator. Always "externalAccount".
externalAccount Who owns this account: the customer or one of their counterparties.
- Customer-owned
- Counterparty-owned
The instrument type; determines which detail object is populated.
bankUs, bankIban, bankCanada, card, walletExternal High-level grouping: fiatAccount for bank or card accounts, crypto for
wallets. The same value as the instrument category when this account is
referenced in a transaction.
fiatAccount, crypto Current lifecycle status. A transition to invalid always fires the
externalAccount.statusChanged webhook.
active, pending, rejected, invalid, deleted, failed Set when status = failed.
ereborRejected, cardProviderRejected, providerAccountMissing, cardLimitReached, cardInUse, provisioningTimeout, systemError Structured provider rejection detail. Set when status = failed and the failure was a provider terminal rejection; absent for provisioning timeouts and internal failures.
Hide child attributes
Hide child attributes
Vendor that rejected the request (e.g. erebor).
Vendor machine-readable error code (e.g. INVALID_REQUEST).
Vendor human-readable message.
Per-field validation messages, each in field: message form.
Vendor request id, for support escalation.
Set when status = rejected (compliance screening).
Set when status = invalid (derived from payout returns). Free-text for
now; a closed enum lands with the invalidation transition logic.
Optional display label.
Populated when type = bankUs.
Hide child attributes
Hide child attributes
Last four digits of the US bank account number.
Nine-digit ABA routing number (not a secret).
Bank account sub-type for US accounts.
checking, savings Bank display name.
Populated when type = bankIban.
Hide child attributes
Hide child attributes
Last four characters of the IBAN.
SWIFT BIC (8 or 11 chars).
ISO 3166-1 alpha-2; derived from the IBAN prefix when not supplied.
Structured bank postal address (canonical Address).
Hide child attributes
Hide child attributes
Street address, line 1.
Street address, line 2.
City.
State / province / region.
ISO 3166-1 alpha-2
ZIP / postal code.
Populated when type = bankCanada.
Hide child attributes
Hide child attributes
Three-digit institution number.
Five-digit transit number.
Last four digits of the Canadian bank account number.
Bank display name.
Populated when type = walletExternal.
Hide child attributes
Hide child attributes
The registered blockchain address, as submitted.
Crypto network family for a registered external wallet. A walletExternal is registered per family (an EVM address is valid across every EVM chain); the service provisions one Erebor CounterpartyBlockchainAddress per served network in the family.
evm, solana DestinationCustodian enum value (reused from VA).
ANCHORAGE_SG, ANCHORAGE_US, AQUANOW_CA, B2C2_UK, B2C2_US, BITGO_SG, BITGO_US, BITSTAMP_US, BVNK_US, CIRCLE_FR, CIRCLE_US, CITIBANK_US, COINBASE_US, COINSMART_CA, COPPER_CH, COPPER_UK, CUMBERLAND_DRW_LLC_US, CUMBERLAND_SG, EREBOR_BANK_US, FALCONX_US, FIDELITY_UK, FIDELITY_US, FIREBLOCKS_APAC, FIREBLOCKS_US, GALAXY_KY, GEMINI_US, KRAKEN_BVI, KRAKEN_EU_IE, KRAKEN_UK, KRAKEN_US, NUBANK_BR, PAXOS_US, RAMP_NETWORK_US, ROBINHOOD_US, WINTERMUTE_GB, SELF_HOSTED, OTHER Set when custodian = OTHER.
The (asset, network) pairs this wallet can receive, derived from
networkFamily ({usdc, usdt} across the family's served networks).
Populated when type = card.
Hide child attributes
Hide child attributes
Last four digits of the card PAN.
Card brand, derived server-side from the PAN.
visa, mastercard, amex, discover Card funding type, derived server-side. Only debit today.
debit, credit, prepaid Card expiry month (MM).
Card expiry year (YYYY).
Whether the stored billing address was supplied on the request or filled from the owning customer's address.
provided, customerDefault Transaction ids that this registration submitted for sender-attribution
release. Returned ONLY on the POST create response, and only when
registering this walletExternal matched held inbounds. Attribution is async:
each entry is submitted to the provider from
awaitingAction.awaitingSenderAttribution and moves to
processing.fundsPulled once settlement confirms — so an immediate GET of an
id may still show awaitingAction. Omitted on GETs (the create path is the
only writer).
Public TypeID, e.g. txn_01h455vb4pex5vsknk084sn02q; legacy UUID suffixes are accepted until non-v7 rows are retired.
^[a-z]+_([0-9a-hjkmnp-tv-z]{26}|[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12})$When the external account was registered.
When the external account was last updated.
Was this page helpful?