curl --request GET \
--url https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/', 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://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/",
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://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/"
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://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/")
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{
"status": "VALID",
"deadline": null,
"investorProfile": {
"profile": "AGGRESSIVE",
"description": "Você tolera alta volatilidade e possíveis perdas em busca de maior rentabilidade.",
"questionnaireVersion": 1,
"createdAt": "2026-10-01T12:34:56.789012Z",
"validUntil": "2027-10-01T12:34:56.789012Z",
"answers": [
{
"questionId": "familiarity_experience",
"questionText": "Como você descreveria sua experiência e seu conhecimento com ativos virtuais?",
"answerId": "invests_regularly",
"answerText": "Invisto regularmente"
},
{
"questionId": "investment_goal",
"questionText": "Quando você investe, qual é o seu principal objetivo?",
"answerId": "maximize_returns",
"answerText": "Maximizar os ganhos, mesmo correndo algum risco"
},
{
"questionId": "investment_horizon",
"questionText": "Por quanto tempo você pretende manter seus ativos virtuais?",
"answerId": "more_than_3_years",
"answerText": "Mais de 3 anos"
},
{
"questionId": "drawdown_reaction",
"questionText": "Se o seu investimento caísse 30% em um mês, o que você faria?",
"answerId": "buy_more",
"answerText": "Aproveitaria para comprar mais barato"
},
{
"questionId": "savings_allocation",
"questionText": "Que parte das suas economias você pretende destinar a investimentos?",
"answerId": "most_savings",
"answerText": "A maior parte (mais de 50%)"
}
]
}
}Get Investor Profile Status
Brazilian accounts only. Returns whether the customer needs to answer the investor questionnaire, and their latest profile.
Read status to decide what to do: REQUIRED and EXPIRED block orders, sessions and destination accounts (20100); REQUIRED_SOON and EXPIRING_SOON do not block yet, and deadline tells you until when. Accounts the investor profile does not apply to always get NOT_REQUIRED.
The status changes with time — a valid profile becomes EXPIRING_SOON and then EXPIRED — so re-check it instead of storing it. See Investor Profile (Brazil).
curl --request GET \
--url https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/ \
--header 'Authorization: Bearer <token>'import requests
url = "https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/', 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://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/",
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://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/"
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://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://skala-sandbox.ripio.com/api/v1/customers/{customerId}/investorProfile/")
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{
"status": "VALID",
"deadline": null,
"investorProfile": {
"profile": "AGGRESSIVE",
"description": "Você tolera alta volatilidade e possíveis perdas em busca de maior rentabilidade.",
"questionnaireVersion": 1,
"createdAt": "2026-10-01T12:34:56.789012Z",
"validUntil": "2027-10-01T12:34:56.789012Z",
"answers": [
{
"questionId": "familiarity_experience",
"questionText": "Como você descreveria sua experiência e seu conhecimento com ativos virtuais?",
"answerId": "invests_regularly",
"answerText": "Invisto regularmente"
},
{
"questionId": "investment_goal",
"questionText": "Quando você investe, qual é o seu principal objetivo?",
"answerId": "maximize_returns",
"answerText": "Maximizar os ganhos, mesmo correndo algum risco"
},
{
"questionId": "investment_horizon",
"questionText": "Por quanto tempo você pretende manter seus ativos virtuais?",
"answerId": "more_than_3_years",
"answerText": "Mais de 3 anos"
},
{
"questionId": "drawdown_reaction",
"questionText": "Se o seu investimento caísse 30% em um mês, o que você faria?",
"answerId": "buy_more",
"answerText": "Aproveitaria para comprar mais barato"
},
{
"questionId": "savings_allocation",
"questionText": "Que parte das suas economias você pretende destinar a investimentos?",
"answerId": "most_savings",
"answerText": "A maior parte (mais de 50%)"
}
]
}
}Authorizations
Access token obtained via /oauth2/token/. Use as Authorization: Bearer <access_token>.
Path Parameters
Unique identifier for the customer.
Response
Investor profile status retrieved successfully.
Where the customer stands. Only REQUIRED and EXPIRED block operations.
NOT_REQUIRED: the investor profile does not apply to your account (not a Brazilian account, or not enabled).REQUIRED_SOON: no valid profile yet, but enforcement has not started. The customer can still operate untildeadline.REQUIRED: no profile, and it is enforced. Orders, sessions and destination accounts are refused with20100.VALID: valid profile with more than 30 days left.EXPIRING_SOON: valid profile that expires within 30 days. The customer can still operate; ask them to renew beforedeadline.EXPIRED: the latest profile expired. Orders, sessions and destination accounts are refused with20100.
NOT_REQUIRED, REQUIRED_SOON, REQUIRED, VALID, EXPIRING_SOON, EXPIRED "VALID"
When the customer stops being able to operate without answering. Only set for REQUIRED_SOON (the start of enforcement) and EXPIRING_SOON (the profile's expiry, or the start of enforcement if that is later); null otherwise.
null
The customer's latest profile, or null if they never answered. For EXPIRED it is the expired profile, returned for reference. The profile belongs to the person, so it may also be present with NOT_REQUIRED if they answered it through another integration.
Show child attributes
Show child attributes
Was this page helpful?