diff --git a/changelog.md b/changelog.md
new file mode 100644
index 0000000..3357f3e
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,24 @@
+# Changelog
+
+Mudanças relevantes na API Pix serão documentadas aqui.
+
+## [2.0.0]
+
+### Adicionado
+- Endpoint para criação de Cobranças
+- Endpoint para gerenciamento de Cobranças
+- Endpoint para consulta parametrizada de Cobranças
+- Endpoint para gerenciamento de Pix
+- Endpoint para consulta parametrizada de Pix
+- Endpoint para solicitar devolução de Pix
+- Endpoint para consultar devolução de Pix
+- Endpoint para configurar Webhooks
+- Endpoint para exibir informações de Webhooks
+- Endpoint para cancelar Webhooks
+- Endpoint para acesso ao Payload JSON de Cobrança
+- Autenticação e Autorização baseada em OAuth2
+
+### Removido
+- Recursos para gerenciamento de Documentos
+- Configuração de vencimento em calendário
+- Configuração de juros, multa e desconto em valor
diff --git a/openapi.yaml b/openapi.yaml
index cba4e49..23cd881 100644
--- a/openapi.yaml
+++ b/openapi.yaml
@@ -1,7 +1,7 @@
openapi: 3.0.0
info:
- title: API de Recebimentos PIX
- version: '0.0.1'
+ title: API Pix
+ version: "2.0.0"
license:
name: Apache 2.0
url: http://www.apache.org/licenses/LICENSE-2.0
@@ -10,78 +10,135 @@ info:
email: suporte.ti@bcb.gov.br
url: https://www.bcb.gov.br/estabilidadefinanceira/pagamentosinstantaneos
description: |-
- A API do PIX padroniza serviços oferecidos pelo PSP recebedor no contexto de configuração de QR Code Dinâmico,
- verificação de recebimentos, devolução e conciliação. Os serviços expostos pelo PSP recebedor permitem ao usuário
+ A API Pix padroniza serviços oferecidos pelo PSP recebedor no contexto do arranjo Pix, como criação de cobrança,
+ verificação de Pix recebidos, devolução e conciliação. Os serviços expostos pelo PSP recebedor permitem ao usuário
recebedor estabelecer integração de sua automação com os serviços PIX do PSP.
- # Evolução da API
+ # Evolução da API Pix
As seguintes mudanças são esperadas e consideradas retro-compatíveis (_backwards-compatibility_):
-
- - Adição de novos recursos na API.
- - Adição de novos parâmetros opcionais a requisições.
- - Adição de novos campos em respostas da API.
+
+ - Adição de novos recursos na API Pix.
+ - Adição de novos parâmetros opcionais a cobranças.
+ - Adição de novos campos em respostas da API Pix.
- Alteração da ordem de campos.
- Adição de novos elementos em enumerações
- Mudanças compatíveis não geram nova versão da API.
+ Mudanças compatíveis não geram nova versão da API Pix.
Clientes devem estar preparados para lidar com essas mudanças sem quebrar.
- Mudanças incompatíveis geram nova versão da API.
+
+ Mudanças incompatíveis geram nova versão da API Pix.
servers:
- url: https://pix.example.com/api/v1/
description: Servidor de Produção
- url: https://pix-h.example.com/api/v1/
description: Servidor de Homologação
+
+security:
+ - OAuth2:
+ - cob.write
+ - cob.read
+ - pix.write
+ - pix.read
+ - webhook.read
+ - webhook.write
+
tags:
- - name: Config
- x-displayName: Configuração de QR Code
+ - name: CobPayload
+ x-displayName: Payload JSON que representa uma Cobrança.
+ description: |-
+ Endpoint (location) utilizado pelo usuário pagador para recuperar o payload JSON que representa uma cobrança.
+ - name: Cob
+ x-displayName: Gerenciamento de cobranças
+ description: |-
+ Reune endpoints destinados a lidar com gerenciamento de cobranças.
+ - name: Pix
+ x-displayName: Gerenciamento de Pix recebidos
description: |-
- Reune endpoints destinados a lidar com configuração e remoção de QR Codes (payloads JSON)
+ Reune endpoints destinados a lidar com gerenciamento de Pix recebidos.
+ - name: Webhook
+ x-displayName: Gerenciamento de notificações
+ description: |-
+ Reune endpoints para gerenciamento de notificações por parte do PSP recebedor ao usuário recebedor.
paths:
-########################################################################################################################
-## DOCUMENTO
-########################################################################################################################
- "/documento/":
- post:
+ "/cob/{txid}":
+ parameters:
+ - name: "txid"
+ in: "path"
+ required: true
+ schema:
+ $ref: "#/components/schemas/TxId"
+ put:
tags:
- - "Config"
- summary: "Criar documento."
+ - "Cob"
+ summary: "Criar cobrança."
+ security:
+ - OAuth2: [cob.write]
description: |-
- Cria um novo payload JSON representando um QR/Link dinâmico.
+ Endpoint para criar uma cobrança.
requestBody:
- $ref: "#/components/requestBodies/DocumentoBody"
+ $ref: "#/components/requestBodies/CobBody"
responses:
- "201":
- description: "Documento gerado."
- headers:
- Location:
- description: "URL do documento gerado. Deve ser retornado no formato /documento/{txid}"
+ "200":
+ description: "Cobrança criada"
+ content:
+ "application/json":
schema:
- type: "string"
+ $ref: "#/components/schemas/CobGerada"
+ examples:
+ retorno1:
+ $ref: "#/components/examples/retorno1"
+ patch:
+ tags:
+ - "Cob"
+ summary: "Revisar cobrança."
+ security:
+ - OAuth2: [cob.write]
+ requestBody:
+ $ref: "#/components/requestBodies/CobBodyRevisada"
+ responses:
+ "200":
+ description: "Cobrança revisada. A revisão deve ser incrementada em 1."
content:
"application/json":
schema:
- $ref: "#/components/schemas/DocumentoGerado"
+ $ref: "#/components/schemas/CobGerada"
examples:
retorno1:
$ref: "#/components/examples/retorno1"
get:
parameters:
- - name: "inicio"
- in: "query"
- schema:
- type: "string"
- format: "date-time"
- title: "Data de Início"
- description: "Filtra os documentos cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339."
- - name: "fim"
- in: "query"
- schema:
- type: "string"
- format: "date-time"
- title: "Data de Fim"
- description: "Filtra os documentos cuja data de criação seja menor ou igual que a data de fim. Se a data de fim não for informada ou for informada uma data no futuro, o PSP assumirá a data e hora atuais como a data de fim. Respeita RFC 3339."
+ - name: "revisao"
+ in: "query"
+ required: false
+ description: " Permite recuperar revisões anteriores de uma cobrança. Na ausência desse parâmetro, sempre será retornada a cobrança conforme consta em sua última revisão."
+ schema:
+ $ref: "#/components/schemas/Revisao"
+ tags:
+ - "Cob"
+ summary: "Consultar cobrança."
+ security:
+ - OAuth2: [cob.read]
+ description: |-
+ Endpoint para consultar uma cobrança através de um determinado TxID.
+ responses:
+ "200":
+ description: "Dados da cobrança."
+ content:
+ "application/json":
+ schema:
+ $ref: "#/components/schemas/CobCompleta"
+ examples:
+ retorno1:
+ $ref: "#/components/examples/retorno1"
+ retorno2:
+ $ref: "#/components/examples/retorno2"
+ "/cob/":
+ get:
+ parameters:
+ - $ref: "#/components/parameters/inicio"
+ - $ref: "#/components/parameters/fim"
- name: "cpf"
in: "query"
schema:
@@ -94,312 +151,571 @@ paths:
allOf:
- $ref: "#/components/schemas/CNPJ"
- description: "Filtro pelo CNPJ do pagador. Não pode ser utilizado ao mesmo tempo que o CPF."
- - name: "url"
- in: "query"
- schema:
- type: "string"
- title: "URL do payload"
- description: "Filtro pela URL do payload JSON."
- - name: "paginacao.pagina"
+ - name: "status"
in: "query"
schema:
- type: "integer"
- format: "int32"
- title: "Página"
- description: "Página a ser retornada pela consulta. Se não for informada, o PSP assumirá que será 0."
- minimum: 0
- default: 0
- - name: "paginacao.tamanho"
- in: "query"
- schema:
- type: "integer"
- format: "int32"
- title: "Tamanho da Página"
- description: "Quantidade máxima de registros retornados em cada página. Apenas a última página pode conter uma quantidade menor de registros."
- minimum: 1
- maximum: 1000
- default: 100
+ allOf:
+ - $ref: "#/components/schemas/CobStatus"
+ - description: "Filtro pelo status da cobrança."
+ - $ref: "#/components/parameters/paginaAtual"
+ - $ref: "#/components/parameters/itensPorPagina"
tags:
- - "Config"
- summary: "Recuperar lista de documentos."
+ - "Cob"
+ summary: "Consultar lista de cobranças."
+ security:
+ - OAuth2: [cob.read]
description: |-
- Rcupera uma lista de payloads JSON.
+ Endpoint para consultar cobranças através de parâmetros como início, fim, cpf, cnpj e status.
responses:
"200":
- description: "Lista dos documentos."
+ description: "Lista de cobranças."
content:
"application/json":
schema:
- $ref: "#/components/schemas/DocumentosConsultados"
+ $ref: "#/components/schemas/CobsConsultadas"
examples:
- getDocumentos1:
- $ref: "#/components/examples/getDocumentos1"
- getDocumentos2:
- $ref: "#/components/examples/getDocumentos2"
-
- "/documento/{txid}":
+ getCobs1:
+ $ref: "#/components/examples/getCobs1"
+ getCobs2:
+ $ref: "#/components/examples/getCobs2"
+ "/pix/{e2eid}/devolucao/{id}":
parameters:
- - name: "txid"
+ - name: "e2eid"
in: "path"
required: true
schema:
- $ref: "#/components/schemas/TxId"
- get:
+ $ref: "#/components/schemas/EndToEndId"
+ - name: "id"
+ in: "path"
+ required: true
+ schema:
+ $ref: "#/components/schemas/DevolucaoId"
+ put:
tags:
- - "Config"
- summary: "Recuperar documento."
- description: |-
- Rcupera um payload JSON que representa um QR/Link dinâmico.
+ - "Pix"
+ summary: "Solicitar devolução."
+ security:
+ - OAuth2: [pix.write]
+ description: "Endpoint para solicitar uma devolução através de um e2eid do Pix e do ID da devolução."
+ requestBody:
+ description: "Dados para pedido de devolução."
+ required: true
+ content:
+ "application/json":
+ schema:
+ type: "object"
+ properties:
+ valor:
+ allOf:
+ - $ref: "#/components/schemas/Valor"
+ - description: "Valor solicitado para devolução. A soma dos valores de todas as devolucões não podem ultrapassar o valor total da cobrança."
+ example:
+ valor: "7.89"
responses:
"200":
- description: "Dados do Documento."
+ description: "Dados da devolução."
content:
"application/json":
schema:
- $ref: "#/components/schemas/DocumentoCompleto"
+ $ref: "#/components/schemas/Devolucao"
examples:
- retorno3:
- $ref: "#/components/examples/retorno3"
- retorno4:
- $ref: "#/components/examples/retorno4"
- put:
+ retorno1:
+ $ref: "#/components/examples/retorno7"
+ get:
tags:
- - "Config"
- summary: "Alterar documento."
- description: |-
- Altera um payload JSON que representa um QR/Link dinâmico.
- requestBody:
- $ref: "#/components/requestBodies/DocumentoBody"
+ - "Pix"
+ summary: "Consultar devolução."
+ security:
+ - OAuth2: [pix.read]
+ description: "Endpoint para consultar uma devolução através de um End To End ID do Pix e do ID da devolução"
responses:
"200":
- description: "Documento alterado. O campo payloadURL é igual ao de criação. A revisão deve ser incrementada."
+ description: "Dados da devolução."
content:
"application/json":
schema:
- $ref: "#/components/schemas/DocumentoGerado"
+ $ref: "#/components/schemas/Devolucao"
examples:
retorno1:
- $ref: "#/components/examples/retorno2"
- delete:
- tags:
- - "Config"
- summary: "Apagar documento."
- description: |-
- Apaga um payload JSON que representa um QR/Link dinâmico.
- responses:
- "204":
- description: "Documento apagado."
-
- "/documento/{txid}/devolucao/{id}":
+ $ref: "#/components/examples/retorno7"
+ "/pix/{e2eid}":
parameters:
- - name: "txid"
+ - name: "e2eid"
in: "path"
required: true
schema:
- $ref: "#/components/schemas/TxId"
- - name: "id"
+ $ref: "#/components/schemas/EndToEndId"
+ get:
+ tags:
+ - "Pix"
+ summary: "Consultar Pix."
+ security:
+ - OAuth2: [pix.read]
+ description: "Endpoint para consultar um Pix através de um e2eid."
+ responses:
+ "200":
+ description: "Dados do Pix efetuado."
+ content:
+ "application/json":
+ schema:
+ $ref: "#/components/schemas/Pix"
+ examples:
+ retorno1:
+ $ref: "#/components/examples/retorno3"
+ retorno2:
+ $ref: "#/components/examples/retorno4"
+ "/pix":
+ get:
+ parameters:
+ - $ref: "#/components/parameters/inicio"
+ - $ref: "#/components/parameters/fim"
+ - name: "txId"
+ in: "query"
+ schema:
+ $ref: "#/components/schemas/TxId"
+ - name: "cpf"
+ in: "query"
+ schema:
+ allOf:
+ - $ref: "#/components/schemas/CPF"
+ - description: "Filtro pelo CPF do pagador. Não pode ser utilizado ao mesmo tempo que o CNPJ."
+ - name: "cnpj"
+ in: "query"
+ schema:
+ allOf:
+ - $ref: "#/components/schemas/CNPJ"
+ - description: "Filtro pelo CNPJ do pagador. Não pode ser utilizado ao mesmo tempo que o CPF."
+ - $ref: "#/components/parameters/paginaAtual"
+ - $ref: "#/components/parameters/itensPorPagina"
+ tags:
+ - "Pix"
+ summary: "Consultar Pix recebidos."
+ security:
+ - OAuth2: [pix.read]
+ description: "Endpoint para consultar Pix recebidos"
+ responses:
+ "200":
+ description: "lista dos Pix recebidos de acordo com o critério de busca."
+ content:
+ "application/json":
+ schema:
+ $ref: "#/components/schemas/PixConsultados"
+ examples:
+ getCobs1:
+ $ref: "#/components/examples/getPix1"
+ "/{pixUrlAcessToken}":
+ parameters:
+ - name: "pixUrlAcessToken"
in: "path"
required: true
schema:
- $ref: "#/components/schemas/DevolucaoId"
+ type: "string"
+ get:
+ tags:
+ - "CobPayload"
+ servers:
+ - url: https://{fdqnPSPRecebedor}/{pixEndpoint}/v1
+ variables:
+ fdqnPSPRecebedor:
+ default: example.com
+ description: Endpoint base para que os usuário pagadores possam acessar o payload JSON que representa a cobrança.
+ summary: "Recuperar o payload JSON que representa a cobrança."
+ description: |
+ ## Endpoint (location) que serve um payload que representa uma cobrança.
+
+ No momento que o usuário pagador efetua a leitura de um QR Code dinâmico gerado pelo recebedor, esta URL será acessada e seu conteúdo consiste em uma estrutura JWS.
+ As informações sobre a segurança no acesso às urls encontram-se no Manual de Segurança do Pix disponível em nesse __[link](https://www.bcb.gov.br/estabilidadefinanceira/comunicacaodados)__.
+
+ security: []
+ responses:
+ "200":
+ description: |
+ # Descrição do Retorno
+ O retorno desse endpoint é um objeto que apresenta estrutura JWS, conforme especificado no manual de segurança. Segue um exemplo:
+
+ ```jws
+ eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXUyJ9.eyJ0eElkIjoiNTJjNDMzNjEtY2FhMS00ZGRiLTkxNTItNzA4NDI2YTI1ZGIzIiwicmV2aXNhbyI6IjMiLCJjYWxlbmRhcmlvIjp7ImNyaWFjYW8iOiIyMDIwLTA5LTE1VDE5OjM5OjU0LjAxM1oiLCJhcHJlc2VudGFjYW8iOiIyMDIwLTA0LTAxVDE4OjAwOjAwWiIsImV4cGlyYWNhbyI6IjEyMDAifSwidmFsb3IiOnsib3JpZ2luYWwiOiI1MDAuMDAifSwiY2hhdmUiOiI3NDA3YzljOC1mNzhiLTExZWEtYWRjMS0wMjQyYWMxMjAwMDIiLCJzb2xpY2l0YWNhb1BhZ2Fkb3IiOiJJbmZvcm1hciBjYXJ0w6NvIGZpZGVsaWRhZGUiLCJpbmZvQWRpY2lvbmFpcyI6W3sibm9tZSI6InF1YW50aWRhZGUiLCJ2YWxvciI6IjIifV19.khlLEW4Q4W6zIYlacIaSHzwg_q9JrIkeinmvRDcUUD3120oXXew_xqSEAWsefY28g4MhUmK-RuaZgn1_rR22ZVM1pDbblw7Sk6dlHGxEc8PbMzMgEJPLdOZRumzMLx6YBYLAYsxT-HZp_vmBT713biN3jJf3V55z9RK6Xyo1CeWvemt81_O4kyGZ9lbp7p0VhmdJ9u6_EquEyP2n0uWy2ikbe7AFobkAdBRoF8gtp891WG5-gZmk4ZzATORNQOTrytQYMyprWV7o_prVjwT308RUo9Si-FRPTvYRGqyKo-voGoQVaZgCMUjc0jLr9WqYCRMyeCJZHTJmpaCFSNQnhw
+ ```
+
+ Este objeto JWS assinado deve ser validado pelo pagador. Maiores detalhes técnicos a respeito da especificação
+ de segurança encontram-se no __[Manual de Segurança do Pix](https://www.bcb.gov.br/estabilidadefinanceira/pagamentosinstantaneos)__.
+
+ Conforme pode-se verificar no exemplo acima, o objeto JWS apresenta três fragmentos separados pelo caractere `.` (ponto). São eles: `header`, `payload` e `signature`.
+
+ Em termos de funcionalidade, o fragmento que interessa ao pagador é o `payload`, que apresenta estrutura conforme especificada pelo `schema` do presente endpoint, contendo detalhes concernentes à cobrança.
+
+ content:
+ "application/jose":
+ schema:
+ $ref: "#/components/schemas/CobPayload"
+ examples:
+ retorno1:
+ $ref: "#/components/examples/retorno8"
+ "/webhook":
put:
- tags:
- - "Config"
- summary: "Solicitar uma devolução."
- description: |-
- Solicita a devolução total ou parcial de um recebimento.
+ tags:
+ - Webhook
+ summary: Configurar o Webhook Pix.
+ description: |
+ Endpoint para configuração do serviço de notificações acerca de Pix recebidos.
+ Somente PIX associados a um txid serão notificados.
+ security:
+ - OAuth2: [webhook.write]
requestBody:
- description: "Dados para pedido de devolução."
required: true
content:
- "application/json":
+ application/json:
schema:
- type: "object"
- properties:
- valor:
- allOf:
- - $ref: "#/components/schemas/Valor"
- - description: "Valor solicitado para devolução. A soma dos valores de todas as devolucões não podem ultrapassar o valor total do documento."
- example:
- valor: "7.89"
+ $ref: "#/components/schemas/Webhook"
+ responses:
+ "201":
+ description: Webhook para notificações acerca de Pix recebidos associados a um txid.
+ callbacks:
+ listaPix:
+ "{$request.body#/webhookUrl}/pix":
+ post:
+ description: |
+ Esse serviço está protegido por uma camada de autenticação mTLS.
+ security: []
+ requestBody:
+ $ref: "#/components/requestBodies/WebhookPixBody"
+ responses:
+ "200":
+ description: "Notificação recebida com sucesso"
+ get:
+ tags:
+ - Webhook
+ summary: "Exibir informações acerca do Webook Pix."
+ description: |
+ Endpoint para recuperação de informações sobre o webhook pix.
+ security:
+ - OAuth2: [webhook.read]
+ responses:
+ "200":
+ description: "Dados da location do Payload."
+ content:
+ "application/json":
+ schema:
+ $ref: "#/components/schemas/Webhook"
+ delete:
+ tags:
+ - Webhook
+ summary: "Cancelar o webhook Pix."
+ description: |
+ Endpoint para cancelamento do webhook.
+ security:
+ - OAuth2: [webhook.write]
responses:
"204":
- description: "Devolução solicitada. Novas requisições para o mesmo ID e mesmo valor não surtem efeito."
- "409":
- description: "Este erro é retornado se for feita uma requisição para um ID que já existe, mas com valor diferente do informado. Não é possível alterar o valor de uma devolução."
-
+ description: "Webhook para notificações Pix foi cancelado."
components:
+ securitySchemes:
+ OAuth2:
+ type: oauth2
+ flows:
+ clientCredentials:
+ refreshUrl: https://pix.example.com/oauth/refresh
+ tokenUrl: https://pix.example.com/oauth/token
+ scopes:
+ cob.write: Permissão para alteração de cobranças
+ cob.read: Permissão para consulta de cobranças
+ pix.write: Permissão para alteração de Pix
+ pix.read: Permissão para consulta de Pix
+ webhook.read: Permissão para consulta do webhook
+ webhook.write: Permissão para alteração do webhook
examples:
corpo1:
summary: "Exemplo 1"
value:
calendario:
- dataVencimento: "2020-12-31"
- recebivelAposVencimento: "true"
- pagador:
+ expiracao: "3600"
+ devedor:
cpf: "12345678909"
nome: "Francisco da Silva"
valor:
original: "123.45"
- chave: "12345-123456789-123456"
+ chave: "71cdf9ba-c695-4e3c-b010-abb521a3f1be"
solicitacaoPagador: "Cobrança dos serviços prestados."
- infoAdicionais:
- - nome: "Campo 1"
- valor: "Informação Adicional1 do PSP-Recebedor"
- - nome: "Campo 2"
- valor: "Informação Adicional2 do PSP-Recebedor"
corpo2:
summary: "Exemplo 2"
value:
calendario:
- expiracao: "2020-08-12T17:35:00Z"
- pagador:
+ expiracao: "3600"
+ devedor:
cnpj: "12345678000195"
nome: "Empresa de Serviços SA"
valor:
- original: "37000.00"
- chave: "ABCDE-123456789-ABCDEF"
+ original: "37.00"
+ chave: "ac107ed7-97cd-4fe7-8df5-a5f5659bf2f3"
solicitacaoPagador: "Serviço realizado."
infoAdicionais:
- nome: "Campo 1"
valor: "Informação Adicional1 do PSP-Recebedor"
- nome: "Campo 2"
valor: "Informação Adicional2 do PSP-Recebedor"
- corpo3:
- summary: "Exemplo 3"
+ corpo4:
+ summary: "Exemplo 1"
value:
- valor:
- original: "0.12"
- chave: "00001-123456789-000001"
+ status: EM_USO
+ corpo5:
+ summary: "Exemplo 1"
+ value:
+ status: "REMOVIDA_PELO_USUARIO_RECEBEDOR"
retorno1:
summary: "Exemplo 1"
value:
- idDocumento:
- id: "P456L"
- revisao: 0
- payloadURL: "https://pix.example.com/qr/123"
- txid: "ABCDEF-0123456789-GHIJKLM"
- dataCriacao: "2020-04-01T18:30:00Z"
+ status: "ATIVA"
+ calendario:
+ criacao: "2020-09-09T20:15:00.358Z"
+ expiracao: "3600"
+ location: "pix.example.com/qr/9d36b84f-c70b-478f-b95c-12729b90ca25"
+ txid: "7978c0c9-7ea8-47e7-8e88-49634473c1f1"
+ revisao: 1
+ devedor:
+ cnpj: "12345678000195"
+ nome: "Empresa de Serviços SA"
valor:
- final: "123.45"
+ original: "567.89"
+ chave: "a1f4102e-a446-4a57-bcce-6fa48899c1d1"
+ solicitacaoPagador: "Informar cartão fidelidade"
retorno2:
- summary: "Exemplo 1"
+ summary: "Exemplo 2"
value:
- idDocumento:
- id: "P456L"
- revisao: 1
- payloadURL: "https://pix.example.com/qr/123"
- txid: "ABCDEF-0123456789-GHIJKLM"
- dataCriacao: "2020-04-02T09:15:00Z"
+ status: "CONCLUIDA"
+ calendario:
+ criacao: "2020-09-09T20:15:00.358Z"
+ expiracao: "3600"
+ location: "pix.example.com/qr/1dd7f893-a58e-4172-8702-8dc33e21a403"
+ txid: "655dfdb1-a451-4b8f-bb58-254b958913fb"
+ revisao: 1
+ devedor:
+ cnpj: "12345678000195"
+ nome: "Empresa de Serviços SA"
valor:
- final: "567.89"
+ original: "100.00"
+ chave: "40a0932d-1918-4eee-845d-35a2da1690dc"
+ solicitacaoPagador: "Informar cartão fidelidade"
+ pix:
+ - endToEndId: "E12345678202009091221kkkkkkkkkkk"
+ txid: "655dfdb1-a451-4b8f-bb58-254b958913fb"
+ valor: "110.00"
+ horario: "2020-09-09T20:15:00.358Z"
+ pagador:
+ cnpj: "12345678000195"
+ nome: "Empresa de Serviços SA"
+ infoPagador: "0123456789"
+ devolucoes:
+ - id: "123ABC"
+ rtrId: "Dxxxxxxxx202009091221kkkkkkkkkkk"
+ valor: "10.00"
+ horario:
+ solicitacao: "2020-09-09T20:15:00.358Z"
+ status: "EM_PROCESSAMENTO"
retorno3:
summary: "Exemplo 1"
value:
- allOf:
- - status: "pago"
- - $ref: "#/components/examples/corpo1/value"
- - $ref: "#/components/examples/retorno1/value"
- - devolucoes:
- - id: 12
- valor: "3.45"
- status: "devolvido"
- - id: 13
- valor: "120.00"
- status: "pendente"
+ endToEndId: "E12345678202009091221abcdef12345"
+ txid: "cd1fe328-c875-4812-85a6-f233ae41b662"
+ valor: "100.00"
+ horario: "2020-09-10T13:03:33.902Z"
+ pagador:
+ cnpj: "12345678000195"
+ nome: "Empresa de Serviços SA"
+ infoPagador: "Reforma da casa"
+ devolucoes:
+ - id: "000AAA111"
+ rtrId: "D12345678202009091000abcde123456"
+ valor: "11.00"
+ horario:
+ solicitacao: "2020-09-10T13:03:33.902Z"
+ status: EM_PROCESSAMENTO
retorno4:
summary: "Exemplo 2"
value:
- allOf:
- - status: "a_pagar"
- - $ref: "#/components/examples/corpo2/value"
- - $ref: "#/components/examples/retorno2/value"
- - valor:
- multa: "123.45"
- desconto: "23.45"
- final: "37100.00"
- getDocumentos1:
+ endToEndId: "E12345678202009091221ghijk78901234"
+ txid: "5b933948-f322-4266-b105-0ac54319e775"
+ valor: "200.00"
+ horario: "2020-09-10T13:03:33.902Z"
+ pagador:
+ cpf: "12345678909"
+ nome: "Francisco da Silva"
+ infoPagador: "Revisão do carro"
+ retorno5:
+ summary: "Exemplo 1"
+ value:
+ endToEndId: "E12345678202009091221kkkkkkkkkkk"
+ txid: "c3e0e7a4-e7f1-469a-9f78-2d3d4999343c"
+ valor: "110.00"
+ horario: "2020-09-09T20:15:00.358Z"
+ infoPagador: "0123456789"
+ devolucoes:
+ id: "123ABC"
+ rtrId: "D12345678202009091221abcdf098765"
+ valor: "10.00"
+ horario:
+ solicitacao: "2020-09-09T20:15:00.358Z"
+ status: "EM_PROCESSAMENTO"
+ retorno6:
+ summary: "Exemplo 2"
+ value:
+ endToEndId: "E87654321202009091221dfghi123456"
+ txid: "971122d8-f372-11ea-adc1-0242ac120002"
+ valor: "110.00"
+ horario: "2020-09-09T20:15:00.358Z"
+ infoPagador: "0123456789"
+ retorno7:
+ summary: "Exemplo 1"
+ value:
+ id: "123456"
+ rtrId: D12345678202009091000abcde123456
+ valor: "7.89"
+ horario:
+ solicitacao: "2020-09-11T15:25:59.411Z"
+ status: EM_PROCESSAMENTO
+ retorno8:
+ summary: "Exemplo 1"
+ value:
+ txId: "fc9a4366-ff3d-4964-b5db-c6c91a8722d3"
+ revisao: "3"
+ calendario:
+ criacao: "2020-09-15T19:39:54.013Z"
+ apresentacao: "2020-04-01T18:00:00Z"
+ expiracao: "3600"
+ status: "ATIVA"
+ valor:
+ original: "500.00"
+ chave: "7407c9c8-f78b-11ea-adc1-0242ac120002"
+ solicitacaoPagador: "Informar cartão fidelidade"
+ infoAdicionais:
+ - nome: "quantidade"
+ valor: "2"
+ getCobs1:
summary: "Exemplo 1"
value:
parametros:
inicio: "2020-04-01T00:00:00Z"
fim: "2020-04-02T10:00:00Z"
paginacao:
- pagina: 0
- tamanho: 100
- quantidade: 1
- documentos:
+ paginaAtual: 0
+ itensPorPagina: 100
+ quantidadeDePaginas: 1
+ quantidadeTotalDeItens: 2
+ cobs:
- allOf:
- - $ref: "#/components/examples/retorno4/value"
+ - $ref: "#/components/examples/retorno1/value"
- allOf:
- - $ref: "#/components/examples/retorno3/value"
- getDocumentos2:
+ - $ref: "#/components/examples/retorno2/value"
+ getCobs2:
summary: "Exemplo 2"
value:
parametros:
inicio: "2020-04-01T00:00:00Z"
fim: "2020-04-01T23:59:59Z"
paginacao:
- pagina: 0
- tamanho: 100
- quantidade: 1
- documentos:
+ paginaAtual: 0
+ itensPorPagina: 100
+ quantidadeDePaginas: 1
+ quantidadeTotalDeItens: 1
+ cobs:
+ - allOf:
+ - $ref: "#/components/examples/retorno1/value"
+ getPix1:
+ summary: "Exemplo 1"
+ value:
+ parametros:
+ inicio: "2020-04-01T00:00:00Z"
+ fim: "2020-04-01T23:59:59Z"
+ paginacao:
+ paginaAtual: 0
+ itensPorPagina: 100
+ quantidadeDePaginas: 1
+ quantidadeTotalDeItens: 2
+ pix:
- allOf:
- - $ref: "#/components/examples/retorno3/value"
+ - $ref: '#/components/examples/retorno3/value'
+ - allOf:
+ - $ref: '#/components/examples/retorno4/value'
requestBodies:
- DocumentoBody:
- description: "Dados para geração do documento."
+ CobBody:
+ description: "Dados para geração da cobrança."
required: true
content:
"application/json":
schema:
- allOf:
- - $ref: "#/components/schemas/DocumentoSolicitado"
- - title: "Documento"
- - required: ["valor", "chave"]
+ $ref: "#/components/schemas/CobSolicitada"
examples:
exemplo1:
$ref: "#/components/examples/corpo1"
exemplo2:
$ref: "#/components/examples/corpo2"
- exemplo3:
- $ref: "#/components/examples/corpo3"
+ CobBodyRevisada:
+ description: "Dados para geração da cobrança."
+ required: true
+ content:
+ "application/json":
+ schema:
+ $ref: "#/components/schemas/CobRevisada"
+ examples:
+ exemplo1:
+ $ref: "#/components/examples/corpo5"
+ WebhookPixBody:
+ description: "Dados para notificação dos Pix."
+ required: true
+ content:
+ "application/json":
+ schema:
+ properties:
+ pix:
+ type: "array"
+ items:
+ $ref: "#/components/schemas/Pix"
+ example:
+ - allOf:
+ - $ref: "#/components/examples/retorno5/value"
+ - allOf:
+ - $ref: "#/components/examples/retorno6/value"
schemas:
- PayloadId:
- type: "object"
- title: "Id do Payload"
- description: "Identificador de um documento."
- properties:
- id:
- type: "string"
- title: "Id"
- description: "Id do documento. Seu formato é facultado ao PSP."
- maxLength: 35
- revisao:
- type: "integer"
- format: "int32"
- title: "Revisão"
- description: "Revisão do documento. Sempre começa em zero. Sempre varia em acréscimos de 1."
TxId:
type: "string"
title: "Id da Transação"
- description: "TransactionID que transita na PACS008."
+ description: |
+ # Identificador da transação
+
+ O campo txid, obrigatório, determina o identificador da transação.
+ O objetivo desse campo é ser um elemento que possibilite ao PSP do recebedor apresentar ao usuário recebedor a funcionalidade de conciliação de pagamentos.
+
+ Na pacs.008, é referenciado como `TransactionIdentification ` ou `idConciliacaoRecebedor`.
+ O preenchimento do campo txid é limitado a 35 caracteres na pacs.008.
+
+ Em termos de fluxo de funcionamento, o txid é lido pelo aplicativo do PSP do pagador e,
+ depois de confirmado o pagamento, é enviado para o SPI via pacs.008.
+ Uma pacs.008 também é enviada ao PSP do recebedor, contendo, além de todas as informações usuais
+ do pagamento, o txid.
+ Ao perceber um recebimento dotado de txid, o PSP do recebedor está apto a se comunicar com o usuário recebedor,
+ informando que um pagamento específico foi liquidado.
+
+ O txid é criado exclusivamente pelo usuário recebedor e está sob sua responsabilidade.
+ O txid, no contexto de representação de uma cobrança, é único por CPF/CNPJ do usuário recebedor. Cabe ao
+ PSP recebedor validar essa regra na API PIX.
+ pattern: "[A-Z0-9-]{1,35}"
+ EndToEndId:
+ type: "string"
+ title: "Id fim a fim da transação"
+ description: "EndToEndIdentification que transita na PACS002, PACS004 e PACS008"
pattern: "[A-Z0-9-]{1,35}"
DevolucaoId:
type: "string"
title: "Id da Devolução"
description: "Id gerado pelo cliente para representar unicamente uma devolução."
pattern: "[A-Z0-9-]{1,35}"
- StatusDocumento:
+ CobStatus:
type: "string"
+ title: "Status da Cobrança"
enum:
- - "a_pagar"
- - "pago"
- - "a_devolver"
- - "completamente_devolvido"
- - "parcialmente_devolvido"
- - "removido_pelo_usuario_recebedor"
- - "removido_pelo_psp"
+ - "ATIVA"
+ - "CONCLUIDA"
+ - "REMOVIDA_PELO_USUARIO_RECEBEDOR"
+ - "REMOVIDA_PELO_PSP"
CPF:
type: "string"
title: "CPF"
@@ -408,6 +724,18 @@ components:
type: "string"
title: "CNPJ"
pattern: "/^\\d{14}$/"
+ Revisao:
+ type: "integer"
+ format: "int32"
+ title: "Revisão"
+ description: "Revisão da cobrança. Sempre começa em zero. Sempre varia em acréscimos de 1."
+ Location:
+ type: "string"
+ title: "Localização do payload"
+ description: "Localização do Payload a ser informada na criação da cobrança."
+ maxLength: 77
+ format: uri
+ example: "pix.example.com/qr/2353c790-eefb-11ea-adc1-0242ac120002"
PessoaFisica:
type: "object"
required: ["cpf", "nome"]
@@ -416,11 +744,11 @@ components:
cpf:
allOf:
- $ref: "#/components/schemas/CPF"
- - description: "CPF do devedor ou “sacado”."
+ - description: "CPF do usuário pagador."
nome:
type: "string"
title: "Nome"
- description: "Nome do devedor ou “sacado”."
+ description: "Nome do usuário pagador."
maxLength: 200
PessoaJuridica:
type: "object"
@@ -430,90 +758,85 @@ components:
cnpj:
allOf:
- $ref: "#/components/schemas/CNPJ"
- - description: "CNPJ do devedor ou “sacado”."
+ - description: "CNPJ do usuário pagador."
nome:
type: "string"
title: "Nome"
- description: "Nome do devedor ou “sacado”."
+ description: "Nome do usuário pagador."
maxLength: 200
- Expiracao:
+ Webhook:
+ type: "object"
+ required: ["webhookUrl"]
+ title: "Webhook"
+ properties:
+ webhookUrl:
+ type: string
+ format: uri
+ example: https://pix.example.com/api/webhook/
+ CobExpiracao:
type: "object"
title: "Expiração"
properties:
expiracao:
+ type: "integer"
+ format: "int32"
+ title: "Tempo de vida da cobrança, especificado em segundos."
+ description: |
+ Tempo de vida da cobrança, especificado em segundos a partir da data de criação (Calendario.criacao)
+ example: "3600"
+ CobApresentacao:
+ type: "object"
+ title: "Apresentação"
+ required: ["apresentacao"]
+ properties:
+ apresentacao:
type: "string"
format: "date-time"
- title: "Timestamp de expiração do documento"
- description: "Timestamp que indica o momento a partir do qual o QR Dinâmico não será mais considerado válido. Respeita RFC 3339."
- example: "2020-04-01T18:00:00Z"
- DataDeVencimento:
+ title: "Timestamp de apresentação do QR Code"
+ description: "Timestamp que indica o momento em que o payload JSON que representa a cobrança foi recuperado. Ou seja, idealmente, é o momento em que o usuário realizou a captura do QR Code para verificar os dados de pagamento. Respeita o formato definido na RFC 3339."
+ CobCriacao:
type: "object"
- title: "Data de Vencimento"
+ title: "Criação"
+ required: ["criacao"]
properties:
- dataDeVencimento:
+ criacao:
type: "string"
- format: "date"
- title: "Data de vencimento do documento"
- description: "Trata-se de uma data, no formato `yyyy-mm-dd`, segundo ISO 8601. É a data de vencimento da cobrança. A cobrança pode ser honrada até esse dia, inclusive, em qualquer horário do dia."
- example: "2020-04-01"
- recebivelAposVencimento:
- type: "boolean"
- default: false
- title: "Recebível após vencimento"
- description: "Trata-se de um campo booleano, ou uma flag. A semântica dessa flag é definir se essa cobrança pode ser paga após o vencimento ou após a expiração. Quando seu valor for true, significa que a cobrança pode ser paga após o vencimento. Quando esse campo não estiver presente, assume-se o valor false, ou seja, a cobrança não pode ser paga após o vencimento."
+ format: "date-time"
+ title: "Data de Criação"
+ description: "Timestamp que indica o momento em que foi criada a cobrança. Respeita o formato definido na RFC 3339."
Valor:
type: "string"
+ title: "Valor"
pattern: "\\d{1,10}\\.\\d{2}"
- DocumentoSolicitado:
+ CobBase:
type: "object"
- title: "Documento Solicitado"
- properties:
- calendario:
- oneOf:
- - $ref: "#/components/schemas/Expiracao"
- - $ref: "#/components/schemas/DataDeVencimento"
- pagador:
+ title: "Cobrança Base"
+ description: "Atributos comuns a todas entidades de Cobrança"
+ properties:
+ devedor:
+ description: "Os campos aninhados sob o objeto devedor são opcionais e identificam o devedor, ou seja, a pessoa ou a instituição a quem a cobrança está endereçada. Não identifica, necessariamente, quem irá efetivamente realizar o pagamento. Um CPF pode ser o devedor de uma cobrança, mas pode acontecer de outro CPF realizar, efetivamente, o pagamento do documento. Não é permitido que o campo pagador.cpf e campo pagador.cnpj estejam preenchidos ao mesmo tempo. Se o campo pagador.cnpj está preenchido, então o campo pagador.cpf não pode estar preenchido, e vice-versa. Se o campo pagador.nome está preenchido, então deve existir ou um pagador.cpf ou um campo pagador.cnpj preenchido."
oneOf:
- $ref: "#/components/schemas/PessoaFisica"
- $ref: "#/components/schemas/PessoaJuridica"
valor:
type: "object"
+ description: "Todos os campos que indicam valores monetários obedecem ao formato do ID 54 da especificação EMV/BR Code para QR Codes. O separador decimal é o caractere ponto. Não é aplicável utilizar separador de milhar. Exemplos de valores aderentes ao padrão: “0.00”, “1.00”, “123.99”, “123456789.23”"
required: ["original"]
properties:
original:
allOf:
- $ref: "#/components/schemas/Valor"
- title: "Valor"
- description: "Valor original do documento."
- juros:
- allOf:
- - $ref: "#/components/schemas/Valor"
- - title: "Juros"
- description: "Juros aplicados à cobrança."
- multa:
- allOf:
- - $ref: "#/components/schemas/Valor"
- - title: "Multa"
- description: "Multa aplicada à cobrança."
- desconto:
- allOf:
- - $ref: "#/components/schemas/Valor"
- - title: "Desconto"
- description: "Descontos ou abatimentos aplicados à cobrança."
- permiteAlteracao:
- type: "boolean"
- title: "Permite alteração"
- description: "Trata-se de uma flag do tipo boolean que determina se o valor final do documento pode ser alterado pelo pagador."
- default: false
+ description: "Valor original da cobrança."
chave:
type: "string"
- title: "DICT"
- description: "Chave DICT do recebedor. A chave deve fazer parte de um conjunto previamente acordado de chaves e a mesma deve ser validada a cada chamada."
+ title: "Chave DICT do recebedor"
+ description: "O campo chave, obrigatório, determina a chave Pix registrada no DICT que será utilizada para a cobrança. Essa chave será lida pelo aplicativo do PSP do pagador para consulta ao DICT, que retornará a informação que identificará o recebedor da cobrança."
maxLength: 77
solicitacaoPagador:
type: "string"
title: "Solicitação ao pagador"
- description: "Um texto a ser apresentado ao pagador para que o pagador possa digitar uma informação correlata, em formato livre, a ser enviada ao recebedor."
+ description: "O campo solicitacaoPagador, opcional, determina um texto a ser apresentado ao pagador para que ele possa digitar uma informação correlata, em formato livre, a ser enviada ao recebedor. Esse texto será preenchido, na pacs.008, pelo PSP do pagador, no campo RemittanceInformation . O tamanho do campo na pacs.008 está limitado a 140 caracteres."
maxLength: 140
infoAdicionais:
type: "array"
@@ -534,63 +857,216 @@ components:
title: "Valor"
description: "Dados do campo."
maxLength: 200
- DocumentoGerado:
+ CobSolicitada:
+ type: "object"
+ title: "Cobrança Solicitada"
+ description: "Dados enviados para criação ou alteração da cobrança via API Pix"
+ required: ["valor", "chave"]
+ allOf:
+ - type: "object"
+ properties:
+ calendario:
+ title: "Calendário"
+ description: "Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança."
+ allOf:
+ - $ref: "#/components/schemas/CobExpiracao"
+ - $ref: "#/components/schemas/CobBase"
+ CobRevisada:
type: "object"
- title: "Documento Gerado"
+ title: "Cobrança Revisada"
+ description: "Dados enviados para revisão da cobrança via API Pix"
+ allOf:
+ - type: "object"
+ properties:
+ calendario:
+ title: "Calendário"
+ description: "Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança."
+ allOf:
+ - $ref: "#/components/schemas/CobExpiracao"
+ status:
+ title: "Novo status da cobrança"
+ description: "O único status que pode ser informado na revisão da Cobrança é o REMOVIDA_PELO_USUARIO_RECEBEDOR"
+ allOf:
+ - $ref: "#/components/schemas/CobStatus"
+ - $ref: "#/components/schemas/CobBase"
+ CobGerada:
+ type: "object"
+ title: "Cobrança Gerada"
+ description: "Dados criados ou alterados da cobrança via API Pix"
+ required: ["location", "txid", "calendario","revisao", "status","valor", "chave"]
+ allOf:
+ - type: "object"
+ properties:
+ calendario:
+ title: "Calendário"
+ description: "Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança."
+ allOf:
+ - $ref: "#/components/schemas/CobCriacao"
+ - $ref: "#/components/schemas/CobExpiracao"
+ status:
+ $ref: "#/components/schemas/CobStatus"
+ txid:
+ $ref: "#/components/schemas/TxId"
+ revisao:
+ $ref: "#/components/schemas/Revisao"
+ location:
+ $ref: "#/components/schemas/Location"
+ - $ref: "#/components/schemas/CobBase"
+ CobCompleta:
+ title: "Cobrança Completa"
+ allOf:
+ - $ref: "#/components/schemas/CobGerada"
+ - $ref: "#/components/schemas/CobSolicitada"
+ - type: "object"
+ title: "Cob"
+ required: ["status"]
+ properties:
+ pix:
+ type: "array"
+ title: "Pix recebidos"
+ items:
+ $ref: "#/components/schemas/Pix"
+ CobPayload:
+ type: "object"
+ title: "Payload JSON da cobrança"
+ description: "Dados da cobrança acessados pelo payload JSON"
+ required: ["txid", "calendario","revisao", "status", "valor", "chave"]
+ allOf:
+ - type: "object"
+ properties:
+ txid:
+ $ref: "#/components/schemas/TxId"
+ revisao:
+ $ref: "#/components/schemas/Revisao"
+ calendario:
+ title: "Calendário"
+ description: "Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança."
+ allOf:
+ - $ref: "#/components/schemas/CobCriacao"
+ - $ref: "#/components/schemas/CobApresentacao"
+ - $ref: "#/components/schemas/CobExpiracao"
+ status:
+ $ref: "#/components/schemas/CobStatus"
+ - $ref: "#/components/schemas/CobBase"
+ ParametrosConsultaCob:
+ type: "object"
+ title: "Parâmetros de Consulta de Cobrança"
+ description: "Parâmetros utilizados para a realização de uma consulta de cobranças."
+ required: ["inicio", "fim", "paginacao"]
properties:
- idDocumento:
- $ref: "#/components/schemas/PayloadId"
- payloadURL:
+ inicio:
type: "string"
- title: "URL do payload"
- description: "URL para recuperação do payload JSON pela app do usuário pagador."
+ format: "date-time"
+ title: "Data de Início"
+ description: "Data inicial utilizada na consulta. Respeita RFC 3339."
+ example: "2020-04-01T00:00:00Z"
+ fim:
+ type: "string"
+ format: "date-time"
+ title: "Data de Fim"
+ description: "Data de fim utilizada na consulta. Respeita RFC 3339."
+ example: "2020-04-01T17:00:00Z"
+ cpf:
+ allOf:
+ - $ref: "#/components/schemas/CPF"
+ - description: "Filtro pelo CPF do devedor. Não pode ser utilizado ao mesmo tempo que o CNPJ."
+ cnpj:
+ allOf:
+ - $ref: "#/components/schemas/CNPJ"
+ - description: "Filtro pelo CNPJ do devedor. Não pode ser utilizado ao mesmo tempo que o CPF."
+ status:
+ allOf:
+ - $ref: "#/components/schemas/CobStatus"
+ - description: "Filtro pelo status das cobranças."
+ paginacao:
+ $ref: "#/components/schemas/Paginacao"
+ CobsConsultadas:
+ type: "object"
+ title: "Cobranças Consultadas"
+ required: ["parametros", "cobs"]
+ properties:
+ parametros:
+ $ref: "#/components/schemas/ParametrosConsultaCob"
+ cobs:
+ type: "array"
+ title: "Lista de cobranças"
+ items:
+ allOf:
+ - $ref: "#/components/schemas/CobCompleta"
+ - required: ["status", "txid", "idCob"]
+ Pix:
+ type: "object"
+ title: "Pix"
+ required: ["endToEndId", "valor", "horario"]
+ properties:
+ endToEndId:
+ $ref: "#/components/schemas/EndToEndId"
txid:
$ref: "#/components/schemas/TxId"
- dataCriacao:
+ valor:
+ allOf:
+ - $ref: "#/components/schemas/Valor"
+ - description: "Valor do Pix."
+ horario:
type: "string"
format: "date-time"
- title: "Data de Criação"
- description: "Data e hora em que o documento foi criado no PSP. Respeita RFC 3339."
+ title: "Horário"
+ description: "Horário em que o Pix foi processado no PSP."
+ pagador:
+ oneOf:
+ - $ref: "#/components/schemas/PessoaFisica"
+ - $ref: "#/components/schemas/PessoaJuridica"
+ infoPagador:
+ type: "string"
+ title: "Informação livre do pagador"
+ maxLength: 140
+ devolucoes:
+ type: "array"
+ title: "Devoluções"
+ items:
+ $ref: "#/components/schemas/Devolucao"
+ Devolucao:
+ type: "object"
+ title: "Devolução"
+ required: ["id", "rtrId", "valor", "horario", "status"]
+ properties:
+ id:
+ $ref: "#/components/schemas/DevolucaoId"
+ rtrId:
+ type: "string"
+ title: "RtrId"
+ description: "ReturnIdentification que transita na PACS004."
+ example: "D12345678202009091000abcde123456"
+ minLength: 32
+ maxLength: 32
valor:
+ allOf:
+ - $ref: "#/components/schemas/Valor"
+ - description: "Valor a devolver."
+ horario:
type: "object"
+ required: ["solicitacao"]
properties:
- final:
- allOf:
- - $ref: "#/components/schemas/Valor"
- - title: "Valor final"
- description: "Valor final do documento."
- DocumentoCompleto:
- allOf:
- - $ref: "#/components/schemas/DocumentoSolicitado"
- - $ref: "#/components/schemas/DocumentoGerado"
- - type: "object"
- title: "Documento"
- properties:
- status:
- $ref: "#/components/schemas/StatusDocumento"
- devolucoes:
- type: "array"
- title: "Devoluções"
- items:
- type: "object"
- title: "Devolução"
- properties:
- id:
- $ref: "#/components/schemas/DevolucaoId"
- valor:
- allOf:
- - $ref: "#/components/schemas/Valor"
- - description: "Valor a devolver."
- status:
- type: "string"
- title: "Status"
- description: "Status da devolução."
- enum: ["pendente", "devolvido"]
- ParametrosConsulta:
+ solicitacao:
+ type: "string"
+ format: "date-time"
+ title: "Horário de solicitação"
+ description: "Horário no qual a devolução foi solicitada no PSP."
+ liquidacao:
+ type: "string"
+ format: "date-time"
+ title: "Horário de liquidacao"
+ description: "Horário no qual a devolução foi liquidada no PSP."
+ status:
+ type: "string"
+ title: "Status"
+ description: "Status da devolução."
+ enum: ["EM_PROCESSAMENTO", "DEVOLVIDO", "NAO_REALIZADO"]
+ ParametrosConsultaPix:
type: "object"
- title: "Parâmetros de Consulta"
- description: "Parâmetros utilizados para a realização de uma consulta de documentos."
- required: ["fim", "paginacao"]
+ title: "Parâmetros de Consulta Pix"
+ description: "Parâmetros utilizados para a realização de uma consulta de cobranças."
+ required: ["inicio", "fim", "paginacao"]
properties:
inicio:
type: "string"
@@ -612,40 +1088,87 @@ components:
allOf:
- $ref: "#/components/schemas/CNPJ"
- description: "Filtro pelo CNPJ do pagador. Não pode ser utilizado ao mesmo tempo que o CPF."
- url:
- type: "string"
- title: "URL do payload"
- description: "Filtro pela URL do payload JSON."
+ txId:
+ $ref: "#/components/schemas/TxId"
paginacao:
- type: "object"
- title: "Paginação"
- required: ["pagina", "tamanho", "quantidade"]
- properties:
- pagina:
- type: "integer"
- title: "Página"
- description: "Número da página recuperada."
- minimum: 0
- tamanho:
- type: "integer"
- title: "Tamanho"
- description: "Quantidade de registros retornado na página."
- minimum: 1
- quantidade:
- type: "integer"
- title: "Quantidade"
- description: "Quantidade de páginas disponíveis para consulta."
- minimum: 0
- DocumentosConsultados:
+ $ref: "#/components/schemas/Paginacao"
+ PixConsultados:
type: "object"
- title: "Documentos Consultados"
+ title: "Pix Consultados"
+ required: ["parametros", "cobs"]
properties:
parametros:
- $ref: "#/components/schemas/ParametrosConsulta"
- documentos:
+ $ref: "#/components/schemas/ParametrosConsultaPix"
+ pix:
type: "array"
- title: "Lista de Documentos"
+ title: "Lista de Pix recebidos"
items:
allOf:
- - $ref: "#/components/schemas/DocumentoCompleto"
- - required: ["status", "txid", "idDocumento"]
+ - $ref: "#/components/schemas/Pix"
+ Paginacao:
+ type: "object"
+ title: "Paginação"
+ required: ["paginaAtual", "itensPorPagina", "quantidadeDePaginas","quantidadeTotalDeItens"]
+ properties:
+ paginaAtual:
+ type: "integer"
+ title: "Página atual"
+ description: "Número da página recuperada."
+ minimum: 0
+ itensPorPagina:
+ type: "integer"
+ title: "Itens por página"
+ description: "Quantidade de registros retornado na página."
+ minimum: 1
+ quantidadeDePaginas:
+ type: "integer"
+ title: "Quantidade de páginas"
+ description: "Quantidade de páginas disponíveis para consulta."
+ minimum: 1
+ quantidadeTotalDeItens:
+ type: "integer"
+ title: "Quantidade total de itens"
+ description: "Quantidade total de itens disponíveis de acordo com os parâmetros informados."
+ minimum: 0
+ parameters:
+ inicio:
+ in: "query"
+ name: "inicio"
+ required: true
+ schema:
+ type: "string"
+ format: "date-time"
+ title: "Data de início"
+ description: "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339."
+ fim:
+ in: "query"
+ name: "fim"
+ required: true
+ schema:
+ type: "string"
+ format: "date-time"
+ title: "Data de início"
+ description: "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339."
+ paginaAtual:
+ in: "query"
+ name: "paginacao.paginaAtual"
+ required: false
+ schema:
+ type: "integer"
+ format: "int32"
+ title: "Página atual"
+ minimum: 0
+ default: 0
+ description: "Página a ser retornada pela consulta. Se não for informada, o PSP assumirá que será 0."
+ itensPorPagina:
+ in: "query"
+ name: "paginacao.itensPorPagina"
+ required: false
+ schema:
+ type: "integer"
+ format: "int32"
+ title: "Itens por Página"
+ minimum: 1
+ maximum: 1000
+ default: 100
+ description: "Quantidade máxima de registros retornados em cada página. Apenas a última página pode conter uma quantidade menor de registros."
\ No newline at end of file
diff --git a/readme.md b/readme.md
index c4ef5a9..0d55e13 100644
--- a/readme.md
+++ b/readme.md
@@ -1,8 +1,12 @@
-# Especificação da API de Recebimentos PIX
+[![https://img.shields.io/badge/OpenAPI-valid-brightgreen.svg](https://img.shields.io/badge/OpenAPI-valid-brightgreen.svg)](http://online.swagger.io/validator?url=https://raw.githubusercontent.com/bacen/pix-api/master/openapi.yaml) [![License](https://img.shields.io/badge/License-Apache%202.0-blue.svg)](https://www.apache.org/licenses/LICENSE-2.0)
+
+# Especificação da API Pix
+
+* Esse repositório reune as especificações funcionais em formato OpenAPI 3.0 referentes à API Pix.
+
+* Alguns aspectos de segurança concernentes a API Pix transcendem o escopo desse repositório. Maiores detalhes
+sobre segurança podem ser encontrados no Manual de Segurança do Pix.
-Esse repositório reune as especificações funcionais em formato OpenAPI 3.0 referentes à API de recebimentos no âmbito do PIX.
-Os aspectos de segurança concernentes a essa API transcendem o escopo desse repositório. Maiores detalhes
-sobre segurança podem ser encontrados no Manual de Segurança do PIX.