curl --request POST \
--url https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "+12055555555",
"userIdType": "phone_number",
"fields": {
"ssnLast4": "5678",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
}
}
}
'import requests
url = "https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade"
payload = {
"userId": "+12055555555",
"userIdType": "phone_number",
"fields": {
"ssnLast4": "5678",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '+12055555555',
userIdType: 'phone_number',
fields: {ssnLast4: '5678', dateOfBirth: {day: '15', month: '08', year: '1990'}}
})
};
fetch('https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade', 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/onramp/limits/upgrade",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '+12055555555',
'userIdType' => 'phone_number',
'fields' => [
'ssnLast4' => '5678',
'dateOfBirth' => [
'day' => '15',
'month' => '08',
'year' => '1990'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade"
payload := strings.NewReader("{\n \"userId\": \"+12055555555\",\n \"userIdType\": \"phone_number\",\n \"fields\": {\n \"ssnLast4\": \"5678\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"+12055555555\",\n \"userIdType\": \"phone_number\",\n \"fields\": {\n \"ssnLast4\": \"5678\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"+12055555555\",\n \"userIdType\": \"phone_number\",\n \"fields\": {\n \"ssnLast4\": \"5678\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"errorType": "invalid_request",
"errorMessage": "Invalid user identifier or fields."
}{
"errorType": "unauthorized",
"errorMessage": "The request is not properly authenticated."
}{
"errorType": "rate_limit_exceeded",
"errorMessage": "Rate limit exceeded."
}{
"errorType": "internal_server_error",
"errorMessage": "An internal server error occurred. Please try again later."
}Request limit upgrade
Requests a limit upgrade for an onramp user by submitting identity information. Only phone number is currently supported as a userId.
The verification process is asynchronous. After calling this endpoint, use the Get Onramp User Limits endpoint to check the status in the limitUpgradeOptions array.
Prerequisites:
- The phone number must have been previously verified by your app via OTP. - Upgrades may not be available until a certain number of successful transactions by the user.
Supported fields:
ssnLast4: Last 4 digits of the Social Security Number (no dashes or spaces).dateOfBirth: Date of birth (day, month, year as zero-padded strings).
curl --request POST \
--url https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"userId": "+12055555555",
"userIdType": "phone_number",
"fields": {
"ssnLast4": "5678",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
}
}
}
'import requests
url = "https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade"
payload = {
"userId": "+12055555555",
"userIdType": "phone_number",
"fields": {
"ssnLast4": "5678",
"dateOfBirth": {
"day": "15",
"month": "08",
"year": "1990"
}
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
userId: '+12055555555',
userIdType: 'phone_number',
fields: {ssnLast4: '5678', dateOfBirth: {day: '15', month: '08', year: '1990'}}
})
};
fetch('https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade', 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/onramp/limits/upgrade",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'userId' => '+12055555555',
'userIdType' => 'phone_number',
'fields' => [
'ssnLast4' => '5678',
'dateOfBirth' => [
'day' => '15',
'month' => '08',
'year' => '1990'
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade"
payload := strings.NewReader("{\n \"userId\": \"+12055555555\",\n \"userIdType\": \"phone_number\",\n \"fields\": {\n \"ssnLast4\": \"5678\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"userId\": \"+12055555555\",\n \"userIdType\": \"phone_number\",\n \"fields\": {\n \"ssnLast4\": \"5678\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n }\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cdp.coinbase.com/platform/v2/onramp/limits/upgrade")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"userId\": \"+12055555555\",\n \"userIdType\": \"phone_number\",\n \"fields\": {\n \"ssnLast4\": \"5678\",\n \"dateOfBirth\": {\n \"day\": \"15\",\n \"month\": \"08\",\n \"year\": \"1990\"\n }\n }\n}"
response = http.request(request)
puts response.read_body{
"errorType": "invalid_request",
"errorMessage": "Invalid user identifier or fields."
}{
"errorType": "unauthorized",
"errorMessage": "The request is not properly authenticated."
}{
"errorType": "rate_limit_exceeded",
"errorMessage": "Rate limit exceeded."
}{
"errorType": "internal_server_error",
"errorMessage": "An internal server error occurred. Please try again later."
}Authorizations
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.
Body
Request to request a limits upgrade for a user.
The user identifier value. For phone_number type, this must be in E.164 format.
"+12055555555"
The type of user identifier:
phone_number: A phone number in E.164 format associated with an onramp user.
phone_number "phone_number"
Populate the properties that correspond to the fields array from the user's OnrampLimitUpgradeOption.
Show child attributes
Show child attributes
{ "ssnLast4": "5678", "dateOfBirth": { "day": "15", "month": "08", "year": "1990" } }
Response
Limit upgrade request accepted.
Was this page helpful?