Skip to main content

Free Movement Account Draft - Legal Entity

The Draft Checking Legal Person flow allows creating an account opening request in two steps:

  1. POST: Creates a draft (rough) with maximum flexibility - accepts from minimal data to complete data
  2. PATCH: Submits the draft for processing, validating completeness of all mandatory fields

Important: This flow is being prepared for integration with Monte Bravo. The field division between POST and PATCH will be adjusted after alignment with Monte Bravo on which data will be available at each moment of the process.

Request

ENDPOINT
/v2/account_request/draft_checking_legal_person
METHOD
POST

Description

This endpoint creates a draft for Legal Entity account opening. The POST accepts from minimal data to complete data, offering maximum flexibility.

Flexibility Strategy

  • Minimal data: CNPJ + Name + Person type
  • Partial data: Add fields as available
  • Complete data: Send everything at once (less common)

Example 1: MINIMAL Payload (only required)

Request Body
{
"account_owner": {
"company_document_number": "46073462000130",
"name": "EMPRESA EXEMPLO TECNOLOGIA LTDA",
"person_type": "legal"
}
}
{
"request_control_key": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"account_owner": {
"company_document_number": "46073462000130",
"name": "EMPRESA EXEMPLO TECNOLOGIA LTDA",
"person_type": "legal"
}
}

Behavior: If the same request_control_key is used again, returns error 409 (Conflict) instead of creating a new draft.

Example 2: COMPLETE Payload (all data at once)

Request Body
{
"account_owner": {
"company_document_number": "46073462000130",
"name": "EMPRESA EXEMPLO TECNOLOGIA LTDA",
"person_type": "legal",
"email": "empresa@exemplo.com.br",
"phone": {
"country_code": "055",
"area_code": "11",
"number": "999999999"
},
"trading_name": "Empresa Exemplo",
"company_type": "LTDA",
"foundation_date": "2010-01-15",
"cnae_code": "6209-1/00",
"company_statute": "92c93e9e-b249-46b7-8c2e-95d4955a3c39",
"monthly_revenue": 150000.00,
"address": {
"street": "Av. Brigadeiro Faria Lima",
"state": "SP",
"city": "São Paulo",
"neighborhood": "Jardim Paulistano",
"number": "2391",
"postal_code": "01452905",
"complement": "Conjunto 102"
},
"company_representatives": [
{
"name": "João Carlos da Silva",
"email": "joao.silva@exemplo.com.br",
"birth_date": "1985-03-20",
"individual_document_number": "12345678901",
"is_pep": false,
"mother_name": "Maria da Silva",
"nationality": "brasileira",
"person_type": "natural",
"phone": {
"country_code": "055",
"area_code": "11",
"number": "988888888"
},
"address": {
"street": "Rua das Flores",
"state": "SP",
"city": "São Paulo",
"neighborhood": "Jardins",
"number": "123",
"postal_code": "01310100",
"complement": "Apto 45"
},
"representative_relationship": "ceo",
"gender": "male",
"marital_status": "married",
"documents": {
"cnh": {
"ocr_key": "7a73be1a-0b66-4c0a-932a-1d1d02efdc4c"
}
}
}
]
}
}

Response

STATUS
201
Response Body
{
"account_request_key": "abc123-def456-...",
"account_request_status": "draft",
"account_info": {
"account_number": "1638634",
"account_digit": "3",
"account_branch": "0001"
}
}
Attention

The account_request_key field must be stored and will be used to submit the draft via PATCH.

Request Body Params

FieldTypeDescriptionCharacters
request_control_keystringUUID to ensure idempotency (36 characters)36
reserved_account_keystringUUID of previously reserved account (36 characters)36
account_owner *objectAccount holder information (Legal Entity)Object account_owner

Object account_owner (POST)

FieldTypeDescriptionCharacters
company_document_number *stringCompany CNPJ (14 digits, numbers only)14
name *stringCompany legal name100
person_type *enumPerson type (always "legal")Enums person_type
emailstringCompany email (valid email format)254
phoneobjectCompany phoneObject phone
trading_namestringTrade name200
company_typeenumCompany typeEnums company_type
foundation_datestringFoundation date (format: YYYY-MM-DD)10
cnae_codestringCNAE activity code9
company_statutestringCompany statute UUID (UUID format)36
monthly_revenuenumberMonthly revenue-
addressobjectComplete company addressObject address
company_representativesarrayList of legal representatives (minimum 1 item if sent)Object company_representatives
Required Fields in POST

Only 3 fields are required in POST:

  • company_document_number
  • name
  • person_type

All other fields are optional and can be sent according to availability.

Representative Validation

If company_representatives is sent in POST, it must have at least 1 item (minItems: 1). Each representative must have all required fields (see PATCH section). The documents field within each representative is optional in POST.


Request

ENDPOINT
/v2/account_request/{account_request_key}/draft_checking_legal_person
METHOD
PATCH

Description

This endpoint submits the draft for processing. The PATCH validates completeness - all required fields must be present in the PATCH payload.

⚠️ IMPORTANT: The PATCH completely overwrites the account_owner data with the sent payload. This means that:

  • You must send ALL required fields in the PATCH payload, even if they were already sent in POST
  • Data sent only in POST will be lost if not resent in PATCH
  • The behavior is complete replacement, not merge/partial update
  • The documents field within each company_representative is required and must contain at least one valid document type (RG, CNH, RNE, CRNM, Passport or Digital CIN)

After successful submission, the status changes from draft to pending_bacen_validation and starts Bacen Protege+ validation.

Request Body

Request Body
{
"account_owner": {
"company_document_number": "46073462000130",
"name": "EMPRESA EXEMPLO TECNOLOGIA LTDA",
"person_type": "legal",
"email": "empresa@exemplo.com.br",
"phone": {
"country_code": "055",
"area_code": "11",
"number": "999999999"
},
"trading_name": "Empresa Exemplo",
"company_type": "LTDA",
"foundation_date": "2010-01-15",
"cnae_code": "6209-1/00",
"company_statute": "92c93e9e-b249-46b7-8c2e-95d4955a3c39",
"monthly_revenue": 150000.00,
"address": {
"street": "Av. Brigadeiro Faria Lima",
"state": "SP",
"city": "São Paulo",
"neighborhood": "Jardim Paulistano",
"number": "2391",
"postal_code": "01452905",
"complement": "Conjunto 102"
},
"company_representatives": [
{
"name": "João Carlos da Silva",
"email": "joao.silva@exemplo.com.br",
"birth_date": "1985-03-20",
"individual_document_number": "12345678901",
"is_pep": false,
"mother_name": "Maria da Silva",
"nationality": "brasileira",
"person_type": "natural",
"phone": {
"country_code": "055",
"area_code": "11",
"number": "988888888"
},
"address": {
"street": "Rua das Flores",
"state": "SP",
"city": "São Paulo",
"neighborhood": "Jardins",
"number": "123",
"postal_code": "01310100",
"complement": "Apto 45"
},
"representative_relationship": "ceo",
"gender": "male",
"marital_status": "married",
"documents": {
"rg": {
"ocr_front_key": "0aa8a4ca-5873-49bd-851c-1f2c71a1cc28",
"ocr_back_key": "29f6e346-7fae-4dcb-9ea1-2a3e4ef593ea"
},
"cnh": {
"ocr_key": "7479c8e4-2a5d-4b4d-b2eb-4b841ec9390d"
}
},
"face": "68da08f1-6cf4-4dce-a297-7b2f09311784"
}
]
},
"additional_documents": [
"61f2a65e-0ddf-4932-874f-9231794963da"
]
}

Response

STATUS
200
Response Body
{
"account_request_key": "abc123-def456-...",
"account_request_status": "pending_bacen_validation",
"account_info": {
"account_number": "1638634",
"account_digit": "3",
"account_branch": "0001"
}
}
Bacen Protege+ Flow

After successful submission, the status changes to pending_bacen_validation. The system performs a preliminary validation with Bacen Protege+ before proceeding with KYC analysis. After Bacen approval, the status will be automatically updated to pending_kyc_analysis.

Request Body Params

FieldTypeDescriptionCharacters
additional_documentsarrayList of additional document UUIDs (array of UUIDs)-
account_owner *objectComplete account holder information (Legal Entity)Object account_owner (PATCH)

Object account_owner (PATCH)

FieldTypeDescriptionCharacters
company_document_number *stringCNPJ (14 digits, numbers only, pattern: ^[0-9]{14}$)14
name *stringLegal name100
person_type *enumAlways "legal"Enums person_type
email *stringCompany email (valid email format)254
phone *objectCompany phoneObject phone
trading_name *stringTrade name200
company_type *enumCompany typeEnums company_type
foundation_date *stringFoundation date (format: YYYY-MM-DD)10
cnae_code *stringCNAE activity code9
company_statute *stringCompany statute UUID (UUID format)36
monthly_revenue *numberMonthly revenue-
address *objectComplete company addressObject address
company_representatives *arrayList of legal representatives (minimum 1 item required)Object company_representatives
Required Fields in PATCH

ALL fields marked with * are required in PATCH. The JSON schema validates the completeness of all fields before processing the submission.

Object phone

FieldTypeDescriptionCharacters
country_code *stringCountry code (1-3 digits, pattern: ^[0-9]{1,3}$)1-3
area_code *stringArea code (1-3 digits, pattern: ^[0-9]{1,3}$)1-3
number *stringPhone number (1-10 digits, pattern: ^[0-9]{1,10}$)1-10
typeenumPhone type (optional: "residential", "commercial", "mobile", "fax")-

Object address

FieldTypeDescriptionCharacters
street *stringStreet/Address1-500
neighborhood *stringNeighborhood0-100
number *stringNumber1-10
postal_code *stringZIP code (8 digits, numbers only, pattern: ^\d{8}$)8
city *stringCity1-100
state *enumState (2 uppercase characters)Enums state
complementstringComplement (optional, maximum 500 characters)0-500

Object company_representatives

FieldTypeDescriptionCharacters
name *stringFull name100
address *objectComplete address (same structure as company address)Object address
email *stringEmail (valid email format)5-200
birth_date *stringBirth date (format: YYYY-MM-DD, pattern: `\d4-((0[1-9])(1[0-2]))-((0[1-9])
individual_document_number *stringCPF (11 digits, numbers only, pattern: ^[0-9]{11}$)11
is_pep *booleanIf is Politically Exposed Person-
mother_name *stringMother's name100
nationality *stringNationality50
person_type *enumAlways "natural"Enums person_type
phone *objectPhone (same structure as company phone)Object phone
documents *objectAnti-fraud documents (required in PATCH)Object documents
facestringFacial photo UUID (36 characters)36
document_identificationstringIdentification document UUID (UUID format)36
document_identification_numberstringIdentification document number16
marital_statusenumMarital statusEnums marital_status
genderenumGenderEnums gender
representative_relationshipenumRelationship with companyEnums representative_relationship

Object documents

FieldTypeDescriptionCharacters
rgobjectOCR keys for front and back of RG uploadObject rg
cnhobjectOCR key for CNH uploadObject cnh
cnh_digitalobjectOCR key for digital CNH uploadObject cnh_digital
national_registry_of_foreignersobjectOCR keys for front and back of RNE uploadObject national_registry_of_foreigners
national_migration_registryobjectOCR keys for front and back of CRNM uploadObject national_migration_registry
passportobjectOCR key for passport uploadObject passport
cin_digitalobjectOCR key for digital National Identity Card uploadObject cin_digital

Object rg

FieldTypeDescriptionCharacters
ocr_front_key *uuidv4OCR key for front image upload of RG36
ocr_back_key *uuidv4OCR key for back image upload of RG36

OR

FieldTypeDescriptionCharacters
ocr_key *uuidv4OCR key for RG image upload36

Object cnh

FieldTypeDescriptionCharacters
ocr_front_key *uuidv4OCR key for front image upload of CNH36
ocr_back_key *uuidv4OCR key for back image upload of CNH36

OR

FieldTypeDescriptionCharacters
ocr_key *uuidv4OCR key for CNH image upload36

Object cnh_digital

FieldTypeDescriptionCharacters
ocr_key *uuidv4OCR key for digital CNH image upload36

Object national_registry_of_foreigners

FieldTypeDescriptionCharacters
ocr_front_key *uuidv4OCR key for front image upload of RNE36
ocr_back_key *uuidv4OCR key for back image upload of RNE36

OR

FieldTypeDescriptionCharacters
ocr_key *uuidv4OCR key for RNE image upload36

Object national_migration_registry

FieldTypeDescriptionCharacters
ocr_front_key *uuidv4OCR key for front image upload of CRNM36
ocr_back_key *uuidv4OCR key for back image upload of CRNM36

OR

FieldTypeDescriptionCharacters
ocr_key *uuidv4OCR key for CRNM image upload36

Object passport

FieldTypeDescriptionCharacters
ocr_key *uuidv4OCR key for passport image upload36

Object cin_digital

FieldTypeDescriptionCharacters
ocr_key *uuidv4OCR key for digital National Identity Card image upload36
Information

The OCR keys (ocr_key or ocr_front_key and ocr_back_key) from document image uploads are provided as response from the image upload in anti-fraud. The face_recognition_key is returned in the facial recognition response.

Response Body Params

FieldTypeDescriptionCharacters
account_request_key *stringAccount creation request identification key-
account_request_status *stringRequest status (changes to pending_bacen_validation after submission)-
account_info *objectObject containing account informationObject account_info

Object account_info

FieldTypeDescriptionCharacters
account_branch *stringBranch number4
account_digit *stringAccount check digit1
account_number *stringAccount number-

Error Response

STATUS
4xx
Response Body: Error
{
"title": "titulo",
"description": "description in English",
"translation": "descrição em portugues",
"code": "codigo",
"extra_fields": {}
}
HTTP Code
status
QI Code
code
Title
title
Description (eng)
description
Description(ptbr)
translation
400QIT000001Bad RequestSchema ErrorErro de Schema
400-Bad RequestInvalid request bodyCorpo da requisição inválido
404QIT000404Not FoundResource could not be foundRecurso não encontrado
409-ConflictDuplicate request_control_keyChave de controle duplicada

Differences between POST and PATCH

AspectPOST (Create Draft)PATCH (Submit Draft)
ObjectiveCreate draft with flexibilityValidate completeness and submit to Bacen
Required FieldsOnly CNPJ + Name + TypeALL fields + 1 complete representative with documents
documentsOptional per representativeRequired per representative (object with OCR documents)
RepresentativesOptionalRequired (minimum 1)
ValidationMinimal (only 3 fields)Complete (all required fields)
Initial StatusN/Adraft (must be in this status)
Final Statusdraftpending_bacen_validation
Bacen ValidationNoYes
KYC AnalysisNoYes (after Bacen)
IdempotencyYes (via request_control_key)No

Usage Scenarios

Scenario 1: Client initially has only basic data

POST → {CNPJ, name, type}  [status: draft]
...client collects more data...
PATCH → {all fields + documents per representative} [status: pending_bacen_validation]

Scenario 2: Client has all data at once

POST → {all fields}  [status: draft]
PATCH → {all fields} [status: pending_bacen_validation]

Scenario 3: Client sends partial data gradually

POST → {CNPJ, name, type, email}  [status: draft]
...client collects more data...
PATCH → {all fields including representatives with documents} [status: pending_bacen_validation]

Enums

Enums person_type

EnumDescription
naturalNatural person
legalLegal entity

Enums company_type

EnumDescription
ltdaLimited
saCorporation
micro_enterpriseMicro Enterprise
freelancerFreelancer
sa_openedOpen Capital Corporation
sa_closedClosed Capital Corporation
se_ltdaLimited Business Company
se_cnGeneral Partnership Business Company
se_csLimited Partnership Business Company
se_caPartnership Limited by Shares Business Company
scpPartnership in Participation
eiIndividual Entrepreneur
eseEstablishment in Brazil of Foreign Company
eeabEstablishment in Brazil of Argentine-Brazilian Binational Company
sspPure Simple Partnership
ss_ltdaLimited Simple Partnership
ss_cnGeneral Partnership Simple Partnership
ss_csLimited Partnership Simple Partnership
eireli_neIndividual Limited Liability Company (Business Nature)
eireli_nsIndividual Limited Liability Company (Simple Nature)
eireliIndividual Liability Company
meiIndividual Micro Entrepreneur
meMicro Enterprise
copCooperative
private_associationPrivate Association

Enums state

EnumDescription
ACAcre
ALAlagoas
AMAmazonas
APAmapá
BABahia
CECeará
DFDistrito Federal
ESEspírito Santo
GOGoiás
MAMaranhão
MGMinas Gerais
MSMato Grosso do Sul
MTMato Grosso
PAPará
PBParaíba
PEPernambuco
PIPiauí
PRParaná
RJRio de Janeiro
RNRio Grande do Norte
RORondônia
RRRoraima
RSRio Grande do Sul
SCSanta Catarina
SESergipe
SPSão Paulo
TOTocantins
EXExterior

Enums marital_status

EnumDescription
singleSingle
marriedMarried
widowerWidowed
divorcedDivorced
separatedSeparated

Enums gender

EnumDescription
maleMale
femaleFemale

Enums representative_relationship

EnumDescription
ceoCEO / Chief Executive Officer
analystAnalyst
partnerPartner
directorDirector
attorneyAttorney
signerSigner

Complete Flow

  1. POST /v2/account_request/draft_checking_legal_person

    • Creates draft with available data
    • Status: draft
    • Returns: account_request_key
  2. (Optional) Collect additional data

  3. PATCH /v2/account_request/{account_request_key}/draft_checking_legal_person

    • Validates completeness of all fields
    • Sends to Bacen Protege+
    • Status: pending_bacen_validation
  4. Bacen Protege+ validates (asynchronous)

    • Status: pending_kyc_analysis (if approved)
  5. KYC analyzes legal entity

    • Status: approved (if everything is OK)
  6. Account created and ready for use