Submits the data collected by your own form together with the identification documents encoded in base64. The request is accepted with 202 Accepted and the analysis runs asynchronously, so keep polling the status endpoint until the journey is finished.
| Time | Status | User Agent | |
|---|---|---|---|
Retrieving recent requests… | |||
Endpoint
POST /v3/onboarding/{onboarding_requisition_id}/submit
This is the third step of the own-form flow, after POST /v3/onboarding/form and a successful liveness. It can only be called after the end user has passed the liveness (proof of life), and it can only be called once per onboarding requisition.
The response is returned as soon as the payload is accepted and stored — it does not mean the onboarding was approved. The analysis runs in background; keep polling the onboarding status endpoint (GET /v3/onboarding/10482) until current_step becomes DONE.
Headers
| Parameter | Type | Description | Required or Optional | Example |
|---|---|---|---|---|
| X-Onboarding-Token | String | The access_token returned when the onboarding requisition was created. It authorizes every call made against that requisition. A missing or wrong token returns 404. | required | 8bR3xTqZ0pW7yLm2nV4cJdH6sKfA1gQeUoI9tXyZbCk |
| Content-Type | String | Format of the request body. Must be application/json. | required | application/json |
Path Parameters
| Parameter | Type | Description | Required | Example |
|---|---|---|---|---|
| onboarding_requisition_id | Integer | Identifier of the onboarding requisition returned when the requisition was created. | Yes | 10482 |
Body Details
{
"company": {
"official_name": "Example Company LTDA",
"fantasy_name": "Example Company",
"company_email": "[email protected]",
"phone_number": "11999998888",
"opening_date": "2015-03-10",
"zip_code": "01310100",
"state": "SP",
"city": "Sao Paulo",
"street": "Avenida Paulista",
"neighborhood": "Bela Vista",
"number": "1000",
"complement": "12th floor"
},
"partners": [
{
"name": "Joao da Silva",
"cpf": "11144477735",
"birth_date": "1988-07-21",
"mother_name": "Maria da Silva",
"ownership_pct": 100,
"is_legal_representative": true
}
],
"documents": [
{
"type": "RG_FRONT",
"partner_cpf": "11144477735",
"filename": "id-front.jpg",
"mime_type": "image/jpeg",
"content": "iVBORw0KGgoAAAANSUhEUgAA..."
},
{
"type": "COMPANY_SOCIAL_CONTRACT",
"partner_cpf": null,
"filename": "social-contract.pdf",
"mime_type": "application/pdf",
"content": "JVBERi0xLjQKJeLjz9MK..."
}
],
"accepted_terms": true
}| Field | Type | Description | Required or Optional |
|---|---|---|---|
| company | Object | Company details collected by your form. Required for PJ onboarding and not allowed for PF onboarding. Only the fields you send are updated; omitted fields keep the value already on the requisition. | required for PJ / forbidden for PF |
| partners | Array | List of the people declared in the form. At least one item. For PF it must contain exactly one item. | required |
| documents | Array | List of files encoded in base64. At least one item. | required |
| accepted_terms | Boolean | Confirmation that the end user accepted the terms in your form. Must be true; any other value is rejected with 400. | required |
company
Every field of the company object is individually optional — send what your form collected. The object itself is required for PJ onboarding.
| Field | Type | Description | Required or Optional |
|---|---|---|---|
| official_name | String | Registered legal name of the company. Maximum 255 characters. | optional |
| fantasy_name | String | Trade name of the company. Maximum 255 characters. | optional |
| company_email | String | Contact email of the company. Must be a valid email address. | optional |
| phone_number | String | Contact phone number. Maximum 20 characters. | optional |
| opening_date | Date | Date the company was opened. Format YYYY-MM-DD. | optional |
| zip_code | String | Postal code of the company address. Maximum 10 characters. | optional |
| state | String | State abbreviation of the company address. Maximum 2 characters. | optional |
| city | String | City of the company address. Maximum 100 characters. | optional |
| street | String | Street of the company address. Maximum 255 characters. | optional |
| neighborhood | String | Neighborhood of the company address. Maximum 100 characters. | optional |
| number | String | Street number of the company address. Maximum 20 characters. | optional |
| complement | String | Address complement (floor, unit, reference). Maximum 100 characters. | optional |
partners
Each item of the partners array describes one person declared in the form.
| Field | Type | Description | Required or Optional |
|---|---|---|---|
| name | String | Full name of the person. Maximum 255 characters. | required |
| cpf | String | CPF of the person. The mask is stripped and the check digits are validated; an invalid CPF is rejected with 400 (message partners[0].cpf: Invalid CPF). Must be unique within the array. | required |
| birth_date | Date | Date of birth. Format YYYY-MM-DD. | optional |
| mother_name | String | Mother's full name. Maximum 100 characters. | optional |
| father_name | String | Father's full name. Maximum 100 characters. | optional |
| rg | String | Identity card number. Maximum 20 characters. | optional |
| rg_issuing_authority | String | Authority that issued the identity card. Maximum 10 characters. | optional |
| rg_issue_state | String | State that issued the identity card. Maximum 2 characters. | optional |
| rg_issue_date | Date | Issue date of the identity card. Format YYYY-MM-DD. | optional |
| birth_place | String | City of birth. Maximum 255 characters. | optional |
| birth_state | String | State of birth. Maximum 2 characters. | optional |
| nationality | String | Nationality of the person. Maximum 50 characters. | optional |
| String | Contact email of the person. Must be a valid email address. | optional | |
| phone_number | String | Contact phone number. Maximum 20 characters. | optional |
| ownership_pct | Decimal | Ownership percentage held by the person, from 0 to 100. For PJ the values of all partners must sum exactly 100. For PF send 100. | required |
| is_legal_representative | Boolean | Marks the person who legally represents the company. For PJ exactly one partner must have it as true, and that partner's CPF must match representative_document from creation. Defaults to false when omitted. | optional |
documents
Each item of the documents array carries one file encoded in base64.
| Field | Type | Description | Required or Optional |
|---|---|---|---|
| type | String | Type of the file. Canonical values: IMAGE_FRONT, IMAGE_BACK, SELFIE, COMPANY_SOCIAL_CONTRACT, OTHER. Front/back aliases are also accepted and mapped internally — see Document types below. The comparison is case-insensitive. | required |
| partner_cpf | String | CPF of the person the file belongs to. Required for IMAGE_FRONT, IMAGE_BACK and SELFIE, and the CPF must match one of the partners sent in the same request. Send null (or omit it) for COMPANY_SOCIAL_CONTRACT and OTHER, which belong to the requisition and not to a person. | required for personal files |
| filename | String | Original file name, including the extension. Maximum 255 characters. | required |
| mime_type | String | Media type of the file, such as image/jpeg, image/png or application/pdf. Maximum 100 characters. | required |
| content | String | File content as raw base64, without the data: prefix. A value starting with data: is rejected with 400 (message documents[0].content: content must be raw base64, without the data: prefix), and content that is not valid base64 is also rejected with 400. | required |
Document types:
| Value | Belongs to | Description |
|---|---|---|
IMAGE_FRONT | Partner | Front of the identification document. Mandatory for every partner sent. |
IMAGE_BACK | Partner | Back of the identification document. Optional — single-face documents have no back. |
SELFIE | Partner | Photo of the person's face. Optional; the liveness already captures one. |
COMPANY_SOCIAL_CONTRACT | Requisition | Company incorporation document. Mandatory for PJ onboarding. |
OTHER | Requisition | Any additional supporting file, such as a proof of address. |
Front and back also accept the aliases below. They are stored as IMAGE_FRONT or IMAGE_BACK; the rest of the rules (partner_cpf, mandatory front per partner) apply to the mapped type. An unknown value is rejected with 422.
| Alias (case-insensitive) | Stored as |
|---|---|
RG_FRONT | IMAGE_FRONT |
CNH_FRONT | IMAGE_FRONT |
RNE_FRONT | IMAGE_FRONT |
CNH | IMAGE_FRONT |
PASSPORT | IMAGE_FRONT |
RG_BACK | IMAGE_BACK |
CNH_BACK | IMAGE_BACK |
RNE_BACK | IMAGE_BACK |
Request Examples
PJ onboarding (company with two partners):
POST /v3/onboarding/10482/submit
X-Onboarding-Token: 8bR3xTqZ0pW7yLm2nV4cJdH6sKfA1gQeUoI9tXyZbCk
Content-Type: application/json
{
"company": {
"official_name": "Example Company LTDA",
"fantasy_name": "Example Company",
"company_email": "[email protected]",
"phone_number": "11999998888",
"opening_date": "2015-03-10",
"zip_code": "01310100",
"state": "SP",
"city": "Sao Paulo",
"street": "Avenida Paulista",
"neighborhood": "Bela Vista",
"number": "1000",
"complement": "12th floor"
},
"partners": [
{
"name": "Joao da Silva",
"cpf": "111.444.777-35",
"birth_date": "1988-07-21",
"mother_name": "Maria da Silva",
"father_name": "Jose da Silva",
"rg": "123456789",
"rg_issuing_authority": "SSP",
"rg_issue_state": "SP",
"rg_issue_date": "2010-02-15",
"birth_place": "Sao Paulo",
"birth_state": "SP",
"nationality": "Brazilian",
"email": "[email protected]",
"phone_number": "11988887777",
"ownership_pct": 60,
"is_legal_representative": true
},
{
"name": "Ana Souza",
"cpf": "529.982.247-25",
"birth_date": "1991-11-02",
"mother_name": "Clara Souza",
"email": "[email protected]",
"phone_number": "11977776666",
"ownership_pct": 40,
"is_legal_representative": false
}
],
"documents": [
{
"type": "RG_FRONT",
"partner_cpf": "111.444.777-35",
"filename": "joao-id-front.jpg",
"mime_type": "image/jpeg",
"content": "iVBORw0KGgoAAAANSUhEUgAA..."
},
{
"type": "RG_BACK",
"partner_cpf": "111.444.777-35",
"filename": "joao-id-back.jpg",
"mime_type": "image/jpeg",
"content": "iVBORw0KGgoAAAANSUhEUgBB..."
},
{
"type": "IMAGE_FRONT",
"partner_cpf": "529.982.247-25",
"filename": "ana-id-front.jpg",
"mime_type": "image/jpeg",
"content": "iVBORw0KGgoAAAANSUhEUgCC..."
},
{
"type": "COMPANY_SOCIAL_CONTRACT",
"partner_cpf": null,
"filename": "social-contract.pdf",
"mime_type": "application/pdf",
"content": "JVBERi0xLjQKJeLjz9MK..."
},
{
"type": "OTHER",
"partner_cpf": null,
"filename": "proof-of-address.pdf",
"mime_type": "application/pdf",
"content": "JVBERi0xLjQKJeHqz9MK..."
}
],
"accepted_terms": true
}PF onboarding (individual, no company object):
POST /v3/onboarding/10483/submit
X-Onboarding-Token: 4kQ2wYpN8zR1vBc6mXsLd0TgHj7fEa3UiOy5nPzWqRs
Content-Type: application/json
{
"partners": [
{
"name": "Joao da Silva",
"cpf": "111.444.777-35",
"birth_date": "1988-07-21",
"mother_name": "Maria da Silva",
"rg": "123456789",
"rg_issuing_authority": "SSP",
"rg_issue_state": "SP",
"birth_place": "Sao Paulo",
"birth_state": "SP",
"nationality": "Brazilian",
"email": "[email protected]",
"phone_number": "11988887777",
"ownership_pct": 100,
"is_legal_representative": true
}
],
"documents": [
{
"type": "IMAGE_FRONT",
"partner_cpf": "111.444.777-35",
"filename": "id-front.jpg",
"mime_type": "image/jpeg",
"content": "iVBORw0KGgoAAAANSUhEUgAA..."
},
{
"type": "IMAGE_BACK",
"partner_cpf": "111.444.777-35",
"filename": "id-back.jpg",
"mime_type": "image/jpeg",
"content": "iVBORw0KGgoAAAANSUhEUgBB..."
}
],
"accepted_terms": true
}Response Details
HTTP 202 Accepted
{
"worked": true,
"onboarding_requisition_id": 10482,
"submitted_at": "2026-09-15T18:42:07.512000Z"
}| Field | Type | Description |
|---|---|---|
| worked | Boolean | Always true for successful requests. |
| onboarding_requisition_id | Integer | Identifier of the onboarding requisition the form was submitted for. |
| submitted_at | DateTime | Date and time the form was accepted, in UTC-0 (ISO 8601). The same value is returned by the status endpoint. |
202 Accepted means the payload was validated, stored and accepted for analysis — it is not an approval. From this point the requisition moves to current_step: PROCESSING; poll the onboarding status endpoint (GET /v3/onboarding/10482) until current_step becomes DONE and read status_internal (APPROVED or REJECTED) for the final outcome.
Error Responses
| HTTP Code | Error Message | Description |
|---|---|---|
| 400 | company is required for PJ onboarding. | A PJ onboarding was submitted without the company object. |
| 400 | company is not allowed for PF onboarding. | A PF onboarding was submitted with a company object. Remove it from the payload. |
| 400 | PF onboarding takes exactly one partner, got 2. | A PF onboarding must declare exactly one person in partners. |
| 400 | partner cpf must match the requisition document. | On PF, the CPF of the single partner is different from the document used to create the onboarding requisition. |
| 400 | partners ownership_pct must sum 100, got 80. | On PJ, the ownership_pct values of all partners must sum exactly 100. |
| 400 | exactly one partner must be the legal representative, got 2. | On PJ, exactly one partner must have is_legal_representative as true. |
| 400 | duplicated partner cpf. | The same CPF appears more than once in partners. Each person may be declared only once. |
| 400 | document of type SELFIE requires a partner cpf. | A document of type IMAGE_FRONT, IMAGE_BACK or SELFIE was sent without a partner_cpf, or with a partner_cpf that is not a valid CPF (an invalid value is discarded during normalisation and treated as absent). |
| 400 | document references unknown partner cpf 52998224725. | The partner_cpf of a document does not match any CPF declared in partners in the same request. |
| 400 | missing COMPANY_SOCIAL_CONTRACT document. | A PJ onboarding was submitted without the company incorporation document. |
| 400 | partner 11144477735 is missing IMAGE_FRONT. | Every partner declared in the payload needs a front-of-ID image. Add an IMAGE_FRONT document with that partner_cpf. |
| 400 | documents.0.content is not valid base64. | The content of the document at that position could not be decoded. Send raw base64 without the data: prefix and without truncating the value. |
| 400 | liveness document does not match the legal representative cpf. | The person who passed the liveness is not the partner marked as legal representative (PJ) or the single declared partner (PF). |
| 400 | Liveness did not identify a partner to match against. | The liveness did not record which person completed it, so the form cannot be tied to it. Reconcile the verdict with the liveness refresh endpoint before submitting again. |
| 400 | liveness did not store a selfie for the legal representative. | The liveness finished without a usable photo of that person. Reconcile the verdict with the liveness refresh endpoint, or start a new liveness attempt. |
| 400 | partners[0].cpf: Invalid CPF | Request validation failed. The message is <field path>: <reason>. Causes: an invalid CPF, accepted_terms different from true, content starting with the data: prefix, ownership_pct outside 0-100, an empty partners/documents array, a missing required field, a field longer than its maximum length, or an unknown documents[].type. |
| 404 | Onboarding requisition not found. | The onboarding requisition does not exist, or the X-Onboarding-Token header is missing or does not match the requisition. |
| 409 | Form already submitted. | The form was already submitted for this requisition. A form can only be submitted once; poll the status endpoint to follow the analysis. |
| 412 | Liveness has not passed yet. | The end user has not completed the proof of life. Wait until liveness_status is PASSED before submitting the form. |
| 413 | id-front.jpg exceeds 8388608 bytes. | A single file is larger than 8 MB once decoded. Compress or resize the file before encoding it. |
| 413 | documents exceed 26214400 bytes in total. | The sum of all decoded files in the request is larger than 25 MB. Reduce the number or size of the files. |
Business Rules
Preconditions:
- The liveness must have passed. While
liveness_statusisPENDING,FAILEDor was never started, the call is rejected with412. - The form can be submitted only once per onboarding requisition. A second call is rejected with
409, even if the first payload had a mistake. - The payload is validated as a whole before anything is stored: when any rule fails, nothing is persisted and you can fix the payload and call again.
PJ onboarding:
- The
companyobject is required. - The
ownership_pctof all partners must sum exactly 100. - Exactly one partner must have
is_legal_representativeastrue, and that partner's CPF must be the samerepresentative_documentsent when the requisition was created. - A
COMPANY_SOCIAL_CONTRACTdocument is required. - The person who passed the liveness must be the partner marked as legal representative.
PF onboarding:
- The
companyobject must not be sent. partnersmust contain exactly one person.- The CPF of that person must be the same document used to create the onboarding requisition.
- The person who passed the liveness must be that same person.
Partners:
- Each CPF is validated (mask is stripped and check digits verified) and must be unique within the request.
- A person who already exists on the requisition — the legal representative created from
representative_documentwho completed the liveness — is completed with the data you send, not duplicated.
Documents:
- Every partner declared in
partnersmust have anIMAGE_FRONTdocument (or an alias that maps to it, such asRG_FRONT,CNHorPASSPORT). The back of the document is optional, since single-face documents such as a digital driver's licence or a passport have no back. IMAGE_FRONT,IMAGE_BACKandSELFIEmust carry apartner_cpf, and that CPF must match one of the partners in the same request. The same applies after an alias is mapped to front or back.COMPANY_SOCIAL_CONTRACTandOTHERare attached to the requisition whenpartner_cpfisnullor omitted. If you do send apartner_cpfthat matches one of the partners, the file is attached to that person instead; the request is not rejected.contentmust be raw base64, without thedata:prefix. Line breaks, spaces and missing=padding inside the value are tolerated and normalised before decoding.
Limits:
- Maximum 8 MB per file, measured after decoding the base64.
- Maximum 25 MB for all files of the request combined, measured after decoding.
- Requests above either limit are rejected with
413and no file is stored.
Important Notes:
- The response is returned immediately with
202 Accepted; the analysis of the data and documents runs asynchronously. 202 Acceptedconfirms only that the submission was received — it is not an approval decision.- Keep polling the onboarding status endpoint (
GET /v3/onboarding/10482) untilcurrent_stepisDONE. The final outcome is instatus_internal:APPROVEDorREJECTED. - Fields of the
companyobject that you omit keep the value already registered on the requisition; they are not erased. - The CPF can be sent with or without a mask —
111.444.777-35and11144477735are treated as the same document, inpartnersand inpartner_cpf.
400The form data or the attached documents did not pass validation
404Onboarding requisition not found, or the access token is missing or incorrect
409The form was already submitted for this requisition
412The liveness verification has not passed yet
413A document exceeds 8 MB, or the documents exceed 25 MB in total
422Validation error - a field is missing or has an invalid value
