Overview
This page applies only to partners whose Ripio account is in Brazil. What decides it is your account’s country, not the customer’s: a Brazilian national operating through a partner in Argentina is never asked for an investor profile, while every customer of a Brazilian account is. Accounts in Argentina, Colombia and Mexico are not affected by anything described here. Resolução BCB nº 520/2025 (arts. 58 and 59) requires Ripio to know the risk profile of every customer operating through a Brazilian account — their familiarity with virtual assets, financial goals and risk tolerance — before they operate, and to keep it on record. Ripio collects it through a short investor profile questionnaire: five single-choice questions whose answers produce one of three profiles. When the investor profile is enabled for your account, a customer cannot create on-ramp or off-ramp orders or sessions, or register a destination account, without a valid profile. As an API partner, you are responsible for showing the questionnaire to your customers and submitting their answers.Partners on the Ramps widget do not implement any of this: the widget presents the questionnaire itself. See Investor profile in the widget docs.
When it applies
The investor profile is enabled by Ripio per account, and only for accounts whose country is Brazil. Your widget integration and your API integration use different accounts, so each one is enabled on its own. Enforcement starts on October 30, 2026 at 00:00 Brasília time (2026-10-30T03:00:00Z). Until then the questionnaire is already available and the customer is asked for it (REQUIRED_SOON), but nothing is blocked: use that window to collect profiles from your existing customers before they hit an error. An account enabled after that date is enforced from day one.
Where it fits in the flow
The only hard requirement is that the profile exists before the first order or session. The recommended place is right after KYC, which is where the widget asks for it:20014.
This applies even if your customers verify their identity in Ripio’s hosted KYC: the hosted flow does not include the questionnaire, so it is still yours to collect via the API.
20039), then KYC, then the investor profile (20100). Fix them in the order you receive them.
Statuses
Get Investor Profile Status tells you where a customer stands:
Only
REQUIRED and EXPIRED block. deadline is set only for REQUIRED_SOON and EXPIRING_SOON, the two statuses where there is something to say “before” about — use it in your copy (“answer before …”).
Collecting the profile
1
Check whether the customer needs to answer
REQUIRED and EXPIRED; offer it, with the option to postpone, for REQUIRED_SOON and EXPIRING_SOON.→ Get Investor Profile Status2
Fetch the active questionnaire
version: you send it back in the next step.→ Get Investor Questionnaire3
Show it and submit the answers
Show every question with its answers, let the customer pick exactly one per question, and submit them all at once:The response (
201) is the same as the status call, now VALID, with the resulting profile. The customer can operate right away.→ Submit Investor ProfileThe resulting profile
profile is one of CONSERVATIVE, MODERATE or AGGRESSIVE. Each answer comes back with the texts of the questionnaire version the customer answered, so the record stands on its own even after the questionnaire changes. Scores are not exposed.
What you do with the profile is up to you: showing it to the customer is a good practice, but nothing in the API requires it, and the profile does not restrict which operations the customer can make — it only has to exist and be valid.
Language
The API has no language parameter: question, answer and profile texts are always in Portuguese. Every one of them also carries a stable identifier —questionId, answerId and profile — so you can translate by id into your own app’s languages, and fall back to the Portuguese text for an id you do not know yet.
Ids do not change within a questionnaire version. A change to the questionnaire is published as a new version, which may bring new ids.
Validity and renewal
- A profile is valid for one year from the moment it is submitted (
validUntil). - During its last 30 days the status is
EXPIRING_SOON. The customer can still operate; it is the window to ask them to renew without interrupting them. - Once
validUntilpasses, the status isEXPIRED: the customer is blocked until they answer again. - The questionnaire can be answered again at any time. Every submission creates a new profile valid for one more year; earlier ones are kept as history, and the status call always shows the latest.
When the questionnaire changes
Ripio may publish a new version of the questionnaire. Only the active version can be answered, so a customer who fetched version1 and submits after version 2 went live gets 20096:
version. A new version does not invalidate existing profiles: they remain valid until their own validUntil.
Operating without a valid profile: 20100
When the profile is enforced and the customer has none, or it expired, these endpoints answer 400 with code 20100:
message carries the customerId you sent. Send the customer through the questionnaire, then retry the same request.
Registering a destination account (a PIX key) is gated like an operation because it is the first step of an off-ramp: a customer without a valid profile cannot add one. That includes the replacement account for Change Fiat Account and Reprocess — the reprocess itself is not blocked, but the new account it points to has to be created first.
Quotes, the deposit account, KYC, refunds, Sell and Pay and the read endpoints are not affected: a customer without a profile can still get a quote or check their history.
Keeping profiles current
There are no webhooks for the investor profile: nothing tells you that a profile is about to expire or has expired. Two ways to stay ahead of it:- Check before operating. Call Get Investor Profile Status when the customer is about to buy or sell, and show the questionnaire if needed. This is what the widget does.
- Schedule a reminder. Store
validUntilwhen you submit a profile, and ask the customer to renew in the 30 days before it — theEXPIRING_SOONwindow — so they never hit20100.
Testing in sandbox
The investor profile is enabled per account in sandbox too. Ask the Ripio team to enable it on your sandbox account; until then, the status call readsNOT_REQUIRED and submissions are refused with 20099. Get Investor Questionnaire does not depend on it: it answers for any Brazilian account, so you can build the questionnaire screens before the feature is enabled.
Once enabled, you can go through the whole flow — fetch the questionnaire, submit it, see VALID, and get 20100 on a customer who has not answered. Expiry cannot be simulated: a profile submitted today stays VALID for eleven months, so test EXPIRING_SOON and EXPIRED against the examples on Get Investor Profile Status.