Cumbuca Gateway API

Referência para a API de compartilhamento de dados do Cumbuca Open Finance: diretório de participantes, ciclo de vida do consentimento de compartilhamento de dados, endpoints de consumo de dados da Fase 2 e o portal compartilhado de gestão de consentimentos.

Contexto - Open Finance Brasil

Esta seção é uma introdução de alto nível para leitores que não conhecem o ecossistema. Se você já sabe como o Open Finance Brasil funciona, vá direto para Visão geral.

O que é o Open Finance Brasil

O Open Finance Brasil é um programa regulado pelo Banco Central que permite que clientes (pessoas físicas e jurídicas) compartilhem seus dados financeiros entre instituições de forma padronizada e segura. A mesma ideia que impulsionou a interoperabilidade do Pix é aplicada ao restante da estrutura financeira: contas, cartões, crédito, investimentos e câmbio.

O Banco Central (BACEN) define as regras e publica as APIs reguladas; um Conselho Deliberativo coordenado por uma estrutura de governança de toda a indústria as operacionaliza por meio de grupos de trabalho (segurança, experiência do cliente, infraestrutura etc.). A conformidade não é opcional: toda instituição regulada deve expor as APIs padrão da forma como a especificação define.

Papéis de participação

Cada instituição participa do ecossistema em um ou mais papéis. Para o compartilhamento de dados, os papéis se dividem em um lado passivo (detém os dados) e um lado ativo (solicita os dados):

PapelDescrição
Transmissor de Dados passivo Tipicamente bancos; atende requisições de dados em nome de clientes que consentiram.
Receptor de Dados ativo Tipicamente fintechs / assessores; solicita dados de clientes para viabilizar seu produto.

Uma instituição pode ter múltiplos papéis simultaneamente (dados e pagamentos). Para esta referência de compartilhamento de dados, a tag relevante no diretório de participantes é DADOS; é o que você verá filtrado em GET /consent-management/v1/participants.

Cliente vs. servidor no protocolo. A divisão passivo/ativo se alinha diretamente com a divisão cliente/servidor do OAuth. O Receptor de Dados desempenha o papel de cliente OAuth: ele se registra via DCR, solicita autorização, detém o token de acesso e realiza as chamadas de API. O Transmissor de Dados desempenha o papel de Servidor de Autorização (AS) e servidor de recursos: ele autentica o usuário, emite consentimentos e tokens, e serve os endpoints regulados. Portanto, quando você ler "AS" na especificação FAPI-BR, pense no banco que detém os dados do cliente; quando ler "cliente", pense na fintech que conduz a integração.

Fases de implementação

O programa foi implementado em quatro fases. Os rótulos ainda são usados em todo lugar na especificação e nas conversas:

Como as instituições se comunicam

Dois padrões transversais regem cada requisição entre instituições:

Esses dois combinados implementam o perfil de segurança FAPI-BR, uma versão regional brasileira do padrão Financial-grade API da OpenID Foundation. Sobre o FAPI-BR, os blocos de construção padrão OAuth 2.0 / OIDC são utilizados:

Para integrações pela primeira vez, toda essa orquestração (consulta ao diretório, DCR, troca de tokens, PAR, handshake mTLS) ocorre a cada chamada. São muitas partes móveis.

Fluxo simplificado de requisição. Juntando as peças para uma leitura típica de dados autorizada:

Cliente (navegador / app) 1. clica em "conectar banco" Diretório (Open Finance BR) lista participantes ativos, certificados, metadados Cliente (Receptor) lado ativo cliente OAuth 0. descoberta (GET lista) 2. DCR + PAR + consentimento (mTLS + JWS, via HTTPS) Servidor de Autorização (AS) Transmissor de Dados lado passivo servidor OAuth Cliente autoriza no AS 3. redirect do navegador usuário autentica e autoriza o consentimento 4. callback 5. chamada de API autorizada (mTLS + token + payload JWS) Servidor de recursos no AS 6. resposta (assinada com JWS p/ endpoints sensíveis)

Cada seta entre cliente e AS usa mTLS. Etapas que expõem dados privados (etapas 2 e 5/6) também carregam payloads assinados com JWS. O navegador do cliente só está envolvido nas etapas 3 e 4: o redirecionamento que dispara a autenticação e traz o usuário de volta.

Toda leitura de dados entre instituições é ancorada em um consentimento. O consentimento é um artefato regulado criado no lado do detentor e vinculado a:

Até que o consentimento esteja no estado AUTHORISED, nenhum recurso protegido pode ser lido. Após expirar, o detentor recusará a chamada. Monitorar o estado do consentimento e reagir a ele (veja GET /consent-management/v1/consents/{consentId}) é, portanto, central para qualquer integração.

O papel da Cumbuca

A Cumbuca atua como a infraestrutura regulatória para instituições que desejam participar como receptores de dados sem precisar construir toda a pilha FAPI-BR internamente. A estrutura de dois prefixos que você verá ao longo desta referência reflete isso:

O restante deste documento é a referência da API dessas duas camadas.

Visão geral

A superfície da API está organizada em três grupos, todos servidos sob o mesmo PARTNER_BASE_URL, salvo indicação em contrário:

  • /consent-management/...: endpoints de orquestração da Cumbuca. Encadeiam internamente DCR → Token → Criação de consentimento → PAR → URL de redirecionamento, de modo que o cliente precisa chamar apenas um endpoint HTTP por operação de negócio.
  • /open-finance/...: proxy transparente para as APIs reguladas do Open Finance Brasil. mTLS, assinatura JWS de requisições/respostas e outras partes da infraestrutura regulatória são tratadas pelo proxy.
  • https://[sandbox.]directory.openbankingbrasil.org.br/participants: Diretório oficial de participantes do OF Brasil. Exposto pela API da Cumbuca como /consent-management/v1/participants.
Ambientes: Dois diretórios são expostos (sandbox e produção), selecionados via configuração. O sandbox deve ser usado para testes da suíte de conformidade e todo tráfego não produtivo.

Como o Acesso Funciona

A autenticação na API da Cumbuca é construída em duas camadas:

  • mTLS: toda conexão trafega sobre um handshake TLS mutuamente autenticado contra a CA da Cumbuca.
  • Token de acesso Bearer: obtido em POST /auth/v1/token e enviado como Authorization: Bearer <access_token> em cada chamada. Obrigatório para todos os endpoints desta referência, exceto os próprios endpoints de autenticação.

Além dessas duas camadas, o único estado que o cliente carrega de uma chamada para a próxima é o consentId, que delimita a requisição a um consentimento autorizado específico.

Obtendo um token de acesso
  1. O cliente chama POST /auth/v1/token via mTLS com suas credenciais. A resposta traz um access_token, um expires_in de curta duração e um refresh_token de longa duração.
  2. O cliente envia Authorization: Bearer <access_token> em cada chamada subsequente.
  3. Quando o token de acesso expira, o cliente chama POST /auth/v1/token com grant_type=refresh_token para obter um novo token de acesso sem reapresentar as credenciais.
Nota de onboarding: credenciais válidas não bastam por si só: o client_id também precisa estar provisionado do lado da Cumbuca. Até lá, você ainda consegue obter tokens, mas toda outra chamada falha com 401 UNAUTHORIZED e o detalhe client_id is not provisioned. Se você vir esse detalhe, contate a Cumbuca para concluir o provisionamento; o token em si está correto.
Inicializando um consentimento
  1. O cliente chama POST /consent-management/v1/consents via mTLS com um token Bearer válido.
  2. No 201, a Cumbuca retorna o payload regulado (data.consentId, data.redirectUrl, data.consent).
  3. O cliente persiste o data.consentId para uso posterior.
  4. O usuário é redirecionado para data.callbackApplicationUri, autoriza o consentimento no banco e é redirecionado de volta.
Chamando recursos protegidos

Em cada chamada subsequente a um endpoint protegido por consentimento (as leituras de dados sob /open-finance/... e a própria consulta do consentimento), o cliente deve:

  • Enviar Authorization: Bearer <access_token>.
  • Enviar o consentId no header x-consent-id.
  • Enviar x-authorisation-server-id identificando a instituição de destino.

A Cumbuca resolve o chamador a partir do client_id presente no token Bearer e encaminha a requisição para a API regulada sob a identidade desse cliente. A resposta upstream flui de volta para o cliente sem alterações.

Quando o x-consent-id é necessário? Todo endpoint que opera sobre um consentimento existente, ou seja, todo endpoint exceto GET /consent-management/v1/participants (sem consentimento envolvido) e POST /consent-management/v1/consents (a chamada que cria o consentimento).
Por que isso importa: o isolamento entre clientes é garantido pela identidade autenticada do cliente (o client_id presente no token Bearer). Toda chamada é executada sob essa identidade, então um cliente não consegue atuar sobre os dados de outro cliente. O mTLS continua sendo um requisito de transporte em toda conexão (inclusive POST /auth/v1/token); ele não é usado para verificações por consentimento.

Headers Comuns

Toda requisição à API parceira utiliza alguma combinação dos seguintes headers:

HeaderObrigatório quandoValor
AuthorizationTodo endpoint exceto POST /auth/v1/token (que usa HTTP Basic)Bearer <access_token> obtido no endpoint de token
x-authorisation-server-idToda chamada regulada (exceto autenticação e GET /consent-management/v1/participants)ID do Servidor de Autorização da instituição de destino (obtido no diretório)
x-consent-idLeituras de dados da Fase 2consentId retornado pela chamada de criação do consentimento
content-typePOSTs com corpo JSONapplication/json

Formato de Erros

A API retorna erros como JSON no corpo da resposta para qualquer status HTTP não-2xx. O formato segue o padrão regulado do Open Finance Brasil:

{
  "errors": [
    {
      "code": "INVALID_REQUEST",
      "title": "Validation failed",
      "detail": "data.payment.amount must be a string"
    }
  ]
}

Múltiplas entradas em errors[] são possíveis quando várias falhas de validação são reportadas na mesma resposta.

Headers de resposta
HeaderSignificado
x-nexus-request-idId de correlação (UUIDv7) presente em toda resposta, de sucesso ou erro, e propagado aos serviços upstream. Registre-o em seus logs e cite-o em chamados de suporte.
x-nexus-error-sourcePresente em toda resposta de erro: client: o gateway rejeitou sua requisição ou credenciais (autenticação, validação, limite de requisições, 404); upstream: o banco / um serviço upstream retornou o erro ou falhou, incluindo 4xx repassados do banco; gateway: a própria Cumbuca falhou. Use-o para classificar falhas sem analisar o corpo.
Códigos de erro do gateway
CódigoHTTPSignificadoRetentar?
UNAUTHORIZED401Token Bearer ausente, malformado ou expirado, ou o client_id do token não está provisionadoNão; corrija credenciais / provisionamento
INVALID_CLIENT401Credenciais Basic ausentes ou inválidas no POST /auth/v1/tokenNão
INVALID_GRANT400Requisição de token falhou: refresh_token inválido, expirado ou reutilizado, ou o servidor de autorização está indisponívelApenas quando o detalhe for "authorization server unavailable" ou "token request failed" (problemas transitórios do servidor de autorização)
INVALID_REQUEST400Corpo malformado ou campo / header obrigatório ausenteNão
UNSUPPORTED_GRANT_TYPE400grant_type diferente de client_credentials / refresh_tokenNão
UNSUPPORTED_MEDIA_TYPE415Corpo com content-type diferente de JSON / form-urlencodedNão
RATE_LIMITED429Limite de requisições por cliente excedido; veja Limites de requisiçõesSim, após retry-after
NOT_FOUND404Nenhuma rota corresponde à requisição (retornado apenas a chamadores autenticados)Não
INTERNAL_ERROR500Falha inesperada do gatewaySim, com backoff
OPUS_ERRORstatus do upstreamO upstream retornou um erro cujo corpo não pôde ser repassado como estáDepende do status
OPUS_UNAVAILABLE502Falha de transporte ou timeout em direção ao upstreamSim (transitório)
REGISTER_ERRORstatus do upstreamO repositório de reciprocidade retornou um erro com corpo vazio ou ilegívelDepende do status
REGISTER_UNAVAILABLE502O repositório de reciprocidade está inacessívelSim (transitório)
UPSTREAM_ERROR502O portal de gestão de consentimentos retornou uma resposta não-2xxSim (transitório)
UPSTREAM_UNAVAILABLE502O portal de gestão de consentimentos está inacessívelSim (transitório)

Erros dos bancos detentores dos dados são repassados com o status original e suas próprias entradas em errors[]; tolere códigos além dos listados acima.

Exceção de formato: falhas do POST /openid/authorize retornam 422 com o corpo {"error", "error_description"}, o único erro desta API que não usa o envelope errors[] acima.

Negação por padrão: um caminho desconhecido ou digitado errado retorna 401 UNAUTHORIZED quando o token Bearer está ausente ou é inválido; apenas chamadores autenticados recebem o 404 NOT_FOUND ("no route matches this request"). Se um 401 surpreender você, verifique a URL além das credenciais.

Limites de Requisições

As requisições são limitadas por client_id em uma janela de tempo fixa compartilhada entre todos os endpoints autenticados por Bearer da API (consentimentos, leituras de dados, tudo). Quando o limite é excedido, a API retorna 429 com o código RATE_LIMITED e um header de resposta retry-after com o número inteiro de segundos até a janela reiniciar; respeite-o antes de retentar.

  • POST /auth/v1/token não é limitado por taxa.
  • Nenhum header x-ratelimit-* é emitido em respostas de sucesso; o único sinal é o próprio 429.
  • Os limites são configurados por ambiente (padrão de 600 requisições por 60 s). Não fixe suposições no código; baseie o backoff no retry-after.

Timeouts e Retentativas

Chamadas encaminhadas ao banco detentor dos dados operam sob um orçamento de upstream de aproximadamente 30 segundos; esgotado esse tempo, o gateway responde 502 (OPUS_UNAVAILABLE). Configure timeouts de pelo menos ~35 segundos no seu cliente ou você truncará respostas lentas porém bem-sucedidas.

  • GETs podem ser retentados pelo próprio gateway, apenas em falhas de conexão (máximo de 2 retentativas, ou seja, até 3 tentativas no total, sem backoff), e são seguros para você retentar também.
  • Escritas nunca são retentadas pelo gateway. Um 502 em um POST ou PATCH é indeterminado: a operação pode ou não ter chegado ao banco. Reconcilie com um GET em vez de retentar às cegas: após uma falha ambígua no POST /consent-management/v1/consents, consulte o consentimento antes de criar um novo.
  • Não há suporte a chave de idempotência; implemente sua própria deduplicação para escritas.
  • Erros 502 / *_UNAVAILABLE são transitórios e retentáveis. Atenção: uma indisponibilidade do servidor de autorização no POST /auth/v1/token aparece como 400 INVALID_GRANT ("authorization server unavailable"), não como um 5xx.

URIs de Callback

Os endpoints de criação de consentimento aceitam um callbackApplicationUri no corpo da requisição. Após o usuário autorizar (ou rejeitar) o consentimento no banco, o banco o redireciona de volta para essa URI com parâmetros de status na query string. Cada fluxo de negócio usa convencionalmente seu próprio caminho de callback para que o handler de redirecionamento consiga rotear adequadamente:

FluxocallbackApplicationUri sugerida
Compartilhamento de dadoshttps://<your-host>/consent/callback

Início Rápido - Compartilhamento de Dados

Fluxo completo para leitura de dados da conta bancária de um usuário: solicitar consentimento, escolher uma conta e obter suas transações.

  1. Obtenha um token de acesso: chame POST /auth/v1/token com suas credenciais via mTLS. Guarde o access_token retornado para as chamadas abaixo e o refresh_token para quando o token de acesso expirar (chame este mesmo endpoint com grant_type=refresh_token). Toda chamada a partir daqui deve carregar Authorization: Bearer <access_token>.
  2. Escolha o banco do usuário: chame GET /consent-management/v1/participants?role=DADOS&familyType=accounts para deixar o diretório filtrar no servidor: role=DADOS mantém apenas as instituições de compartilhamento de dados e familyType=accounts mantém apenas as que expõem as APIs de contas que você vai consultar abaixo. Capture o authorisationServerId escolhido.
  3. Crie o consentimento de compartilhamento de dados: chame POST /consent-management/v1/consents com o documento do usuário e as permissões necessárias (no mínimo ACCOUNTS_READ, ACCOUNTS_TRANSACTIONS_READ e RESOURCES_READ). Você receberá de volta um consentId e uma redirectUrl.
  4. Envie o usuário ao banco: redirecione o navegador para a redirectUrl retornada. O usuário autentica e autoriza o compartilhamento no site do banco e é redirecionado de volta para seu callbackApplicationUri.
  5. Conclua a autorização: quando o banco redirecionar de volta para o seu callbackApplicationUri, capture a query string completa (ela contém code, id_token e state). Envie-a para POST /openid/authorize no campo data do body. Uma resposta 204 No Content significa que a Cumbuca validou o código com o banco e o consentimento está sendo autorizado.
  6. Confirme que o consentimento está autorizado: quando o callback chegar, chame GET /consent-management/v1/consents/{consentId} e verifique se status == "AUTHORISED". Se for REJECTED, pare aqui e exiba um erro.
  7. Liste as contas do usuário: chame GET /open-finance/accounts/v2/accounts com o consentId autorizado no header x-consent-id. Escolha o accountId que deseja consultar (por exemplo, a primeira conta corrente).
  8. Leia as transações: chame GET /open-finance/accounts/v2/accounts/{accountId}/transactions usando os mesmos headers. A resposta contém o histórico de transações em data[].

O mesmo padrão (endpoint de listagem → escolher id → buscar sub-recurso) se aplica a todas as outras famílias de dados: cartões de crédito, empréstimos, investimentos e assim por diante. Basta solicitar as permissões correspondentes na etapa 2 e chamar os endpoints apropriados na referência de Consumo de Dados.

Autenticação

Toda requisição à Cumbuca Gateway API requer um token Bearer OAuth 2.0 no header Authorization. Obtenha um token chamando POST /auth/v1/token com as credenciais do seu cliente antes de qualquer outra chamada. Os tokens têm vida curta; reutilize-os até o vencimento e depois solicite um novo.

POST/auth/v1/token

Emite um token de acesso usando o fluxo Client Credentials ou Refresh Token. Este endpoint não usa o token Bearer; em vez disso, envie as credenciais do seu cliente como Authorization: Basic base64(client_id:client_secret).

Headers
Content-Typeobrigatório application/x-www-form-urlencoded
Authorizationobrigatório Basic <base64(client_id:client_secret)>
Body (form-encoded)
CampoValor
grant_typeobrigatório client_credentials ou refresh_token
scopeOpcional: lista de escopos separados por espaço. Aplica-se apenas ao client_credentials.
refresh_tokenObrigatório quando grant_type for refresh_token. O token retornado em uma resposta anterior.
Exemplo
POST /auth/v1/token
Content-Type: application/x-www-form-urlencoded
Authorization: Basic <base64(client_id:client_secret)>

grant_type=client_credentials
Resposta (200)
{
  "access_token": "eyJhbGciOiJSUzI1NiJ9...",
  "token_type": "Bearer",
  "expires_in": 3600,
  "refresh_token": "dGhpcyBpcyBhIHJlZnJlc2ggdG9rZW4...",
  "refresh_expires_in": 2592000
}
Envie o token em todas as requisições seguintes como: Authorization: Bearer <access_token>

Diretório

GET/consent-management/v1/participants

Retorna todas as instituições registradas no diretório de participantes do Open Finance Brasil. Os clientes devem filtrar pelos papéis que lhes interessam, tipicamente DADOS (dados) e CONTA (pagamentos), e pela claim Status == "Active".

Headers
Authorizationobrigatório Token Bearer
Parâmetros de query
role queryFiltra entradas cujos OrgDomainRoleClaims contenham o role informado; ex.: DADOS (dados) ou CONTA (pagamentos). Os tipos de role estão sujeitos a mudanças; verifique a spec do diretório para a lista atual.
familyType queryFiltra entradas cujos ApiResources contenham o ApiFamilyType informado; ex.: accounts, credit-cards-accounts.

Ambos os filtros são aplicados no servidor, permitindo restringir o diretório antes de ele chegar ao seu cliente. Exemplo: GET /consent-management/v1/participants?role=DADOS&familyType=accounts.

Resposta (200)
[
  {
    "CustomerFriendlyName": "Banco X",
    "CustomerFriendlyLogoUri": "https://...",
    "AuthorisationServerIds": ["asid-uuid"],
    "OrgDomainRoleClaims": [
      { "Role": "DADOS", "Status": "Active" },
      { "Role": "CONTA", "Status": "Active" }
    ],
    "ApiResources": [{ "ApiFamilyType": "accounts" }],
    "Organisations": [{ "RegisteredName": "BANCO X S.A." }]
  }
]

Cada entrada pode conter múltiplos AuthorisationServerIds; trate cada um como uma instituição separada e selecionável, pois podem corresponder a diferentes marcas ou linhas de produto sob a mesma entidade jurídica.

POST/openid/authorize

Conclui o loop de autorização OAuth 2.0. Após o provedor de dados redirecionar o usuário de volta para o seu callbackApplicationUri, envie a query string completa do callback aqui para que a Cumbuca troque o código de autorização por tokens e finalize o consentimento. Retorna 204 No Content em caso de sucesso.

Headers
Authorizationobrigatório Token Bearer
x-authorisation-server-idobrigatório
Body
{
  "data": "code=LxSev...&id_token=eyJ...&state=dXJu..."
}

O campo data deve conter a query string completa exatamente como o banco a adicionou ao seu callbackApplicationUri.

Resposta

204 No Content: autorização concluída. Sem corpo na resposta.

Resposta (422)
{
  "error": "authorization_failed",
  "error_description": "authorization could not be completed"
}

Qualquer falha retorna 422 com este formato {error, error_description}, a única exceção ao formato de erros. Isso inclui o caso rotineiro em que o usuário nega a solicitação no banco: o callback então traz error=access_denied&state=... em vez de um código; envie-o aqui mesmo assim, e o erro OIDC do upstream (ex.: access_denied) é repassado no corpo do 422.

Ciclo de vida do consentimento. Além da criação e da consulta, três operações de ciclo de vida estão disponíveis na referência da API: DELETE /consent-management/v1/consents/{consentId} revoga o consentimento (retorna 204); POST .../consents/{consentId}/authorisation-retry gera uma nova redirectUrl quando a tentativa original de autorização caducou (ex.: o usuário abandonou o redirecionamento ao banco); e POST .../consents/{consentId}/extends renova a expiração de um consentimento AUTHORISED. Apenas este POST exige adicionalmente os headers x-customer-user-agent e x-fapi-customer-ip-address, e um GET no mesmo caminho lista o histórico de extensões.

Consumo de Dados (Fase 2) - GETs Autenticados

Todos os endpoints nesta seção seguem o mesmo formato:

Clientes

EndpointObservações
GET /open-finance/customers/v2/personal/identificationsIdentificação de pessoa física
GET /open-finance/customers/v2/business/identificationsIdentificação de pessoa jurídica
GET /open-finance/customers/v2/personal/financial-relationsRelacionamentos financeiros de pessoa física
GET /open-finance/customers/v2/business/financial-relationsRelacionamentos financeiros de pessoa jurídica
GET /open-finance/customers/v2/personal/qualificationsQualificações de pessoa física (renda etc.)
GET /open-finance/customers/v2/business/qualificationsQualificações de pessoa jurídica

Contas (Corrente / Poupança)

EndpointObservações
GET /open-finance/accounts/v2/accountsListar contas
GET /open-finance/accounts/v2/accounts/{accountId}Detalhes da conta
GET /open-finance/accounts/v2/accounts/{accountId}/balancesSaldos
GET /open-finance/accounts/v2/accounts/{accountId}/overdraft-limitsLimites de cheque especial
GET /open-finance/accounts/v2/accounts/{accountId}/transactionsTransações

Cartões de Crédito

EndpointObservações
GET /open-finance/credit-cards-accounts/v2/accountsListar contas de cartão
GET /open-finance/credit-cards-accounts/v2/accounts/{id}Detalhes da conta de cartão
GET /open-finance/credit-cards-accounts/v2/accounts/{id}/billsFaturas
GET /open-finance/credit-cards-accounts/v2/accounts/{id}/bills/{billId}/transactionsTransações da fatura
GET /open-finance/credit-cards-accounts/v2/accounts/{id}/limitsLimites do cartão
GET /open-finance/credit-cards-accounts/v2/accounts/{id}/transactionsTransações do cartão

Operações de Crédito (4 famílias)

Formato genérico para os escopos loans, financings, invoice-financings e unarranged-accounts-overdraft:

Endpoint (com {scope})Observações
GET /open-finance/{scope}/v2/contractsListar contratos
GET /open-finance/{scope}/v2/contracts/{contractId}Detalhes do contrato
GET /open-finance/{scope}/v2/contracts/{contractId}/paymentsHistórico de pagamentos
GET /open-finance/{scope}/v2/contracts/{contractId}/scheduled-instalmentsParcelas programadas
GET /open-finance/{scope}/v2/contracts/{contractId}/warrantiesGarantias / colaterais

Investimentos (5 famílias)

Escopos: bank-fixed-incomes, credit-fixed-incomes, variable-incomes, treasure-titles, funds.

EndpointObservações
GET /open-finance/{scope}/v1/investmentsListar investimentos
GET /open-finance/{scope}/v1/investments/{id}Detalhes do investimento
GET /open-finance/{scope}/v1/investments/{id}/balancesSaldos
GET /open-finance/{scope}/v1/investments/{id}/transactionsTransações históricas
GET /open-finance/{scope}/v1/investments/{id}/transactions-currentTransações do período atual

Câmbio (FX)

EndpointObservações
GET /open-finance/exchanges/v1/operationsListar operações de câmbio
GET /open-finance/exchanges/v1/operations/{operationId}Detalhes da operação
GET /open-finance/exchanges/v1/operations/{operationId}/eventsEventos da operação

Recursos (descoberta)

EndpointObservações
GET /open-finance/resources/v3/resourcesLista todos os recursos aos quais o consentimento concede acesso

Reciprocidade

Como receptor de dados, você também deve disponibilizar ao ecossistema os dados cadastrais dos seus próprios correntistas (reciprocidade). A escrita abaixo popula o repositório de reciprocidade que a Cumbuca serve em seu nome: uma vez registrado o cliente, outros participantes do Open Finance que consultarem sua instituição recebem uma verificação positiva de correntista e os dados de identificação registrados.

PUT/personal/identifications/register

Registra (ou atualiza) o registro de identificação pessoal de um dos seus correntistas. As escritas são upserts idempotentes chaveados pelo CPF do cliente e atribuídos ao client_id do seu token Bearer. Chame-o quando um cliente se tornar correntista e sempre que seus dados cadastrais mudarem. Os registros que você escreve aqui sempre têm precedência sobre o registro automático de reciprocidade do gateway.

Headers
Authorizationobrigatório Bearer <access_token>
content-typeobrigatório application/json
Corpo

Um registro de identificação pessoal do Open Finance, encaminhado como está. A validação exige documents.cpfNumber (exatamente 11 dígitos) mais os campos de nível superior updateDateTime, personalId, brandName, civilName, birthDate, hasBrazilianNationality e contacts (um objeto; seus arrays postalAddresses[], phones[] e emails[] são opcionais e armazenados quando presentes).

Resposta (201)
{
  "data": { "cpf": "12345678901" }
}

Erros: 400 "Missing or invalid required fields"; 422 quando seu tenant delega a reciprocidade (nada é armazenado na Cumbuca); 502 REGISTER_UNAVAILABLE quando o repositório de reciprocidade está inacessível.

Clientes com delegação: se a sua instituição responde às consultas de reciprocidade a partir do próprio serviço em vez de registrar dados na Cumbuca, não chame este endpoint; veja o guia de reciprocidade.

Gestão de Consentimentos

Permite que o usuário final visualize, gerencie e revogue todos os consentimentos que autorizou para o cliente. A chamada retorna uma URL de uso único; redirecione o usuário para lá a fim de abrir o portal de gestão. Veja também Reciprocidade para a escrita de registro que mantém os dados dos seus próprios correntistas disponíveis ao ecossistema.

POST/management/result

Retorna uma URL de uso único com um token de sessão embutido. Redirecione o usuário final para essa URL para acessar o portal de gestão de consentimentos. Você chama este endpoint no gateway (mesma URL base e mesmo token Bearer de todos os outros endpoints desta referência); a Cumbuca então assina internamente um JWT PS256 e o entrega ao portal de gestão de consentimentos em seu nome, de modo que a sua integração nunca manipula o JWT.

Headers
Authorizationobrigatório Bearer <access_token>
content-typeobrigatório application/json
Corpo
{
  "document": "12345678901",
  "representativeCpf": "98765432100"
}
Campos do corpo
CampoTipoObservações
documentstringobrigatório CPF (11 dígitos) ou CNPJ (14 dígitos) do usuário final
representativeCpfstringopcional CPF do representante; usado apenas quando document é um CNPJ e um representante de pessoa jurídica atua em nome da empresa
Resposta (200)
{
  "redirectUrl": "https://.../management/?token=..."
}

A URL é de uso único e de curta duração. Redirecione o usuário imediatamente; não a persista.

Erros: 400 INVALID_REQUEST: document ausente ou que não é um CPF (11) / CNPJ (14 dígitos) válido; 500 INTERNAL_ERROR "Signing unavailable": a configuração de assinatura do tenant ainda não foi provisionada (pré-requisito de onboarding; contate a Cumbuca); 502 UPSTREAM_ERROR / UPSTREAM_UNAVAILABLE: o portal falhou ou estava inacessível.

Apêndice

Mapeamento de permissões

O Open Finance Brasil organiza as permissões por categoria de dados e agrupamento (a unidade granular de compartilhamento que o usuário autoriza). Cada agrupamento mapeia para um conjunto de strings de permissão reguladas. RESOURCES_READ deve sempre ser incluído ao criar um consentimento de compartilhamento de dados.

Role Categoria de dados Agrupamento Permissions
DADOS Cadastro Dados Cadastrais PF CUSTOMERS_PERSONAL_IDENTIFICATIONS_READ
RESOURCES_READ
Informações complementares PF CUSTOMERS_PERSONAL_ADITTIONALINFO_READ
RESOURCES_READ
Dados Cadastrais PJ CUSTOMERS_BUSINESS_IDENTIFICATIONS_READ
RESOURCES_READ
Informações complementares PJ CUSTOMERS_BUSINESS_ADITTIONALINFO_READ
RESOURCES_READ
Contas Saldos ACCOUNTS_READ
ACCOUNTS_BALANCES_READ
RESOURCES_READ
Limites ACCOUNTS_READ
ACCOUNTS_OVERDRAFT_LIMITS_READ
RESOURCES_READ
Extratos ACCOUNTS_READ
ACCOUNTS_TRANSACTIONS_READ
RESOURCES_READ
Cartão de Crédito Limites CREDIT_CARDS_ACCOUNTS_READ
CREDIT_CARDS_ACCOUNTS_LIMITS_READ
RESOURCES_READ
Transações CREDIT_CARDS_ACCOUNTS_READ
CREDIT_CARDS_ACCOUNTS_TRANSACTIONS_READ
RESOURCES_READ
Faturas CREDIT_CARDS_ACCOUNTS_READ
CREDIT_CARDS_ACCOUNTS_BILLS_READ
CREDIT_CARDS_ACCOUNTS_BILLS_TRANSACTIONS_READ
RESOURCES_READ
DADOS Operações de Crédito Dados do Contrato LOANS_READ
LOANS_WARRANTIES_READ
LOANS_SCHEDULED_INSTALMENTS_READ
LOANS_PAYMENTS_READ
FINANCINGS_READ
FINANCINGS_WARRANTIES_READ
FINANCINGS_SCHEDULED_INSTALMENTS_READ
FINANCINGS_PAYMENTS_READ
UNARRANGED_ACCOUNTS_OVERDRAFT_READ
UNARRANGED_ACCOUNTS_OVERDRAFT_WARRANTIES_READ
UNARRANGED_ACCOUNTS_OVERDRAFT_SCHEDULED_INSTALMENTS_READ
UNARRANGED_ACCOUNTS_OVERDRAFT_PAYMENTS_READ
INVOICE_FINANCINGS_READ
INVOICE_FINANCINGS_WARRANTIES_READ
INVOICE_FINANCINGS_SCHEDULED_INSTALMENTS_READ
INVOICE_FINANCINGS_PAYMENTS_READ
RESOURCES_READ
DADOS Investimento Dados da Operação BANK_FIXED_INCOMES_READ
CREDIT_FIXED_INCOMES_READ
FUNDS_READ
VARIABLE_INCOMES_READ
TREASURE_TITLES_READ
RESOURCES_READ
DADOS Câmbio Dados da Operação EXCHANGES_READ
RESOURCES_READ

Cumbuca Gateway API - Compartilhamento de Dados.