Reciprocidade
Como a Cumbuca Gateway API cumpre o dever de reciprocidade do Open Finance, responder às consultas de outros participantes sobre os seus correntistas, nos dois modos de operação: sem delegação, em que a Cumbuca armazena os cadastros e responde por você, e com delegação, em que cada consulta é encaminhada ao vivo, via mTLS, para um serviço que você mesmo opera.
O que é Reciprocidade
Participar do Open Finance Brasil como receptor de dados traz consigo um dever de reciprocidade: outros participantes podem perguntar se um determinado documento pertence a um correntista da sua instituição e ler os dados cadastrais (identificação) desse cliente. A Cumbuca cumpre esse dever de duas formas, definidas por uma única configuração de instância, a delegação.
Com e sem delegação
Sem delegação (delegação desativada), o padrão. A Cumbuca armazena os cadastros dos clientes que conhece (pelo registro automático que segue um consentimento autorizado, ou pelas escritas PUT /personal/identifications/register e PUT /business/identifications/register) e responde ela mesma às consultas do ecossistema, a partir do próprio armazenamento. O seu serviço não é chamado.
Com delegação (delegação ativada). A Cumbuca não armazena nada. Toda consulta de reciprocidade é encaminhada ao vivo, via mTLS, para um serviço que você implementa e opera. Ele passa a ser a fonte da verdade.
Comparação
| Sem delegação | Com delegação | |
|---|---|---|
| Onde vivem os dados dos clientes | Armazenados na Cumbuca | No seu serviço; nada armazenado na Cumbuca |
| Quem responde às consultas do ecossistema | A Cumbuca, a partir do próprio armazenamento | Seu serviço, uma chamada ao vivo por consulta |
| Registro automático pós-consentimento | Executado (detalhes) | Ignorado (detalhes) |
PUT /personal/identifications/registerPUT /business/identifications/register | 201: registro armazenado | 422: sempre recusado (detalhes) |
| Endpoints que o seu serviço expõe | Nenhum | Quatro, mais três se você atende clientes PJ (contrato) |
| Dependência de disponibilidade | Nenhuma sobre seus sistemas | Uma indisponibilidade do seu serviço falha as consultas de reciprocidade do tenant (detalhes) |
Registro Automático (sem delegação)
Quando a instância não delega, é a própria Cumbuca que precisa conhecer os seus correntistas para responder às consultas de reciprocidade. Ela popula esse armazenamento automaticamente, sem nenhuma ação do parceiro, a partir dos consentimentos de compartilhamento de dados criados pela sua instância:
- Ao criar um consentimento de compartilhamento, a Cumbuca passa a acompanhá-lo.
- O Open Finance não notifica mudança de status, então a Cumbuca faz polling do consentimento até ele chegar a
AUTHORISED(ou expirar, quando o ecossistema recusa consentimentos não autorizados em ~1 h). - Uma vez autorizado, a Cumbuca lê as identificações do cliente pelo próprio consentimento (leitura billable) e grava cada registro no seu armazenamento, com
x-data-source: internal. Um consentimento de pessoa física alimenta/personal/identifications; um consentimento de pessoa jurídica (que carregabusinessEntity) alimenta/business/identifications.
Permissions obrigatórias
O registro automático só é possível se o consentimento carregar a permission que autoriza a Cumbuca a ler os dados de identificação do cliente. Por isso, quando a instância não delega, a Cumbuca adiciona a permission correspondente automaticamente na criação do consentimento, garantindo que o cadastro de reciprocidade possa ser populado:
| Consentimento | Permission adicionada |
|---|---|
Pessoa física (sem businessEntity) | CUSTOMERS_PERSONAL_IDENTIFICATIONS_READ |
Pessoa jurídica (com businessEntity) | CUSTOMERS_BUSINESS_IDENTIFICATIONS_READ |
Com Delegação: o Contrato do Seu Serviço
Quando a sua instância delega, você entrega à Cumbuca uma URL base no onboarding. HTTPS é obrigatório em produção e homologação. Sob essa URL base, seu serviço deve implementar os endpoints JSON POST abaixo; os caminhos são relativos a essa URL base. Os endpoints de pessoa jurídica (PJ) só são obrigatórios se a sua instituição atende clientes pessoa jurídica.
| Endpoint | Responde com | |
|---|---|---|
POST /check-account-holder | booleano | obrigatório |
POST /personal/identifications | array | obrigatório |
POST /personal/qualifications | objeto | obrigatório |
POST /personal/financial-relations | objeto | obrigatório |
POST /business/identifications | array | só PJ |
POST /business/qualifications | objeto | só PJ |
POST /business/financial-relations | objeto | só PJ |
data e usam "data": [] para "nada a informar". Qualifications e financial-relations respondem com um único objeto em data e sinalizam "sem registro para este documento" com um HTTP 404 (veja abaixo).
- Toda requisição enviada pela Cumbuca é um POST JSON com
content-type: application/json. Os documentos trafegam apenas no corpo, nunca na query string. - Toda requisição carrega o header
x-nexus-request-id(UUIDv7). Registre-o em log: ele também é ecoado como header de resposta em toda resposta do gateway Cumbuca, funcionando como chave de correlação entre serviços para suporte. - As respostas devem ser
HTTP 200com exatamente os formatos JSON documentados abaixo. Formatos errados não são tolerados em nenhum ponto da cadeia: eles falham a consulta (veja o mapeamento de erros).
| Header | Valor |
|---|---|
content-type | application/json |
x-nexus-request-id | Id de correlação UUIDv7; registre em log e inclua em chamados de suporte |
POST/check-account-holder
O gateway Cumbuca pergunta se o documento informado pertence a um correntista da sua instituição. É um requisito da integração, não a entrega dos dados de reciprocidade em si: trata-se de uma verificação de titularidade que o fluxo exige, distinta dos endpoints de identificação abaixo, que devolvem os dados cadastrais efetivamente compartilhados na reciprocidade. Seu serviço precisa expô-la para operar no Open Finance.
{
"cpf": "12345678901",
"cnpj": "12345678000199" // opcional
}
| Campo | Tipo | Observações |
|---|---|---|
cpf | string | obrigatório O CPF de 11 dígitos do usuário logado (a pessoa física; numa pessoa jurídica, o CPF do representante) |
cnpj | string | opcional O documento de pessoa jurídica, presente apenas quando acompanha o consentimento; sempre 14 dígitos |
cnpj. O campo cpf é sempre o CPF de 11 dígitos do usuário logado; o CNPJ, quando houver, chega no campo cnpj (14 dígitos).
{
"data": { "isAccountHolder": true }
}
POST/personal/identifications
A Cumbuca busca no seu serviço os registros de identificação de pessoa física (personal-identifications) do Open Finance.
{
"cpf": "12345678901"
}
{
"data": [
{ /* registro personal-identifications do Open Finance Brasil */ }
]
}
POST/business/identificationsopcional
A Cumbuca busca no seu serviço os registros de identificação de pessoa jurídica (business-identifications) do Open Finance. Obrigatório apenas se a sua instituição atende clientes pessoa jurídica (PJ); instituições que atendem somente pessoas físicas não precisam expô-lo.
{
"cnpj": "12345678000199"
}
{
"data": [
{ /* registro business-identifications do Open Finance Brasil */ }
]
}
POSTQualifications e financial relations
Quatro endpoints que compartilham um único contrato. A Cumbuca busca no seu serviço os dados de qualificação ou de relacionamento financeiro do cliente. Diferente de identifications, cada um responde com um único objeto, não com um array.
| Caminho | Campo do corpo | |
|---|---|---|
/personal/qualifications | cpf | obrigatório |
/personal/financial-relations | cpf | obrigatório |
/business/qualifications | cnpj | só PJ |
/business/financial-relations | cnpj | só PJ |
{
"cpf": "12345678901" // "cnpj" nos caminhos de pessoa jurídica
}
{
"data": { /* objeto de qualification / financial-relations do Open Finance Brasil */ }
}
404 quando não houver registro para o documento. Aqui não existe equivalente de objeto vazio para o "data": []. A Cumbuca reconhece o seu 404 como "documento sem registro" e responde 404 à instituição solicitante, exatamente o que uma instância não delegada devolve para um documento que nunca foi registrado. Qualquer outra falha é tratada como indisponibilidade do seu lado.
mTLS no Trecho Delegado
Toda chamada da Cumbuca para o seu serviço trafega sobre TLS mútuo. Não há bearer token nem API key nesse trecho: o certificado de cliente do gateway é a única autenticação.
- O que a Cumbuca apresenta: um certificado de cliente do gateway em toda chamada delegada. Seu serviço deve exigir um certificado de cliente e validar / permitir explicitamente o da Cumbuca; conexões sem ele devem ser rejeitadas. O certificado é trocado durante o onboarding.
- O que você deve servir: um certificado TLS de servidor encadeado a uma CA pública. Se o seu não for, forneça sua cadeia de CA à Cumbuca no onboarding para que seja adicionada ao trust store do gateway.
- Sem fallback em texto claro: em produção e homologação, se o certificado de cliente do gateway estiver indisponível a Cumbuca recusa a chamada (
502 DELEGATED_UNAVAILABLE) em vez de chamar sem mTLS. Além disso, uma instância delegada sequer inicializa sem o certificado configurado.
Orçamento de Timeout
- O gateway espera até 30 segundos pela sua resposta: o timeout de recepção configurado nele, que tem padrão de 30 s e pode variar por implantação (o trecho interno que a precede tem um orçamento fixo de 30 segundos). Responda com folga dentro desse limite, idealmente bem abaixo de um segundo, já que essas consultas ficam no caminho de requisição de outra instituição.
- Tentativa única, sem retry. Uma resposta lenta ou com falha falha imediatamente a consulta; o gateway não tenta de novo.
Semântica de Falhas
- Sem resposta padrão de fallback. Quando seu serviço está fora do ar, estoura o timeout ou responde com formato errado, a consulta de reciprocidade falha: a instituição solicitante recebe um erro, nunca um "não é correntista" por padrão.
- Seus corpos de erro são descartados. Quando seu serviço responde um status diferente de 200, a Cumbuca repassa o status com um envelope genérico
DELEGATED_ERRORe descarta o seu corpo de resposta (proteção de PII). Não conte com a propagação de detalhes de erro; use ox-nexus-request-ide seus próprios logs. - Envelope de erro. Os erros do gateway seguem o formato Open Finance
{"errors":[{"code","title","detail"}]}e carregam os headers de respostax-nexus-request-idex-nexus-error-source(client|upstream|gateway).
Mapeamento de erros
O que cada comportamento do seu serviço produz na cadeia:
| Comportamento do seu serviço | Resultado no gateway Cumbuca | O que a instituição solicitante vê |
|---|---|---|
200 com o formato exato documentado | 200: dados encaminhados | 200 com os dados |
| Status diferente de 200 | Mesmo status, código DELEGATED_ERROR ("the delegated client returned an error"); seu corpo descartado | 500 INTERNAL_SERVER_ERROR |
| Timeout (> 30 s), conexão recusada, falha de TLS | 502 DELEGATED_UNAVAILABLE ("the delegated client is unavailable") | 500 INTERNAL_SERVER_ERROR |
200 com corpo não-JSON ou formato errado | 502 DELEGATED_UNAVAILABLE | 500 INTERNAL_SERVER_ERROR |
200 objeto JSON sem um array data (identifications) | Passa pelo gateway, rejeitado adiante | 500 INTERNAL_SERVER_ERROR |
404 em qualifications / financial-relations | 404: reconhecido como "documento sem registro" | 404, igual a uma instância não delegada |
O Que Muda Quando Você Delega
Registro retorna 422
Em uma instância delegada, as duas escritas de registro voltadas ao parceiro, PUT /personal/identifications/register e PUT /business/identifications/register, são sempre recusadas: toda requisição autenticada e bem-formada recebe 422 e nada é armazenado (corpos malformados ainda recebem os genéricos 400/415, e autenticação ausente recebe 401):
HTTP/1.1 422
x-nexus-error-source: client
x-nexus-request-id: <uuidv7>
{
"errors": [
{
"code": "UNKNOWN",
"title": "Unknown Error",
"detail": "Registration not supported for a delegated client"
}
],
"meta": { "requestDateTime": "2026-07-15T12:00:00Z" }
}
Registro automático é ignorado
O registro automático que popula o armazenamento da Cumbuca não se aplica quando você delega. Depois que um consentimento chega a AUTHORISED, a Cumbuca ainda tenta a gravação interna, tanto de pessoa física quanto de pessoa jurídica, mas ela é recusada com o mesmo 422 (nada é armazenado na Cumbuca) e a etapa é silenciosamente ignorada. O seu serviço é o único lugar de onde vêm os dados de reciprocidade. A Cumbuca também deixa de adicionar a permission de identificações aos consentimentos em uma instância delegada, já que nunca precisa realizar essa leitura.
LGPD - nada armazenado na Cumbuca
Com a delegação habilitada, nenhum dado cadastral de cliente para reciprocidade é retido na Cumbuca: as escritas de registro são recusadas antes da validação, e toda leitura é respondida ao vivo pelo seu serviço. Os dados pessoais tratados para reciprocidade permanecem dentro da sua infraestrutura.