Skip to main content

Rascunho de Conta Livre Movimentação - Pessoa Jurídica

O fluxo Draft Checking Legal Person permite criar uma solicitação de abertura de conta em duas etapas:

  1. POST: Cria um draft (rascunho) com flexibilidade máxima - aceita desde dados mínimos até dados completos
  2. PATCH: Submete o draft para processamento, validando completude de todos os campos obrigatórios

Importante: Este fluxo está sendo preparado para integração com Monte Bravo. A divisão de campos entre POST e PATCH será ajustada após alinhamento com Monte Bravo sobre quais dados estarão disponíveis em cada momento do processo.

Criar Draft de Conta PJ

Request

ENDPOINT
/v2/account_request/draft_checking_legal_person
MÉTODO
POST

Descrição

Este endpoint cria um draft de abertura de conta para Pessoa Jurídica (Legal Person). O POST aceita desde dados mínimos até dados completos, oferecendo máxima flexibilidade.

Estratégia de Flexibilidade

  • Dados mínimos: CNPJ + Nome + Tipo de pessoa
  • Dados parciais: Adicione campos conforme disponíveis
  • Dados completos: Envie tudo de uma vez (menos comum)

Exemplo 1: Payload MÍNIMO (apenas obrigatórios)

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"
}
}

Comportamento: Se o mesmo request_control_key for usado novamente, retorna erro 409 (Conflict) ao invés de criar um novo draft.

Exemplo 2: Payload COMPLETO (todos os dados de uma vez)

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"
}
}
Atenção

O campo account_request_key deve ser armazenado e será utilizado para submeter o draft via PATCH.

Request Body Params

CampoTipoDescriçãoCaracteres
request_control_keystringUUID para garantir idempotência (36 caracteres)36
reserved_account_keystringUUID de conta reservada previamente (36 caracteres)36
account_owner *objectInformações do titular da conta (Pessoa Jurídica)Objeto account_owner

Objeto account_owner (POST)

CampoTipoDescriçãoCaracteres
company_document_number *stringCNPJ da empresa (14 dígitos, apenas números)14
name *stringRazão social da empresa100
person_type *enumTipo de pessoa (sempre "legal")Enumeradores person_type
emailstringEmail da empresa (formato email válido)254
phoneobjectTelefone da empresaObjeto phone
trading_namestringNome fantasia200
company_typeenumTipo societárioEnumeradores company_type
foundation_datestringData de fundação (formato: YYYY-MM-DD)10
cnae_codestringCódigo CNAE da atividade9
company_statutestringUUID do estatuto social (formato UUID)36
monthly_revenuenumberFaturamento mensal-
addressobjectEndereço completo da empresaObjeto address
company_representativesarrayLista de representantes legais (mínimo 1 item se enviado)Objeto company_representatives
Campos Obrigatórios no POST

Apenas 3 campos são obrigatórios no POST:

  • company_document_number
  • name
  • person_type

Todos os demais campos são opcionais e podem ser enviados conforme disponibilidade.

Validação de Representantes

Se company_representatives for enviado no POST, deve ter pelo menos 1 item (minItems: 1). Cada representante deve ter todos os campos obrigatórios (ver seção PATCH). O campo documents dentro de cada representante é opcional no POST.


Submeter Draft de Conta PJ

Request

ENDPOINT
/v2/account_request/{account_request_key}/draft_checking_legal_person
MÉTODO
PATCH

Descrição

Este endpoint submete o draft para processamento. O PATCH valida completude - todos os campos obrigatórios devem estar presentes no payload do PATCH.

⚠️ IMPORTANTE: O PATCH sobrescreve completamente os dados do account_owner com o payload enviado. Isso significa que:

  • Você deve enviar TODOS os campos obrigatórios no payload do PATCH, mesmo que já tenham sido enviados no POST
  • Dados enviados apenas no POST serão perdidos se não forem reenviados no PATCH
  • O comportamento é de substituição completa, não de merge/atualização parcial
  • O campo documents dentro de cada company_representative é obrigatório e deve conter pelo menos um tipo de documento válido (RG, CNH, RNE, CRNM, Passaporte ou CIN Digital)

Após a submissão bem-sucedida, o status muda de draft para pending_bacen_validation e inicia a validação do Bacen Protege+.

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"
}
}
Fluxo Bacen Protege+

Após a submissão bem-sucedida, o status muda para pending_bacen_validation. O sistema realiza uma validação prévia junto ao Bacen Protege+ antes de prosseguir com a análise de KYC. Após aprovação do Bacen, o status será atualizado para pending_kyc_analysis automaticamente.

Request Body Params

CampoTipoDescriçãoCaracteres
additional_documentsarrayLista de UUIDs de documentos adicionais (array de UUIDs)-
account_owner *objectInformações completas do titular da conta (Pessoa Jurídica)Objeto account_owner (PATCH)

Objeto account_owner (PATCH)

CampoTipoDescriçãoCaracteres
company_document_number *stringCNPJ (14 dígitos, apenas números, padrão: ^[0-9]{14}$)14
name *stringRazão social100
person_type *enumSempre "legal"Enumeradores person_type
email *stringEmail da empresa (formato email válido)254
phone *objectTelefone da empresaObjeto phone
trading_name *stringNome fantasia200
company_type *enumTipo societárioEnumeradores company_type
foundation_date *stringData de fundação (formato: YYYY-MM-DD)10
cnae_code *stringCódigo CNAE da atividade9
company_statute *stringUUID do estatuto social (formato UUID)36
monthly_revenue *numberFaturamento mensal-
address *objectEndereço completo da empresaObjeto address
company_representatives *arrayLista de representantes legais (mínimo 1 item obrigatório)Objeto company_representatives
Campos Obrigatórios no PATCH

TODOS os campos marcados com * são obrigatórios no PATCH. O schema JSON valida a completude de todos os campos antes de processar a submissão.

Objeto phone

CampoTipoDescriçãoCaracteres
country_code *stringCódigo do país (1-3 dígitos, padrão: ^[0-9]{1,3}$)1-3
area_code *stringDDD (1-3 dígitos, padrão: ^[0-9]{1,3}$)1-3
number *stringNúmero do telefone (1-10 dígitos, padrão: ^[0-9]{1,10}$)1-10
typeenumTipo de telefone (opcional: "residential", "commercial", "mobile", "fax")-

Objeto address

CampoTipoDescriçãoCaracteres
street *stringRua/Logradouro1-500
neighborhood *stringBairro0-100
number *stringNúmero1-10
postal_code *stringCEP (8 dígitos, apenas números, padrão: ^\d{8}$)8
city *stringCidade1-100
state *enumEstado (2 caracteres maiúsculos)Enumeradores state
complementstringComplemento (opcional, máximo 500 caracteres)0-500

Objeto company_representatives

CampoTipoDescriçãoCaracteres
name *stringNome completo100
address *objectEndereço completo (mesma estrutura do address da empresa)Objeto address
email *stringEmail (formato email válido)5-200
birth_date *stringData de nascimento (formato: YYYY-MM-DD, padrão: `\d4-((0[1-9])(1[0-2]))-((0[1-9])
individual_document_number *stringCPF (11 dígitos, apenas números, padrão: ^[0-9]{11}$)11
is_pep *booleanSe é Pessoa Politicamente Exposta-
mother_name *stringNome da mãe100
nationality *stringNacionalidade50
person_type *enumSempre "natural"Enumeradores person_type
phone *objectTelefone (mesma estrutura do phone da empresa)Objeto phone
documents *objectDocumentos para antifraude (obrigatório no PATCH)Objeto documents
facestringUUID da foto facial (36 caracteres)36
document_identificationstringUUID do documento de identificação (formato UUID)36
document_identification_numberstringNúmero do documento de identificação16
marital_statusenumEstado civilEnumeradores marital_status
genderenumGêneroEnumeradores gender
representative_relationshipenumRelação com a empresaEnumeradores representative_relationship

Objeto documents

CampoTipoDescriçãoCaracteres
rgobjectChaves OCR do upload da frente e verso do RGObjeto rg
cnhobjectChave OCR do upload da CNHObjeto cnh
cnh_digitalobjectChave OCR do upload da CNH digitalObjeto cnh_digital
national_registry_of_foreignersobjectChaves OCR do upload da frente e verso do RNEObjeto national_registry_of_foreigners
national_migration_registryobjectChaves OCR do upload da frente e verso do CRNMObjeto national_migration_registry
passportobjectChave OCR do upload do passaporteObjeto passport
cin_digitalobjectChave OCR do upload da Cédula de Identidade Nacional digitalObjeto cin_digital

Objeto rg

CampoTipoDescriçãoCaracteres
ocr_front_key *uuidv4Chave OCR do upload da imagem da frente do RG36
ocr_back_key *uuidv4Chave OCR do upload da imagem do verso do RG36

OU

CampoTipoDescriçãoCaracteres
ocr_key *uuidv4Chave OCR do upload da imagem do RG36

Objeto cnh

CampoTipoDescriçãoCaracteres
ocr_front_key *uuidv4Chave OCR do upload da imagem da frente da CNH36
ocr_back_key *uuidv4Chave OCR do upload da imagem do verso da CNH36

OU

CampoTipoDescriçãoCaracteres
ocr_key *uuidv4Chave OCR do upload da imagem da CNH36

Objeto cnh_digital

CampoTipoDescriçãoCaracteres
ocr_key *uuidv4Chave OCR do upload da imagem da CNH digital36

Objeto national_registry_of_foreigners

CampoTipoDescriçãoCaracteres
ocr_front_key *uuidv4Chave OCR do upload da imagem da frente do RNE36
ocr_back_key *uuidv4Chave OCR do upload da imagem do verso do RNE36

OU

CampoTipoDescriçãoCaracteres
ocr_key *uuidv4Chave OCR do upload da imagem do RNE36

Objeto national_migration_registry

CampoTipoDescriçãoCaracteres
ocr_front_key *uuidv4Chave OCR do upload da imagem da frente do CRNM36
ocr_back_key *uuidv4Chave OCR do upload da imagem do verso do CRNM36

OU

CampoTipoDescriçãoCaracteres
ocr_key *uuidv4Chave OCR do upload da imagem do CRNM36

Objeto passport

CampoTipoDescriçãoCaracteres
ocr_key *uuidv4Chave OCR do upload da imagem do passaporte36

Objeto cin_digital

CampoTipoDescriçãoCaracteres
ocr_key *uuidv4Chave OCR do upload da imagem da Cédula de Identidade Nacional digital36
Informação

As chaves OCR (ocr_key ou ocr_front_key e ocr_back_key) do upload das imagens dos documentos são fornecidas como resposta do upload das imagens no antifraude. A face_recognition_key é retornada na resposta do reconhecimento facial.

Response Body Params

CampoTipoDescriçãoCaracteres
account_request_key *stringChave de identificação da requisição de criação-
account_request_status *stringStatus da requisição (muda para pending_bacen_validation após submissão)-
account_info *objectObjeto contendo as informações da contaObjeto account_info

Objeto account_info

CampoTipoDescriçãoCaracteres
account_branch *stringNúmero da Agência4
account_digit *stringDígito verificador da conta1
account_number *stringNúmero da conta-

Error Response

STATUS
4xx
Response Body: Error
{
"title": "titulo",
"description": "description in English",
"translation": "descrição em portugues",
"code": "codigo",
"extra_fields": {}
}
Código HTTP
status
Código QI
code
Título
title
Descrição (eng)
description
Descrição(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

Diferenças entre POST e PATCH

AspectoPOST (Criar Draft)PATCH (Submeter Draft)
ObjetivoCriar draft com flexibilidadeValidar completude e submeter ao Bacen
Campos ObrigatóriosApenas CNPJ + Nome + TipoTODOS os campos + 1 representante completo com documents
documentsOpcional por representanteObrigatório por representante (objeto com documentos OCR)
RepresentantesOpcionalObrigatório (mínimo 1)
ValidaçãoMínima (apenas 3 campos)Completa (todos os campos obrigatórios)
Status InicialN/Adraft (deve estar neste status)
Status Finaldraftpending_bacen_validation
Validação BacenNãoSim
Análise KYCNãoSim (após Bacen)
IdempotênciaSim (via request_control_key)Não

Cenários de Uso

Cenário 1: Cliente tem apenas dados básicos inicialmente

POST → {CNPJ, nome, tipo}  [status: draft]
...cliente coleta mais dados...
PATCH → {todos os campos + documents por representante} [status: pending_bacen_validation]

Cenário 2: Cliente tem todos os dados de uma vez

POST → {todos os campos}  [status: draft]
PATCH → {todos os campos} [status: pending_bacen_validation]

Cenário 3: Cliente envia dados parciais gradualmente

POST → {CNPJ, nome, tipo, email}  [status: draft]
...cliente coleta mais dados...
PATCH → {todos os campos incluindo representantes com documents} [status: pending_bacen_validation]

Enumeradores

Enumeradores person_type

EnumDescrição
naturalPessoa física
legalPessoa jurídica

Enumeradores company_type

EnumDescrição
ltdaLimitada
saSociedade Anônima
micro_enterpriseMicro Empresa
freelancerFreelancer
sa_openedSociedade Anônima de Capital Aberto
sa_closedSociedade Anônima de Capital Fechado
se_ltdaSociedade Empresária Limitada
se_cnSociedade Empresária em Nome Coletivo
se_csSociedade Empresária em Comandita Simples
se_caSociedade Empresária em Comandita por Ações
scpSociedade em Conta de Participação
eiEmpresário Individual
eseEstabelecimento, no Brasil, de Sociedade Estrangeira
eeabEstabelecimento, no Brasil, de Empresa Binacional Argentino-Brasileira
sspSociedade Simples Pura
ss_ltdaSociedade Simples Limitada
ss_cnSociedade Simples em Nome Coletivo
ss_csSociedade Simples em Comandita Simples
eireli_neEmpresa Individual de Responsabilidade Limitada (de Natureza Empresária)
eireli_nsEmpresa Individual de Responsabilidade Limitada (de Natureza Simples)
eireliEmpresa de Responsabilidade Individual
meiMicro Empreendedor Individual
meMicro Empresa
copCooperativa
private_associationSociedade Privada

Enumeradores state

EnumDescrição
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

Enumeradores marital_status

EnumDescrição
singleSolteiro(a)
marriedCasado(a)
widowerViúvo(a)
divorcedDivorciado(a)
separatedSeparado(a)

Enumeradores gender

EnumDescrição
maleMasculino
femaleFeminino

Enumeradores representative_relationship

EnumDescrição
ceoCEO / Diretor Presidente
analystAnalista
partnerSócio
directorDiretor
attorneyProcurador
signerAssinante

Fluxo Completo

  1. POST /v2/account_request/draft_checking_legal_person

    • Cria draft com dados disponíveis
    • Status: draft
    • Retorna: account_request_key
  2. (Opcional) Coletar dados adicionais

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

    • Valida completude de todos os campos
    • Envia para Bacen Protege+
    • Status: pending_bacen_validation
  4. Bacen Protege+ valida (assíncrono)

    • Status: pending_kyc_analysis (se aprovado)
  5. KYC analisa pessoa jurídica

    • Status: approved (se tudo OK)
  6. Conta criada e pronta para uso