Skip to main content
GET
/
v2
/
customers
/
{customerId}
Get a customer
curl --request GET \
  --url https://api.cdp.coinbase.com/platform/v2/customers/{customerId} \
  --header 'Authorization: Bearer <token>'
import requests

url = "https://api.cdp.coinbase.com/platform/v2/customers/{customerId}"

headers = {"Authorization": "Bearer <token>"}

response = requests.get(url, headers=headers)

print(response.text)
const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};

fetch('https://api.cdp.coinbase.com/platform/v2/customers/{customerId}', 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://api.cdp.coinbase.com/platform/v2/customers/{customerId}",
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://api.cdp.coinbase.com/platform/v2/customers/{customerId}"

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://api.cdp.coinbase.com/platform/v2/customers/{customerId}")
.header("Authorization", "Bearer <token>")
.asString();
require 'uri'
require 'net/http'

url = URI("https://api.cdp.coinbase.com/platform/v2/customers/{customerId}")

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
{
  "customerId": "customer_af2937b0-9846-4fe7-bfe9-ccc22d935114",
  "type": "individual",
  "individual": {
    "firstName": "Jane",
    "lastName": "Doe",
    "email": "jane.doe@example.com"
  },
  "capabilities": {
    "custodyCrypto": {
      "requested": true,
      "status": "active"
    },
    "custodyFiat": {
      "requested": false,
      "status": "unrequested"
    },
    "custodyStablecoin": {
      "requested": false,
      "status": "unrequested"
    },
    "tradeCrypto": {
      "requested": true,
      "status": "pending"
    },
    "tradeStablecoin": {
      "requested": false,
      "status": "unrequested"
    },
    "transferCrypto": {
      "requested": true,
      "status": "active"
    },
    "transferFiat": {
      "requested": false,
      "status": "unrequested"
    },
    "transferStablecoin": {
      "requested": false,
      "status": "unrequested"
    }
  },
  "requirements": {
    "fullSsn": {
      "status": "rejected",
      "impact": [
        "tradeCrypto"
      ]
    },
    "sourceOfFunds": {
      "status": "due"
    },
    "citizenship": {
      "status": "due"
    },
    "tos": {
      "status": "due",
      "impact": [
        "tradeCrypto",
        "transferFiat"
      ],
      "tosVersions": [
        {
          "versionId": "us_individual_2026-05-29",
          "languages": [
            "en"
          ],
          "url": "https://docs.cdp.coinbase.com/legal/terms/us_individual_2026-05-29"
        }
      ]
    }
  },
  "createdAt": "2026-01-10T14:25:00Z",
  "updatedAt": "2026-01-10T14:30:00Z"
}
{
"errorType": "invalid_request",
"errorMessage": "Invalid request. Please check the request body and parameters."
}
{
"errorType": "unauthorized",
"errorMessage": "The request is not properly authenticated."
}
{
"errorType": "not_found",
"errorMessage": "Customer not found."
}
{
"errorType": "internal_server_error",
"errorMessage": "An internal server error occurred. Please try again later."
}
{
"errorType": "bad_gateway",
"errorMessage": "Bad gateway. Please try again later."
}
{
"errorType": "service_unavailable",
"errorMessage": "Service unavailable. Please try again later."
}

Authorizations

Authorization
string
header
required

A JWT signed using your CDP API Key Secret, encoded in base64. Refer to the Generate Bearer Token section of our Authentication docs for information on how to generate your Bearer Token.

Path Parameters

customerId
string
required

The ID of the customer. The ID of the Customer, which is a UUID prefixed by customer_.

Pattern: ^customer_[a-f0-9\-]{36}$
Example:

"customer_af2937b0-9846-4fe7-bfe9-ccc22d935114"

Response

Successfully retrieved customer.

A customer record returned on read (Get / Create / Update Customer).

customerId
string
required

The ID of the Customer, which is a UUID prefixed by customer_.

Pattern: ^customer_[a-f0-9\-]{36}$
Example:

"customer_af2937b0-9846-4fe7-bfe9-ccc22d935114"

type
enum<string>
required

The type of the Customer.

Available options:
individual
Example:

"individual"

capabilities
object
required

Current state of each capability for this customer. Each capability shows whether it has been requested and its current status.

Example:
{
"custodyCrypto": { "requested": true, "status": "active" },
"custodyFiat": {
"requested": false,
"status": "unrequested"
},
"custodyStablecoin": {
"requested": false,
"status": "unrequested"
},
"tradeCrypto": {
"requested": false,
"status": "unrequested"
},
"tradeStablecoin": {
"requested": false,
"status": "unrequested"
},
"transferCrypto": { "requested": true, "status": "active" },
"transferFiat": {
"requested": false,
"status": "unrequested"
},
"transferStablecoin": {
"requested": false,
"status": "unrequested"
}
}
requirements
object
required

Map of requirements to be submitted. Each key is the field name, with values to describe its state. Requirements are only shown for requested capabilities. When a requirement is fulfilled, it disappears from this map.

Example:
{
"firstName": {
"status": "due",
"impact": ["custodyCrypto", "transferCrypto"]
},
"fullSsn": {
"status": "rejected",
"impact": ["custodyCrypto"]
},
"ssnLast4": {
"status": "pending",
"impact": ["custodyCrypto"]
},
"sourceOfFunds": { "status": "due" },
"citizenship": { "status": "due" },
"tos": {
"status": "due",
"impact": ["transferFiat"],
"tosVersions": [
{
"versionId": "us_individual_2026-05-29",
"languages": ["en"],
"url": "https://docs.cdp.coinbase.com/legal/terms/us_individual_2026-05-29"
}
]
},
"taxAttestation": {
"status": "due",
"impact": ["transferFiat"],
"taxForms": ["us_w9"]
}
}
createdAt
string<date-time>
read-only

Timestamp when the customer was created.

Example:

"2026-01-10T14:25:00Z"

updatedAt
string<date-time>
read-only

Timestamp when the customer was last updated.

Example:

"2026-01-10T14:30:00Z"

individual
object

Individual customer data returned on read — the individual object on Get / Create / Update Customer responses. Only contact-identity fields are echoed back; every other field accepted on the IndividualInput object (address, ssnLast4, dateOfBirth, fullSsn, citizenship, phoneNumber, and the CDD fields) is ingestion-only and never returned.

Example:
{
"firstName": "Jane",
"lastName": "Doe",
"email": "jane.doe@example.com"
}
projectIds
string<uuid>[]

The project IDs that this customer is associated with.

The ID of the Project, a UUID v4.

Pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$
Example:
[]
tosAcceptances
object[]

Terms of Service acceptances recorded for the customer.

Example:
[
{
"versionId": "us_individual_2026-05-29",
"language": "en",
"acceptedAt": "2026-04-10T12:00:00Z"
}
]