curl --request GET \
--url https://sandbox-api.polygon.technology/v0.11/customers \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.11/customers"
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/customers', 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/customers",
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/customers"
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/customers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.11/customers")
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": [
{
"id": "cst_01H9Xa8F5dN6mP3q",
"object": "customer",
"type": "individual",
"firstName": "Jane",
"middleName": null,
"lastName": "Smith",
"email": "jane@example.com",
"phone": "+12125551234",
"nationality": "US",
"externalId": "usr_12345",
"status": "active",
"signedAgreement": true,
"signedAgreementAt": "2026-03-20T14:15:22Z",
"wallets": [
{
"id": "wlt_01H9Xb3K7nM2pQ4r",
"type": "custodial",
"address": "0x7B3a9F2c4D1eA8bF6390cE5d2B7fA104C8e3D9b1",
"network": "polygon",
"asset": "usdc",
"balance": "1234.56",
"estimatedValueUsd": "1234.56",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"endorsements": [
{
"rejectionReasons": [
{
"developerReason": "<string>",
"reason": "<string>"
}
],
"requirements": {
"complete": [
"<string>"
],
"pending": [
"<string>"
],
"missing": [
"<string>"
],
"issues": [
"<string>"
]
}
}
],
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"hasMore": true,
"cursor": "<string>"
}{
"error": "Unauthorized",
"code": 1000,
"msg": "unauthorized access",
"status": 401,
"cause": "signature"
}List customers
Returns a paginated list of customers under the current Project.
curl --request GET \
--url https://sandbox-api.polygon.technology/v0.11/customers \
--header 'Authorization: Bearer <token>'import requests
url = "https://sandbox-api.polygon.technology/v0.11/customers"
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/customers', 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/customers",
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/customers"
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/customers")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sandbox-api.polygon.technology/v0.11/customers")
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": [
{
"id": "cst_01H9Xa8F5dN6mP3q",
"object": "customer",
"type": "individual",
"firstName": "Jane",
"middleName": null,
"lastName": "Smith",
"email": "jane@example.com",
"phone": "+12125551234",
"nationality": "US",
"externalId": "usr_12345",
"status": "active",
"signedAgreement": true,
"signedAgreementAt": "2026-03-20T14:15:22Z",
"wallets": [
{
"id": "wlt_01H9Xb3K7nM2pQ4r",
"type": "custodial",
"address": "0x7B3a9F2c4D1eA8bF6390cE5d2B7fA104C8e3D9b1",
"network": "polygon",
"asset": "usdc",
"balance": "1234.56",
"estimatedValueUsd": "1234.56",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"endorsements": [
{
"rejectionReasons": [
{
"developerReason": "<string>",
"reason": "<string>"
}
],
"requirements": {
"complete": [
"<string>"
],
"pending": [
"<string>"
],
"missing": [
"<string>"
],
"issues": [
"<string>"
]
}
}
],
"metadata": {},
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}
],
"hasMore": true,
"cursor": "<string>"
}{
"error": "Unauthorized",
"code": 1000,
"msg": "unauthorized access",
"status": 401,
"cause": "signature"
}Authorizations
Token from POST /auth/token
Query Parameters
Filter by status. Default returns all.
active, inactive Filter by exact email match.
Filter by externalId.
Filter customers created after this timestamp.
Filter customers created before this timestamp.
x <= 100Response
List of customers
Hide child attributes
Hide child attributes
"cst_01H9Xa8F5dN6mP3q"
"customer"
Customer type. Only individual is supported for MVP.
individual "individual"
"Jane"
null
"Smith"
"jane@example.com"
Primary phone in E.164 format.
"+12125551234"
ISO 3166-1 alpha-2 country code.
"US"
Developer's own user ID for cross-referencing.
"usr_12345"
active or inactive. Inactive customers cannot create new transactions. No intermediate states — all granularity lives in endorsement statuses.
active, inactive "active"
Whether the customer has accepted OMS terms of service.
true
Timestamp when signedAgreement was set to true. Null if not yet signed.
"2026-03-20T14:15:22Z"
Simplified flat view: one entry per wallet-asset combination. Use GET /wallets/{id} for the full representation.
Hide child attributes
Hide child attributes
"wlt_01H9Xb3K7nM2pQ4r"
"custodial"
"0x7B3a9F2c4D1eA8bF6390cE5d2B7fA104C8e3D9b1"
"polygon"
"usdc"
"1234.56"
"1234.56"
Endorsements track KYC/compliance status. Types: basic, cryptoCustody, usd. Statuses use SCREAMING_CASE: INACTIVE, PENDING, ISSUES, ACTIVE, REJECTED, REVOKED_ISSUES, OFFBOARDED.
Hide child attributes
Hide child attributes
basic, cryptoCustody, usd INACTIVE, PENDING, ISSUES, ACTIVE, REJECTED, REVOKED_ISSUES, OFFBOARDED Opaque pagination cursor — pass back as the cursor query param to fetch the next page. Absent on the last page.
Was this page helpful?