Download OpenAPI specification:Download
O Diretório de Identificadores de Contas Transacionais - DICT - é o serviço do arranjo PIX que permite buscar detalhes de contas transacionais com chaves de endereçamento mais convenientes para quem faz um pagamento. Entre os tipos de chave atualmente disponíveis estão CPF, CNPJ, telefone, e-mail e EVP. As informações retornadas pelo DICT permitem ao pagador confirmar a identidade do recebedor, proporcionando uma experiência mais fácil e segura. Permitem também ao PSP do pagador criar a mensagem de instrução de pagamento a ser enviada para o sistema de liquidação com os detalhes de conta do recebedor.
O DICT utiliza autenticação mútua TLS.
As definições de autenticação para essa API estão especificados no manual de segurança PIX
Requisições que incluam ou alterem informações no DICT devem ser assinadas com XML Digital Signature pelo participante que envia a requisição. Requisições de consulta não precisam ser assinadas. Respostas retornadas pelo DICT serão assinadas digitalmente. As assinaturas devem ser validadas pelos clientes da API.
A assinatura será colocada no elemento Signature
das requisições e respostas.
O Signature
será envelopado pelo XML que está
sendo assinado (assinatura é um elemento filho).
Para mais detalhes sobre a forma de construir a assinatura, consulte o manual de segurança PIX.
Para previnir ataques de enumeração, há mecanismo de limitação da quantidade de consultas que podem ser feitas num espaço de tempo (rate-limiting). A limitação atua em dois níveis, para usuários individuais e para um participante como um todo.
Para cada um desses níveis, há limite para o número de consultas que não resultam em pagamento.
Quando algum desses limites for atingido, o serviço retornará status 429
, especificando a causa.
Cabeçalhos indicando os parâmetros de rate-limiting serão retornados nas requisições. Ver, por exemplo,
os cabeçalhos retornados ao consultar vínculo.
As seguintes mudanças são esperadas e consideradas retro-compatíveis (backwards-compatibility):
Mudanças compatíveis não geram nova versão da API. Clientes devem estar preparados para lidar com essas mudanças sem quebrar.
Mudanças incompatíveis geram nova versão da API.
O DICT retorna códigos de status HTTP para indicar sucesso ou falhas das requisições. Códigos 2xx indicam sucesso. Códigos 4xx indicam falhas causadas pelas informações enviadas pelo cliente ou pelo estado atual das entidades. Códigos 5xx indicam problemas no serviço no lado do DICT.
As respostas de erro incluem no corpo detalhes do erro seguindo o schema da RFC
Problem Details for HTTP APIs.
O campo type
identifica o tipo de erro e no DICT segue o padrão:
https://dict.pi.rsfn.net.br/api/v1/error/<TipoErro>
Abaixo estão listados os tipos de erro do DICT.
Gerais
Forbidden
BadRequest
NotFound
RateLimited
ServiceUnavailable
RequestSignatureInvalid
RequestOnBehalfUnauthorized
RequestIdAlreadyUsed
RequestId
de requisição feita anteriormente, mas com parâmetros diferentes.Vínculos
EntryInvalid
EntryLimitExceeded
EntryAlreadyExists
EntryCannotBeQueriedForBookTransfer
EntryKeyOwnedByDifferentPerson
EntryKeyInCustodyOfDifferentParticipant
EntryLockedByClaim
Reivindicações
ClaimInvalid
ClaimTypeInconsistent
ClaimKeyNotFound
ClaimAlreadyExistsForKey
ClaimResultingEntryAlreadyExists
ClaimOperationInvalid
ClaimResolutionPeriodNotEnded
ClaimCompletionPeriodNotEnded
O diretório de identificadores de contas transacionais é um conjunto de vínculos. Um vínculo é uma associação entre uma chave de endereçamento, uma conta transacional e seu dono. O dono pode ser uma pessoa física ou uma pessoa jurídica. A chave de endereçamento é usada identificar um vínculo.
Os tipos de chave suportadas atualmente são as seguintes:
Tipo | Exp. regular | Exemplo | Comentário |
---|---|---|---|
CPF | ^[0-9]{11}$ | 12345678901 | |
CNPJ | ^[0-9]{14}$ | 12345678901234 | |
PHONE | ^\+[1-9][0-9]\d{1,14}$ | +5510998765432 | |
e-mails válidos W3C HTML5 | pix@bcb.gov.br | E-mail deve possuir no máximo 77 caracteres e deve ser em minúsculo | |
EVP | [0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12} | 123e4567-e89b-12d3-a456-426655440000 | Endereço Virtual de Pagamento é um tipo de chave é gerado pelo DICT |
Novos tipos de chave poderão vir a ser adicionados no futuro. Logo, é importante que a implementação de clientes seja flexível, permitindo a adição de novos tipos de chave.
Cria um novo vínculo de chave com conta transacional.
A operação de criação de vínculo é idempotente. Isso significa que é seguro realizar uma nova tentativa em caso de falhas temporárias, como erros de conexão ou término abrupto de processos. A resposta retornada para uma requisição repetida é equivalente à resposta dada à primeira requisição processada.
Para garantir a idempotência da operação, a requisição tem um campo RequestId
. Esse campo é um
UUID versão 4 e deve ser único no contexto de um mesmo participante.
O RequestId
fica associado ao vínculo criado e é usado no cálculo do seu CID (ver seção de reconciliação).
Uma requisição de criação é considerada repetida quando o CID do vínculo contido na requisição já existe no DICT.
Caso seja feita uma requisição com um RequestId
previamente usado, mas com parâmetros diferentes para o vínculo,
será retornado o erro RequestIdAlreadyUsed
.
Signature | object |
Entry required | object (Entry) Vínculo entre uma chave de endereçamento, conta transacional e seu dono. |
Reason required | string Enum: "USER_REQUESTED" "ACCOUNT_CLOSURE" "BRANCH_TRANSFER" "ENTRY_INACTIVITY" "RECONCILIATION" Valores válidos: |
RequestId required | string <uuid> (RequestId) Chave de idempotência da requisição. UUID versão 4. |
Created
Entry Invalid
Forbidden
Service Unavailable
Servidor de Produção
Servidor de Homologação
<?xml version="1.0" encoding="UTF-8" ?> <CreateEntryRequest> <Signature></Signature> <Entry> <Key>+5561988880000</Key> <KeyType>PHONE</KeyType> <Account> <Participant>12345678</Participant> <Branch>00001</Branch> <AccountNumber>0007654321</AccountNumber> <AccountType>CACC</AccountType> </Account> <Owner> <Type>NATURAL_PERSON</Type> <TaxIdNumber>11122233300</TaxIdNumber> <Name>João Silva</Name> </Owner> </Entry> <Reason>USER_REQUESTED</Reason> <RequestId>a946d533-7f22-42a5-9a9b-e87cd55c0f4d</RequestId> </CreateEntryRequest>
<?xml version="1.0" encoding="UTF-8" ?> <CreateEntryResponse> <Signature></Signature> <Entry> <Key>11122233300</Key> <KeyType>CPF</KeyType> <Account> <Participant>12345678</Participant> <Branch>00001</Branch> <AccountNumber>0007654321</AccountNumber> <AccountType>CACC</AccountType> </Account> <Owner> <Type>NATURAL_PERSON</Type> <TaxIdNumber>11122233300</TaxIdNumber> <Name>João Silva</Name> </Owner> <CreationDate>2019-11-18</CreationDate> <KeyOwnershipDate>2019-11-18</KeyOwnershipDate> </Entry> </CreateEntryResponse>
Obtém um vínculo contendo os detalhes de conta transacional associados a uma chave de endereçamento.
A política de limitação (rate-limiting) funciona com base em cabeçalhos enviados na requisição.
O parâmetro PI-PayerId
é o identificador pseudonimizado do usuário final, vinculado a um participante.
Requisições vindas de um mesmo usuário, para um mesmo participante, devem usar o mesmo identificador.
Como sugestão de implementação, pode ser utilizado o valor hexadecimal da aplicação de
HMAC-SHA-256 a um identificador do usuário,
com chave de conhecimento restrito ao participante.
Consultas a vínculos podem ter suas respostas cacheadas no PSP, devendo seguir as
diretivas contidas no header Cache-Control
.
Importante: Para fazer uso de cache, clientes HTTP geralmente precisam ser configurados. Não é comum que tenham essa funcionalidade habilitada por padrão.
Key required | string (Key) <= 77 characters Example: 12345678901 Chave de endereçamento |
PI-PayerAccountServicer required | string ^[0-9]{8} Example: 12345678 Identificador SPB do participante onde o pagador possui conta. Usado para rate-limiting. |
PI-PayerId required | string [0-9a-z]{64} Identificador pseudonimizado do pagador que originou a requisição. Usado para rate-limiting. |
PI-EndToEndId required | string Identificador fim-a-fim do pagamento associado a essa requisição. Corresponde ao campo |
OK
Not found
Rate-Limited
Servidor de Produção
Servidor de Homologação
<?xml version="1.0" encoding="UTF-8" ?> <GetEntryResponse> <Signature></Signature> <Entry> <Key>11122233300</Key> <KeyType>CPF</KeyType> <Account> <Participant>12345678</Participant> <Branch>00001</Branch> <AccountNumber>0007654321</AccountNumber> <AccountType>CACC</AccountType> </Account> <Owner> <Type>NATURAL_PERSON</Type> <TaxIdNumber>11122233300</TaxIdNumber> <Name>João Silva</Name> </Owner> <CreationDate>2019-11-18</CreationDate> <KeyOwnershipDate>2019-11-18</KeyOwnershipDate> </Entry> </GetEntryResponse>
Atualiza um vínculo.
A ser utilizado no cenário de atualização da informação da conta de um cliente, permanecendo este no mesmo PSP. Somente pode ser atualizada a informação de conta do vínculo. Outras atualizações do vínculo devem ser feitas por exclusão/inclusão do vínculo, portabilidade ou reivindicação de posse, a depender da situação.
Key required | string (Key) <= 77 characters Example: 12345678901 Chave de endereçamento |
Signature | object |
Key required | string (Key) <= 77 characters Chave de endereçamento |
Account required | object (BrazilianAccount) Dados de conta transacional no Brasil. |
Reason required | string Enum: "USER_REQUESTED" "ACCOUNT_CLOSURE" "BRANCH_TRANSFER" "ENTRY_INACTIVITY" "RECONCILIATION" Valores válidos: |
OK
Bad Request
Forbidden
Not found
Service Unavailable
Servidor de Produção
Servidor de Homologação
<?xml version="1.0" encoding="UTF-8" ?> <UpdateEntryRequest> <Signature></Signature> <Key>+5561988887777</Key> <Account> <Participant>12345678</Participant> <Branch>00001</Branch> <AccountNumber>0007654321</AccountNumber> <AccountType>CACC</AccountType> </Account> <Reason>USER_REQUESTED</Reason> </UpdateEntryRequest>
<?xml version="1.0" encoding="UTF-8" ?> <UpdateEntryResponse> <Signature></Signature> <Entry> <Key>11122233300</Key> <KeyType>CPF</KeyType> <Account> <Participant>12345678</Participant> <Branch>00001</Branch> <AccountNumber>0007654321</AccountNumber> <AccountType>CACC</AccountType> </Account> <Owner> <Type>NATURAL_PERSON</Type> <TaxIdNumber>11122233300</TaxIdNumber> <Name>João Silva</Name> </Owner> <CreationDate>2019-11-18</CreationDate> <KeyOwnershipDate>2019-11-18</KeyOwnershipDate> </Entry> </UpdateEntryResponse>
Remove um vínculo de chave com conta.
Key required | string (Key) <= 77 characters Example: 12345678901 Chave de endereçamento |
Signature | object |
Key required | string (Key) <= 77 characters Chave de endereçamento |
Reason required | string Enum: "USER_REQUESTED" "ACCOUNT_CLOSURE" "BRANCH_TRANSFER" "ENTRY_INACTIVITY" "RECONCILIATION" Valores válidos: |
OK
Forbidden
Not found
Service Unavailable
Servidor de Produção
Servidor de Homologação
<?xml version="1.0" encoding="UTF-8" ?> <DeleteEntryRequest> <Signature></Signature> <Key>+5561988887777</Key> <Reason>ACCOUNT_CLOSURE</Reason> </DeleteEntryRequest>
<?xml version="1.0" encoding="UTF-8" ?> <DeleteEntryResponse> <Signature></Signature> <Key>+5561988887777</Key> </DeleteEntryResponse>
Conforme as chaves mudem de dono ou os usuários finais criem contas transacionais em outros PSPs, os seguintes cenários precisarão ser tratados:
Para o cenário 1, deve ser criada uma reivindicação de posse. Já para o cenário 2, uma portabilidade. Em ambos cenários existirá a figura do PSP que irá ceder a chave (PSP Doador), e o PSP que irá receber a chave (PSP Reivindicador). No cenário de reivindicação de posse, o PSP doador e o reivindicador podem ser o mesmo.
Nessa especificação, reivindicação sem qualificador é usado como termo mais genérico para se referir tanto à reivindicação de posse quanto à (reivindicação de) portabilidade.
Os processos de reivindicação são sempre iniciados pelo PSP reivindicador. Uma reivindicação tem as seguintes situações:
OPEN
- Aberta pelo reivindicador, mas ainda não recebida pelo doador.WAITING_RESOLUTION
- Já foi recebida pelo doador e está aguardando a resolução. Os critérios confirmação
ou cancelamento da reivindicação seguem normas específicas a depender do tipo (posse ou portabilidade).CONFIRMED
- O doador confirmou a reivindicação. Isso implica a remoção da chave do DICT e da base interna
do PSP doador. Está aguardando o reivindicador encerrar o processo.CANCELLED
- O doador ou reivindicador cancelou a reivindicação, mantendo o vínculo inalterado (conforme estava antes da
reivindicação) tanto no DICT quanto na base interna do PSP.COMPLETED
- Tanto o DICT quanto o reivindicador atualizaram suas bases com o novo vínculo.Diagrama de estados
( OPEN )------->( WAITING_RESOLUTION )------->( CONFIRMED )------->( COMPLETED )
| /
| /
| /
| /--Apenas para
v / reivindicação
( CANCELLED )<------------v de posse
Importante! Os participantes deverão monitorar as reivindicações fazendo polling períodico no endpoint de listar reivindicações. A periodicidade adequada dependerá das definições de nível de serviço.
Cria uma nova reivindicação.
Essa operação é feita pelo participante reivindicador a pedido do usuário final. O vínculo atual permanece inalterado, até que haja a confirmação pelo PSP doador.
Nem todo tipo de chave pode ser reivindicado ou portado. A tabela abaixo define as possibilidades:
compatível? | OWNERSHIP | PORTABILITY |
---|---|---|
CPF | ✓ | |
CNPJ | ✓ | |
PHONE | ✓ | ✓ |
✓ | ✓ | |
EVP |
Signature | object |
Claim required | object (Claim) |
Created
Claim Invalid
Forbidden
Service Unavailable
Servidor de Produção
Servidor de Homologação
<?xml version="1.0" encoding="UTF-8" ?> <CreateClaimRequest> <Signature></Signature> <Claim> <Type>OWNERSHIP</Type> <Key>+5561988887777</Key> <KeyType>PHONE</KeyType> <ClaimerAccount> <Participant>12345678</Participant> <Branch>00001</Branch> <AccountNumber>0007654321</AccountNumber> <AccountType>CACC</AccountType> </ClaimerAccount> <Claimer> <Type>NATURAL_PERSON</Type> <TaxIdNumber>11122233300</TaxIdNumber> <Name>João Silva</Name> </Claimer> </Claim> </CreateClaimRequest>
<?xml version="1.0" encoding="UTF-8" ?> <CreateClaimResponse>