curl --request GET \
--url https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements \
--header 'x-api-key: <api-key>'import requests
url = "https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements', 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-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "7f3d9c2a-5b1e-4c8d-9a6f-0e2b4d6c8a10",
"company_id": "c0a8012e-4d3b-4a6e-8f1b-1a2b3c4d5e6f",
"provider": "CELCOIN",
"type": "IDENTITY_DOCUMENT",
"subject_document_number": "81146431023",
"subject_role": "CONTACT",
"origin": "BASE",
"description": null,
"status": "PENDING",
"accepted_document_types": [
"CNH_DIGITAL",
"CNH_FRONT",
"CNH_BACK",
"RG_FRONT",
"RG_BACK",
"RNE_FRONT",
"RNE_BACK"
],
"satisfied_by": {
"onboarding_document_ids": [
"9c1e7b3a-2d4f-4a6b-8c0d-5e7f9a1b3c2d"
],
"biometric_verification_id": null,
"answer": null
},
"waived_at": null,
"created_at": "2026-10-09T12:00:00.000Z",
"updated_at": "2026-10-09T12:00:00.000Z"
}
]
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation error",
"status": 400,
"details": {
"issues": [
{
"field": "email",
"type": "REQUIRED",
"message": "Field 'email' is required",
"value": "invalid_value",
"constraints": {
"min": 18,
"max": 120
}
}
]
},
"path": "/companies",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Authentication required to access this resource",
"status": 401,
"details": {
"reason": "Invalid API key"
},
"path": "/companies/me",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "AUTHORIZATION_ERROR",
"message": "You need 'admin' permissions to access this resource",
"status": 403,
"path": "/companies",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Company with ID '123' not found",
"status": 404,
"path": "/companies/me",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "An unexpected error occurred",
"status": 500,
"path": "/companies",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}List onboarding requirements
Requires the merchant.onboarding-requirement.list permission.
What the merchant must meet at provider before it activates there, one row per requirement, each with a
status derived at read time from the evidence Rinne holds: PENDING with nothing usable, SATISFIED
with satisfied_by naming the documents, the biometric verification or the answer that meets it,
REJECTED when the only evidence is one the provider refused (a new upload, capture or answer moves it
on), and WAIVED when staff waived it or the company’s shape no longer calls for it. The provider’s base
set is reconciled on every read, so a change of shape adds, waives or restores BASE rows here; rows of
origin PROVIDER_REQUEST and STAFF arrive from a provider’s rejection review and from staff.
A document requirement lists in accepted_document_types the types that meet it at this provider;
IDENTITY_DOCUMENT takes a CNH_DIGITAL alone or the front and back of one identity document. A row
still pending may be met by a document another organization already had validated for the same person
or company, when that organization shares its documents: the read creates a SHARED document for the merchant
and onboarding-document.status-changed reports it.
provider must offer company onboarding (CELCOIN, and CAPPTA, which asks for nothing up front); any other answers 400 on provider.
curl --request GET \
--url https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements \
--header 'x-api-key: <api-key>'import requests
url = "https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements"
headers = {"x-api-key": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-api-key': '<api-key>'}};
fetch('https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements', 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-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"x-api-key: <api-key>"
],
]);
$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-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-api-key", "<api-key>")
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-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements")
.header("x-api-key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api-sandbox.rinne.com.br/core/v1/merchants/{merchantId}/onboarding-requirements")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-api-key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "7f3d9c2a-5b1e-4c8d-9a6f-0e2b4d6c8a10",
"company_id": "c0a8012e-4d3b-4a6e-8f1b-1a2b3c4d5e6f",
"provider": "CELCOIN",
"type": "IDENTITY_DOCUMENT",
"subject_document_number": "81146431023",
"subject_role": "CONTACT",
"origin": "BASE",
"description": null,
"status": "PENDING",
"accepted_document_types": [
"CNH_DIGITAL",
"CNH_FRONT",
"CNH_BACK",
"RG_FRONT",
"RG_BACK",
"RNE_FRONT",
"RNE_BACK"
],
"satisfied_by": {
"onboarding_document_ids": [
"9c1e7b3a-2d4f-4a6b-8c0d-5e7f9a1b3c2d"
],
"biometric_verification_id": null,
"answer": null
},
"waived_at": null,
"created_at": "2026-10-09T12:00:00.000Z",
"updated_at": "2026-10-09T12:00:00.000Z"
}
]
}{
"error": {
"code": "VALIDATION_ERROR",
"message": "Validation error",
"status": 400,
"details": {
"issues": [
{
"field": "email",
"type": "REQUIRED",
"message": "Field 'email' is required",
"value": "invalid_value",
"constraints": {
"min": 18,
"max": 120
}
}
]
},
"path": "/companies",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "AUTHENTICATION_ERROR",
"message": "Authentication required to access this resource",
"status": 401,
"details": {
"reason": "Invalid API key"
},
"path": "/companies/me",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "AUTHORIZATION_ERROR",
"message": "You need 'admin' permissions to access this resource",
"status": 403,
"path": "/companies",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "Company with ID '123' not found",
"status": 404,
"path": "/companies/me",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "An unexpected error occurred",
"status": 500,
"path": "/companies",
"timestamp": "2023-12-01T10:00:00.000Z",
"requestId": "req_123456789"
}
}Authorizations
Company API key for authentication
Path Parameters
The merchant ID
Query Parameters
The provider whose requirements to read
CELCOIN, CAPPTA Response
The requirements, oldest first
The requirements of a company at one provider
Show child attributes
Show child attributes

