onboarding_url, and for almost all of them it is Rinne’s onboarding link: a Rinne page, mobile-first and in Portuguese, where the merchant’s contact supplies whatever the provider still needs. You send it to the contact or embed it in your app; Rinne does the rest and submits the affiliation the moment the last item arrives. The exception is an attempt that was already on the provider’s own page, which keeps that page until it finishes (see Use onboarding_url as it is).
The page runs on the same building blocks as the API. Anything collected through it shows up in your integration at once, and anything you supply through the API disappears from the page.

- The contact confirms their CPF

- What is pending, in any order

- One screen for each item
What the contact sees
Opens the link and confirms their CPF
Sees what is pending, and what was already received
Completes each item, in any order
- Documents: a photo taken in the page or a file for each one (PDF, PNG or JPEG, up to 10 MB), with one image per side of an identity document.
- Biometric verification: a selfie with liveness check on the verification partner’s own capture page, which the link opens in a new tab. The link updates by itself when the result arrives, and the contact can go on with the other items meanwhile.
- Questions and evidence: a text answer to a provider’s question, or an explanation with the files that back it.
Continues on the phone, if they want
Done
onboarding-document.status-changed and biometric-verification.status-changed for each item, then affiliation.status-changed as the affiliation moves to PENDING, PENDING_APPROVAL and on.
After a review: a refused item comes back, a new request appears

Everything sent: the link's job is done
Get the link
The link exists while the affiliation isWAITING_DOCUMENTS. Where it reaches you depends on how the affiliation got there:
affiliation.created handler that forwards the link is in the webhooks guide.
Send the link
Rinne does not deliver the link: you send it to the merchant’s contact through the channel you already use with them, such as e-mail, WhatsApp or your app’s inbox. Only the person registered as the merchant’s contact can open it, so a forwarded link shows nothing to anyone else.Embed the link in your app
You can open the link inside your own site or app instead of sending it. Two things decide whether every step works there:- New windows. The biometric step opens the verification partner’s capture in a new tab, because the partner’s page does not run inside a frame, and resumes by itself when the contact comes back. The frame or webview that holds the page must let it open that window and hand it back to the page.
- The camera, for the photos of the identity document. Without it the contact can still choose a file.
- Web (iframe)
- iOS (WKWebView)
- Android (WebView)
allow="camera" delegates the camera to the frame, and your page’s own Permissions-Policy must not block it. A frame with no sandbox attribute opens new tabs as is; a sandboxed one needs allow-popups allow-popups-to-escape-sandbox on top of what your page already grants it.Link lifetime and reissue
A link works untilonboarding_url_expires_at; read that field rather than assuming a lifetime. It never outlives the affiliation’s own deadline: an affiliation that waits 30 days in WAITING_DOCUMENTS before its first submission becomes CANCELLED with cancellation_reason EXPIRED, and its link stops working with it. Once the affiliation leaves WAITING_DOCUMENTS, onboarding_url is null.
Issue a new link when the contact lost it, it leaked, it went to the wrong person, or it expired before the merchant finished. The previous link stops working at once, together with every visit opened from it; the affiliation, its requirements and everything already sent are kept.
onboarding_url_expires_at in the response is always the effective date.POST /v1/affiliations/{id}/onboarding-link. Both routes require the affiliation.edit permission (merchant.affiliation.edit on the merchant route). Full contract: Reissue the onboarding link.
Security and privacy
Only the registered contact gets in
Only the registered contact gets in
Received items are receipts, not files
Received items are receipts, not files
Dead links reveal nothing
Dead links reveal nothing
Sessions are short
Sessions are short
No codes by SMS or e-mail
No codes by SMS or e-mail
Appearance
The page carries Rinne’s brand and names your organization in text, so the contact knows who asked for the registration. It shows no organization logo. Three things can be set for your organization by Rinne support, at your request:- An accent colour, one hex value; Rinne’s purple when none is set. A colour too light to carry white text is darkened until it reads at 4.5:1, so a bright colour renders a little darker than configured.
- The header style: light or graphite.
- Whether the page offers Continuar no celular, on by default.
Frequently asked questions
The merchant's contact changed. Does the link still work?
The merchant's contact changed. Does the link still work?
PATCH /v1/merchants/{merchantId} (or PATCH /v1/companies/me for your organization) and the same link opens for the new contact.Can the contact correct the merchant's data on the page?
Can the contact correct the merchant's data on the page?
Does the contact have to finish in one visit?
Does the contact have to finish in one visit?
What happens to items sent after the affiliation was cancelled?
What happens to items sent after the affiliation was cancelled?
Can I skip the link and use only the API?
Can I skip the link and use only the API?
onboarding_url is set, and you can ignore it. Supplying every item through the API satisfies the same requirements. See Build with the API.
