GET /v1/accountsGET /v1/accounts/{id}POST /v1/onboardsGET /v1/onboardsPOST /v1/account/credentials| Ambiente | URL base |
|---|---|
| Homologação | https://<url-de-homologacao> |
| Produção | https://<url-de-producao> |
/v1. Sua chave só dá acesso aos dados do seu próprio parceiro: contas e onboardings de outros parceiros nunca aparecem e, se consultados pelo id, respondem como inexistentes (404).X-Api-Key com a chave de API do parceiro:401. Por segurança, a API não informa qual foi o motivo:{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.2",
"title": "Unauthorized",
"status": 401,
"detail": "Invalid or inactive X-Api-Key",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00"
}401 com uma chave que deveria funcionar, verifique se ela já foi aprovada, se não expirou e se o IP de saída do seu servidor está na lista da chave.Content-Type: application/json), com nomes de campos em camelCase.2026-03-14T13:22:05.123Z). Filtros de data usam yyyy-MM-dd e são inclusivos."Active", "PJ").8d1e4f2a-3b5c-4d6e-8f7a-9b0c1d2e3f4a).Page e PageSize na query string e devolvem:{
"items": [ ... ],
"page": 1,
"pageSize": 50,
"total": 132
}| Parâmetro | Padrão | Regra |
|---|---|---|
Page | 1 | Começa em 1 |
PageSize | 50 | Entre 1 e 200 itens por página |
total é a quantidade de itens que atendem aos filtros, considerando todas as páginas.Content-Type: application/problem+json). Informe o traceId ao suporte da Brasil Cash para agilizar a análise de um problema.| Status | Significado |
|---|---|
400 | Dados inválidos. O campo errors diz qual campo falhou e por quê |
401 | Chave ausente, inválida ou não autorizada para o IP de origem |
404 | Recurso não encontrado (ou pertencente a outro parceiro) |
409 | Regra de negócio impede a operação. O motivo vem em detail |
429 | Limite de requisições excedido |
502 | Um serviço interno da Brasil Cash não respondeu. Tente novamente em instantes |
400):{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.1",
"title": "One or more validation errors occurred.",
"status": 400,
"errors": {
"expirationDays": ["Between 30 and 90"]
},
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00"
}409):{
"type": "https://tools.ietf.org/html/rfc9110#section-15.5.10",
"title": "Business rule violated",
"status": 409,
"detail": "Account is not active",
"traceId": "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-00"
}429 com o header Retry-After indicando quantos segundos esperar antes de tentar de novo.| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador da conta |
type | texto | PF (pessoa física) ou PJ (pessoa jurídica) |
status | texto | Pending, Active, Blocked ou Closed |
document | texto | CPF ou CNPJ, só dígitos |
name | texto | Nome completo ou razão social |
tradingName | texto | null | Nome fantasia (PJ) |
accountNumber | texto | null | Número da conta. Preenchido quando a conta é aberta |
accountBranch | texto | null | Agência. Preenchida quando a conta é aberta |
riskLevel | texto | Low, Medium ou High |
createdAt | data-hora | Data de criação (UTC) |
| Status | Significado |
|---|---|
Pending | Em abertura, ainda não pode operar |
Active | Ativa |
Blocked | Bloqueada temporariamente |
Closed | Encerrada |
GET /v1/accounts| Parâmetro | Descrição |
|---|---|
Status | Pending, Active, Blocked ou Closed |
Name | Parte do nome, da razão social ou do nome fantasia |
Document | Parte do CPF/CNPJ. Pontuação é ignorada (123.456 equivale a 123456) |
CreatedFrom | Criadas a partir desta data, inclusive (yyyy-MM-dd) |
CreatedTo | Criadas até esta data, inclusive (yyyy-MM-dd) |
Page | Página (padrão 1) |
PageSize | Itens por página (padrão 50, máximo 200) |
200{
"items": [
{
"id": "8d1e4f2a-3b5c-4d6e-8f7a-9b0c1d2e3f4a",
"type": "PJ",
"status": "Active",
"document": "12345678000190",
"name": "Loja Exemplo Ltda",
"tradingName": "Loja Exemplo",
"accountNumber": "1234567",
"accountBranch": "0001",
"riskLevel": "Low",
"createdAt": "2026-03-14T13:22:05.123Z"
},
{
"id": "1a2b3c4d-5e6f-4a7b-8c9d-0e1f2a3b4c5d",
"type": "PF",
"status": "Pending",
"document": "12345678909",
"name": "Maria da Silva",
"tradingName": null,
"accountNumber": null,
"accountBranch": null,
"riskLevel": "Medium",
"createdAt": "2026-09-02T18:40:11.004Z"
}
],
"page": 1,
"pageSize": 20,
"total": 2
}GET /v1/accounts/{id}200{
"id": "8d1e4f2a-3b5c-4d6e-8f7a-9b0c1d2e3f4a",
"type": "PJ",
"status": "Active",
"document": "12345678000190",
"name": "Loja Exemplo Ltda",
"tradingName": "Loja Exemplo",
"accountNumber": "1234567",
"accountBranch": "0001",
"riskLevel": "Low",
"createdAt": "2026-03-14T13:22:05.123Z"
}| Status | detail | Quando |
|---|---|---|
404 | Account not found | A conta não existe ou pertence a outro parceiro |
GET /v1/accounts.| Campo | Tipo | Descrição |
|---|---|---|
id | uuid | Identificador do onboarding |
kycOnboardingLinkId | uuid | Mesmo valor de id (mantido por compatibilidade) |
personTypeHint | texto | null | PF ou PJ, se informado na criação ou já identificado no cadastro |
status | texto | Situação do cadastro (tabela abaixo) |
inviteCode | texto | null | Código de convite informado na criação |
applicantName | texto | null | Nome de quem está se cadastrando, quando já informado |
stepsCompleted | número | Etapas concluídas |
stepsTotal | número | Total de etapas do cadastro |
createdAt | data-hora | Data de criação do link (UTC) |
expiresAt | data-hora | Data em que o link expira (UTC) |
onboardingUrl | texto | null | Link que o cliente final abre. Vem preenchido apenas enquanto o link pode ser usado (Created ou InProgress) |
| Status | Significado |
|---|---|
Created | Link criado, ainda não aberto pelo cliente |
InProgress | Cliente está preenchendo o cadastro |
UnderReview | Cadastro enviado, em análise pela Brasil Cash |
Completed | Cadastro aprovado |
Rejected | Cadastro reprovado |
Expired | Link expirou antes da conclusão |
POST /v1/onboards{})| Campo | Tipo | Descrição |
|---|---|---|
personTypeHint | texto | PF ou PJ, se você já sabe o tipo de cliente |
expirationDays | número | Validade do link em dias, de 30 a 90 |
inviteCode | texto | Código livre de até 32 caracteres, para você identificar a origem do convite |
201{
"linkToken": "Zk3pQ8vX1mN7rT2wY5bC",
"onboard": {
"id": "5c7e9a1b-2d4f-4e6a-8b0c-1d3e5f7a9b2c",
"kycOnboardingLinkId": "5c7e9a1b-2d4f-4e6a-8b0c-1d3e5f7a9b2c",
"personTypeHint": "PF",
"status": "Created",
"inviteCode": "CAMPANHA-OUT26",
"applicantName": null,
"stepsCompleted": 0,
"stepsTotal": 0,
"createdAt": "2026-10-19T12:00:00Z",
"expiresAt": "2026-11-18T12:00:00Z",
"onboardingUrl": "https://onboarding.brasilcash.com.br/o/Zk3pQ8vX1mN7rT2wY5bC"
}
}onboard.onboardingUrl ao seu cliente. Guarde onboard.id para acompanhar o cadastro pela listagem.linkTokené o token do link e aparece somente nesta resposta.
| Status | Exemplo de mensagem | Quando |
|---|---|---|
400 | expirationDays: Between 30 and 90 | expirationDays fora de 30 a 90 |
400 | personTypeHint: Must be PF or PJ | Tipo de pessoa inválido |
400 | inviteCode: Max 32 characters | Código de convite muito longo |
409 | O tenant de onboarding deste parceiro está inativo | O onboarding do parceiro está desativado. Fale com a Brasil Cash |
409 | Este parceiro ainda não tem um tenant de onboarding configurado… | O onboarding do parceiro ainda não foi configurado. Fale com a Brasil Cash |
502 | The Kyc API did not answer; try again | Instabilidade temporária. Tente novamente |
GET /v1/onboards| Parâmetro | Descrição |
|---|---|
Search | Busca por nome de quem está se cadastrando, código de convite ou documento |
Status | Created, InProgress, UnderReview, Completed, Rejected ou Expired |
PersonType | PF ou PJ |
CreatedFrom | Criados a partir desta data, inclusive (yyyy-MM-dd) |
CreatedTo | Criados até esta data, inclusive (yyyy-MM-dd) |
Page | Página (padrão 1) |
PageSize | Itens por página (padrão 50, máximo 200) |
200{
"items": [
{
"id": "9e8d7c6b-5a4f-4e3d-8c2b-1a0f9e8d7c6b",
"kycOnboardingLinkId": "9e8d7c6b-5a4f-4e3d-8c2b-1a0f9e8d7c6b",
"personTypeHint": "PJ",
"status": "InProgress",
"inviteCode": "PARCEIRO-2026",
"applicantName": "Padaria Pão Quente Ltda",
"stepsCompleted": 2,
"stepsTotal": 5,
"createdAt": "2026-10-01T09:15:00Z",
"expiresAt": "2026-11-30T09:15:00Z",
"onboardingUrl": "https://onboarding.brasilcash.com.br/o/Hq9sL2kV6pD4xW8nF1gJ"
}
],
"page": 1,
"pageSize": 20,
"total": 1
}| Status | Exemplo de mensagem | Quando |
|---|---|---|
400 | status: One of Created, InProgress, UnderReview, Completed, Rejected, Expired | Status inválido |
400 | personType: Must be PF or PJ | PersonType inválido |
502 | The Kyc API did not answer; try again | Instabilidade temporária |
POST /v1/account/credentials| Campo | Tipo | Obrigatório | Descrição |
|---|---|---|---|
accountId | uuid | Sim | Conta do parceiro, com status Active |
name | texto | Sim | Nome para identificar a credencial (até 100 caracteres) |
allowedIps | texto | Sim | IP(s) de onde a credencial será usada. Vários IPs separados por vírgula. Sem máscara/CIDR |
201{
"id": "7b9d1f3a-5c7e-4a9b-8d1f-3a5c7e9b1d3f",
"name": "Gateway - Cliente X",
"clientId": "bc_pub_A7kP2mX9qL4vN8rT1wY3",
"clientSecret": "bc_sec_Q2w8E4r6T1y3U5i7O9p0A2s4D6f8G1h3J5k7L9z0",
"username": "bc_usr_k3m9p2x7",
"password": "Rk7#mQ2v@Xn9pL4w",
"permissions": ["statement", "balance"],
"selfApprove": false,
"allowedIps": "203.0.113.10, 203.0.113.11",
"status": "PendingReview"
}| Campo | Descrição |
|---|---|
clientId | Identificador público da credencial |
clientSecret | Segredo da credencial. Exibido somente nesta resposta |
username | Usuário gerado para a conta |
password | Senha gerada. Exibida somente nesta resposta |
permissions | Permissões da credencial. Toda credencial nasce com statement (extrato) e balance (saldo) |
selfApprove | Se as operações dispensam aprovação. Sempre false na criação |
allowedIps | IPs autorizados, normalizados |
status | PendingReview: a credencial passa por análise da Brasil Cash antes de ser liberada |
Importante: guarde clientSecretepasswordcom segurança assim que recebê-los. A Brasil Cash não armazena esses valores em texto e não consegue reenviá-los. Em caso de perda, revogue a credencial pelo Painel e crie outra.
| Status | Exemplo de mensagem | Quando |
|---|---|---|
400 | name: Required, max 100 characters | Nome ausente ou longo demais |
400 | allowedIps: Informe o IP que a sua API vai usar | allowedIps ausente |
400 | allowedIps: '10.0.0.0/24' não é um IP válido (informe só IPs, sem máscara) | Item que não é um IP |
404 | Account not found | A conta não existe ou pertence a outro parceiro |
409 | Account is not active | A conta não está com status Active |
409 | Account already has an active credential; revoke it before creating another | A conta já tem uma credencial. Revogue a atual pelo Painel |
POST /v1/onboards e envie o onboardingUrl ao seu cliente.GET /v1/onboards, filtrando por Status ou buscando pelo inviteCode.Completed, localize a conta em GET /v1/accounts (por exemplo, filtrando por Document) e aguarde o status Active.POST /v1/account/credentials e guarde clientSecret e password com segurança.