{"_id":"5f9c6b47285bbc0042e24a9b","metadata":{"image":[],"title":"","description":""},"api":{"url":"","auth":"required","settings":"","results":{"codes":[]},"params":[]},"next":{"description":"","pages":[]},"title":"API Pix","type":"basic","slug":"api-pix","excerpt":"Você está em: *\"API Pix\"*","body":"## GN API Pix\n\nA GN API Pix Gerencianet disponibiliza serviços oferecidos pela Gerencianet 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 por essa API permitem ao usuário recebedor estabelecer integração de sua plataforma ou sistema com os serviços Pix da Gerencianet. \n\n## Evolução da API Pix\n\nAs seguintes mudanças são esperadas e consideradas retro-compatíveis (backwards-compatibility):\n\n* Adição de novos recursos na API Pix.\n* Adição de novos parâmetros opcionais a cobranças.\n* Adição de novos campos em respostas da API Pix.\n* Alteração da ordem de campos.\n* Adição de novos elementos em enumerações.\n\nMudanças compatíveis não geram nova versão da GN API Pix. Clientes devem estar preparados para lidar com essas mudanças sem impactar suas integrações.\n\nMudanças incompatíveis geram nova versão da GN API Pix.\n\nSe você quer saber mais sobre a implementação da API Pix ou deseja receber uma proposta comercial, consulte um de nossos especialistas pelo e-mail <code>pix:::at:::gerencianet.com.br</code> ou clique no botão abaixo.\n\n[block:html]\n{\n  \"html\": \"<a href=\\\"https://cta-redirect.hubspot.com/cta/redirect/3324438/0ae588cb-c51b-4c19-a281-827f2262d2d1\\\" target=\\\"_blank\\\" alt=\\\"QUERO UMA CONSULTORIA TÉCNICA\\\"><button type=\\\"button\\\" class=\\\"buttonCTA buttonorange\\\">QUERO SER CLIENTE GERENCIANET</button></a>\"\n}\n[/block]\nO time Técnico e Comercial também está disponível na Plataforma **Discord**. [Clique aqui](https://discord.gg/ptGHMtczcV) para acessar o servidor.\n\n## Collection Postman Gerencianet API Pix \n\nEste é o <a href=\"https://documenter.getpostman.com/view/13574984/TVetcm6R\" target=\"_blank\" alt=\"link\"></a> da nossa Collection que manteremos atualizada com o endpoints da API Pix.\nhttps://documenter.getpostman.com/view/13574984/TVetcm6R\n\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://documenter.getpostman.com/view/13574984/TVetcm6R)\n\n## Rota base\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \" \\\"URL\\\": {\\n    \\\"sandbox\\\": \\\"https://api-pix-h.gerencianet.com.br\\\"\\n  }\",\n      \"language\": \"json\",\n      \"name\": \"Desenvolvimento\"\n    },\n    {\n      \"code\": \" \\\"URL\\\": {\\n    \\\"production\\\": \\\"https://api-pix.gerencianet.com.br\\\"\\n  }\",\n      \"language\": \"json\",\n      \"name\": \"Produção\"\n    }\n  ]\n}\n[/block]\n### OAuth2\n\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Security Scheme Type\",\n    \"h-1\": \"OAuth2\",\n    \"0-0\": \"<b>clientCredentials OAuth Flow</b>\",\n    \"0-1\": \"**Produção**\\n<b>Token URL:</b> https://api-pix.gerencianet.com.br/oauth/token <br><b>Refresh URL:</b> https://api-pix.gerencianet.com.br/oauth/token <br>\\n**Desenvolvimento**\\n<b>Token URL:</b> https://api-pix-h.gerencianet.com.br/oauth/token <br><b>Refresh URL:</b> https://api-pix-h.gerencianet.com.br/oauth/token <br>\\n<b>Scopes:</b> <br><br>\\n\\n<ul><li> <code>cob.write</code> - Permissão para alteração de cobranças</li><br> <li><code>cob.read</code> - Permissão para consulta de cobranças</li><br><li> <code>pix.write</code> - Permissão para alteração de Pix</li><br><li> <code>pix.read</code> - Permissão para consulta de Pix</li><br><li> <code>webhook.read</code> - Permissão para consulta do webhook</li><br><li> <code>webhook.write</code> - Permissão para alteração do webhook</li><br></ul>\"\n  },\n  \"cols\": 2,\n  \"rows\": 1\n}\n[/block]\n\nTodas as requisições devem conter um certificado de segurança que será fornecido pela Gerencianet dentro da sua conta, no formato <code>PFX(.p12)</code>. Essa exigência está descrita na integra no <a href=\"https://www.bcb.gov.br/estabilidadefinanceira/comunicacaodados\" target=\"_blank\" alt=\"manual de segurança do pix\">manual de segurança do PIX</a>.\n\nPara gerar o seu certificado abra um ticket em https://gerencianet.com.br/fale-conosco/ informando o numero de sua conta e as credenciais client_id e client_secret de <code>desenvolvimento</code>. Nossa equipe ira retornar com o certificado para você realizar o consumo dos endpoints.\n\n\n\n**Obs:** Em algumas linguagens você deve converter o certificado .p12 para o formato .pem. Abaixo alguns exemplos utilizando o OpenSSL para a conversão.\n\n### Conversão chave P12 para chave PEM\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"# Gerar certificado e chave em único arquivo\\nopenssl pkcs12 -in certificado.p12 -out certificado.pem -nodes\",\n      \"language\": \"javascript\",\n      \"name\": \"Comando 1\"\n    },\n    {\n      \"code\": \"# Gerar certificado e chave separadas\\nopenssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys #certificado\\nopenssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes #chave privada\",\n      \"language\": \"javascript\",\n      \"name\": \"Comando 2\"\n    }\n  ]\n}\n[/block]\n### Exemplos de autenticação utilizando o certificado .P12\n\nPara fazer requisições HTTP utilizando certificados .P12 ou .PEM para autenticação do PIX é necessário que a chave seja inserida na requisição.\n\nPara a utilização do PIX é necessário que um cliente e um servidor se comuniquem em uma conexão verificada um com o outro. A verificação é feita pelo certificado bidirecional (.PEM ou .P12). Um servidor e um cliente implementaram um certificado de chave privada e um certificado de chave pública.\n\nAbaixo, trazemos exemplos de como consumir o PIX Gerencianet incorporando esse certificado na requisição.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"#Desenvolvido pela Consultoria Técnica da Gerencianet\\n\\n<?php\\n\\n$file = file_get_contents(\\\"./config.json\\\");\\n$config = json_decode($file, true);\\n$environment = ($config[\\\"sandbox\\\"] === true) ? \\\"development\\\" : \\\"production\\\";\\n\\n$certfile = \\\"./certificate.pem/\\\" . $config[$environment][\\\"certificate_name\\\"];\\n\\n$curl = curl_init();\\n\\n$authorization =  base64_encode($config[$environment][\\\"client_id\\\"] . \\\":\\\" . $config[$environment][\\\"client_secret\\\"]);\\n\\ncurl_setopt_array($curl, array(\\n    CURLOPT_URL => $config[$environment][\\\"pix_auth_url\\\"], // Rota base, desenvolvimento ou produção\\n    CURLOPT_RETURNTRANSFER => true,\\n    CURLOPT_ENCODING => \\\"\\\",\\n    CURLOPT_MAXREDIRS => 10,\\n    CURLOPT_TIMEOUT => 0,\\n    CURLOPT_FOLLOWLOCATION => true,\\n    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\\n    CURLOPT_CUSTOMREQUEST => \\\"POST\\\",\\n    CURLOPT_POSTFIELDS => \\\"{\\\\r\\\\n    \\\"grant_type\\\": \\\"client_credentials\\\"\\\\r\\\\n}\\\",\\n    CURLOPT_SSLCERT => $certfile, // Caminho do certificado\\n    CURLOPT_SSLCERTPASSWD => \\\"\\\",\\n    CURLOPT_HTTPHEADER => array(\\n        \\\"Authorization: Basic $authorization\\\",\\n        \\\"Content-Type: application/json\\\"\\n    ),\\n));\\n\\n$response = curl_exec($curl);\\n\\ncurl_close($curl);\\n\\necho \\\"<pre>\\\";\\necho $response;\\necho \\\"</pre>\\\";\",\n      \"language\": \"php\"\n    },\n    {\n      \"code\": \"//Desenvolvido pela Consultoria Técnica da Gerencianet\\n\\n\\\"use strict\\\";\\nconst https = require(\\\"https\\\");\\nvar axios = require(\\\"axios\\\");\\nvar fs = require(\\\"fs\\\");\\n\\n//Insira o caminho de seu certificado .p12 dentro de seu projeto\\nvar certificado = fs.readFileSync(\\\"./certificado.p12\\\");\\n\\n//Insira os valores de suas credenciais em desenvolvimento do pix\\nvar credenciais = {\\n  client_id: \\\"YOUR-CLIENT-ID\\\",\\n  client_secret: \\\"YOUR-CLIENT-SECRET\\\",\\n};\\n\\nvar data = JSON.stringify({ grant_type: \\\"client_credentials\\\" });\\nvar data_credentials = credenciais.client_id + \\\":\\\" + credenciais.client_secret;\\n\\n// Codificando as credenciais em base64\\nvar auth = Buffer.from(data_credentials).toString(\\\"base64\\\");\\n\\nconst agent = new https.Agent({\\n  pfx: certificado,\\n  passphrase: \\\"\\\",\\n});\\n//Consumo em desenvolvimento da rota post oauth/token\\nvar config = {\\n  method: \\\"POST\\\",\\n  url: \\\"https://api-pix-h.gerencianet.com.br/oauth/token\\\",\\n  headers: {\\n    Authorization: \\\"Basic \\\" + auth,\\n    \\\"Content-Type\\\": \\\"application/json\\\",\\n  },\\n  httpsAgent: agent,\\n  data: data,\\n};\\n\\naxios(config)\\n  .then(function (response) {\\n    console.log(JSON.stringify(response.data));\\n  })\\n  .catch(function (error) {\\n    console.log(error);\\n  });\",\n      \"language\": \"javascript\",\n      \"name\": \"Node\"\n    },\n    {\n      \"code\": \"#Desenvolvido pela Consultoria Técnica da Gerencianet\\n\\nimport requests\\nimport base64\\n\\ncredentials = {\\n    \\\"client_id\\\": \\\"YOUR-CLIENT-ID\\\",\\n    \\\"client_secret\\\": \\\"YOUR-CLIENT-SECRET\\\",\\n}\\n\\ncertificado = './certificado.pem'  # A variável certificado é o diretório em que seu certificado em formato .pem deve ser inserido\\n\\nauth = base64.b64encode(\\n    (f\\\"{credentials['client_id']}:{credentials['client_secret']}\\\"\\n     ).encode()).decode()\\n\\nurl = \\\"https://api-pix-h.gerencianet.com.br/oauth/token\\\"  #Para ambiente de Desenvolvimento\\n\\npayload = {\\\"grant_type\\\": \\\"client_credentials\\\"}\\nheaders = {\\n    'Authorization': f\\\"Basic {auth}\\\",\\n    'Content-Type': 'application/json'\\n}\\n\\nresponse = requests.request(\\\"POST\\\",\\n                            url,\\n                            headers=headers,\\n                            data=payload,\\n                            cert=certificado)\\n\\nprint(response.text)\",\n      \"language\": \"python\"\n    },\n    {\n      \"code\": \"//Desenvolvido pela Consultoria Técnica da Gerencianet\\n\\nusing System;\\nusing System.Security.Cryptography.X509Certificates;\\nusing RestSharp;\\n\\nnamespace PixGerencianet\\n{\\n    class Authorize\\n    {\\n        static void Main(string[] args)\\n        {\\n            var cities = new Dictionary<string, string>(){\\n                {\\\"client_id\\\", \\\"YOUR-CLIENT-ID\\\"},\\n                {\\\"client_secret\\\", \\\"YOUR-CLIENT-SECRET\\\"}\\n            };\\n            X509Certificate2 uidCert = new X509Certificate2(\\\"./certificado.p12\\\", \\\"\\\");\\n            var client = new RestSharp.RestClient(\\\"https://api-pix-h.gerencianet.com.br/oauth/token\\\");\\n            client.ClientCertificates = new X509CertificateCollection() { uidCert };\\n            var request = new RestRequest(Method.POST);\\n            request.AddHeader(\\\"Authorization\\\", \\\"Basic R2VyZW5jaWFuZXRzYQ==\\\");\\n            request.AddHeader(\\\"Content-Type\\\", \\\"application/json\\\");\\n            request.AddParameter(\\\"application/json\\\", \\\"{\\\\r\\\\n    \\\\\\\"grant_type\\\\\\\": \\\\\\\"client_credentials\\\\\\\"\\\\r\\\\n}\\\", ParameterType.RequestBody);\\n            IRestResponse restResponse = client.Execute(request);\\n            string response = restResponse.Content;\\n\\n            Console.WriteLine(uidCert);\\n        }\\n    }\\n}\",\n      \"language\": \"csharp\"\n    },\n    {\n      \"code\": \"#Desenvolvido pela Consultoria Técnica da Gerencianet\\n\\nrequire \\\"uri\\\"\\nrequire \\\"net/http\\\"\\nrequire \\\"openssl\\\"\\n\\nclient_id = \\\"YOUR-CLIENT-ID\\\";\\nclient_secret = \\\"YOUR-CLIENT-SECRET\\\";\\n\\ncertfile = File.read(\\\"certificado.pem\\\") # A variável certificado é o diretório em que seu certificado em formato .pem deve ser inserido\\n\\nurl = URI(\\\"https://api-pix-h.gerencianet.com.br/oauth/token\\\") #Para ambiente de Desenvolvimento\\n\\nhttps = Net::HTTP.new(url.host, url.port);\\nhttps.use_ssl = true\\nhttps.cert = OpenSSL::X509::Certificate.new(certfile)\\nhttps.key = OpenSSL::PKey::RSA.new(certfile)\\n\\nrequest = Net::HTTP::Post.new(url)\\nrequest.basic_auth(client_id, client_secret)\\nrequest[\\\"Content-Type\\\"] = \\\"application/json\\\"\\nrequest.body = \\\"{\\\\r\\\\n    \\\\\\\"grant_type\\\\\\\": \\\\\\\"client_credentials\\\\\\\"\\\\r\\\\n}\\\"\\n\\nresponse = https.request(request)\\nputs response.read_body\",\n      \"language\": \"ruby\",\n      \"name\": \"\"\n    }\n  ]\n}\n[/block]\n<br>\n\n## CobPayload\n\n### Endpoint (location) que serve um payload que representa uma cobrança  <code>GET /{pixUrlAcessToken}</code>.\n\nNo 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).\n\nObs: A url para acesso do payload é diferente da API.\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>pixUrlAcessToken</b>\",\n    \"0-1\": \"pixUrlAcessToken\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n<br>\n\n### Descrição do Retorno\n\nO retorno desse endpoint é um objeto que apresenta estrutura JWS, conforme especificado no manual de segurança. Segue um exemplo:\n\n\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXUyJ9.eyJ0eElkIjoiNTJjNDMzNjEtY2FhMS00ZGRiLTkxNTItNzA4NDI2YTI1ZGIzIiwicmV2aXNhbyI6IjMiLCJjYWxlbmRhcmlvIjp7ImNyaWFjYW8iOiIyMDIwLTA5LTE1VDE5OjM5OjU0LjAxM1oiLCJhcHJlc2VudGFjYW8iOiIyMDIwLTA0LTAxVDE4OjAwOjAwWiIsImV4cGlyYWNhbyI6IjEyMDAifSwidmFsb3IiOnsib3JpZ2luYWwiOiI1MDAuMDAifSwiY2hhdmUiOiI3NDA3YzljOC1mNzhiLTExZWEtYWRjMS0wMjQyYWMxMjAwMDIiLCJzb2xpY2l0YWNhb1BhZ2Fkb3IiOiJJbmZvcm1hciBjYXJ0w6NvIGZpZGVsaWRhZGUiLCJpbmZvQWRpY2lvbmFpcyI6W3sibm9tZSI6InF1YW50aWRhZGUiLCJ2YWxvciI6IjIifV19.khlLEW4Q4W6zIYlacIaSHzwg_q9JrIkeinmvRDcUUD3120oXXew_xqSEAWsefY28g4MhUmK-RuaZgn1_rR22ZVM1pDbblw7Sk6dlHGxEc8PbMzMgEJPLdOZRumzMLx6YBYLAYsxT-HZp_vmBT713biN3jJf3V55z9RK6Xyo1CeWvemt81_O4kyGZ9lbp7p0VhmdJ9u6_EquEyP2n0uWy2ikbe7AFobkAdBRoF8gtp891WG5-gZmk4ZzATORNQOTrytQYMyprWV7o_prVjwT308RUo9Si-FRPTvYRGqyKo-voGoQVaZgCMUjc0jLr9WqYCRMyeCJZHTJmpaCFSNQnhw\",\n      \"language\": \"json\",\n      \"name\": \"Objeto JWS\"\n    }\n  ]\n}\n[/block]\nEste 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.\n\nConforme pode-se verificar no exemplo acima, o objeto JWS apresenta três fragmentos separados pelo caractere . (ponto). São eles: <code>header</code>, <code>payload</code> e <code>signature</code>.\n\nEm termos de funcionalidade, o fragmento que interessa ao pagador é o <code>payload</code>, que apresenta estrutura conforme especificada pelo <code>schema</code> do presente endpoint, contendo detalhes concernentes à cobrança.\n\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"txId\\\": \\\"fc9a4366ff3d4964b5dbc6c91a8722d3\\\",\\n  \\\"revisao\\\": \\\"3\\\",\\n  \\\"calendario\\\": {\\n    \\\"criacao\\\": \\\"2020-09-15T19:39:54.013Z\\\",\\n    \\\"apresentacao\\\": \\\"2020-04-01T18:00:00Z\\\",\\n    \\\"expiracao\\\": 3600\\n  },\\n  \\\"status\\\": \\\"ATIVA\\\",\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"500.00\\\"\\n  },\\n  \\\"chave\\\": \\\"7407c9c8-f78b-11ea-adc1-0242ac120002\\\",\\n  \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\",\\n  \\\"infoAdicionais\\\": [\\n    {\\n      \\\"nome\\\": \\\"quantidade\\\",\\n      \\\"valor\\\": \\\"2\\\"\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    },\n    {\n      \"code\": \"UnknownRegisterError\\n{\\n  \\\"nome\\\": \\\"cobranca_nao_encontrada\\\",\\n  \\\"mensagem\\\": \\\"Nenhuma cobrança encontrada para o location informado\\\"\\n}\\n\\nInvalidOperationError\\n{\\n  \\\"nome\\\": \\\"status_cobranca_invalido\\\",\\n  \\\"mensagem\\\": \\\"A cobrança não está mais com o status ATIVA\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"cobranca_expirada\\\",\\n  \\\"mensagem\\\": \\\"A cobrança expirou\\\"\\n}\\n\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    }\n  ]\n}\n[/block]\n<br>\n<div class=\"tab2\">(*) Atributo obrigatório</div>\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>txid</b>\",\n    \"0-1\": \"<b>Identificador da transação</b><br>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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o).\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>\",\n    \"1-0\": \"**revisao** \",\n    \"1-1\": \"Revisão da cobrança. Sempre começa em zero. Sempre varia em acréscimos de 1.\",\n    \"1-2\": \"Sim\",\n    \"1-3\": \"Integer (int32) (Revisão)\",\n    \"2-0\": \"<b>calendario</b>\",\n    \"2-1\": \"Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança.\\n\\n*calendario*:\\n<div class=\\\"tab2\\\"><code>criacao*</code> // Timestamp que indica o momento em que foi criada a cobrança. Respeita o formato definido na RFC 3339. Mínimo de 1 caractere e máximo de 255 caracteres (String). \\n\\n<code>apresentacao*</code>// 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. string date-time (Timestamp de apresentação do QR Code)\\n\\n<code>expiracao</code>// Tempo de vida da cobrança, especificado em segundos a partir da data de criação (Calendario.criacao). Recebem um numero com valor máximo integer int32, passado como integer</div>\",\n    \"2-2\": \"Sim\",\n    \"2-3\": \"object (Calendário)\",\n    \"3-0\": \"<b>status</b>\",\n    \"3-1\": \"Enum: <code>\\\"ATIVA\\\"</code>,<code>\\\"CONCLUIDA\\\"</code><br><br><code>\\\"REMOVIDA_PELO_USUARIO_RECEBEDOR\\\"</code>,<br><br><code>\\\"REMOVIDA_PELO_PSP\\\"</code>\",\n    \"3-2\": \"Sim\",\n    \"3-3\": \"string (Status da Cobrança)\",\n    \"5-0\": \"<b>valor</b>\",\n    \"5-1\": \"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”<br><br> <em>valor:</em><br><code>original*</code>// Valor original da cobrança.\\n\\nstring  <code>\\\\d{1,10}\\\\.\\\\d{2}</code>\",\n    \"5-2\": \"Sim\",\n    \"5-3\": \"object\",\n    \"6-0\": \"<b>chave</b>\",\n    \"6-1\": \"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.\",\n    \"6-2\": \"Sim\",\n    \"6-3\": \"string (Chave DICT do recebedor) <code>≤ 77 characters</code>\",\n    \"7-0\": \"<b>solicitacaoPagador</b>\",\n    \"7-1\": \"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.\",\n    \"7-2\": \"Não\",\n    \"8-0\": \"**infoAdicionais** \",\n    \"7-3\": \"string (Solicitação ao pagador)<code>≤ 140 characters</code>\",\n    \"8-1\": \"Cada respectiva informação adicional contida na lista (nome e valor) deve ser apresentada ao pagador.\\n\\ninfoAdicionais:\\n<div class=\\\"tab2\\\"> <code>nome*</code>// Nome do campo string (Nome) <code>≤ 50 characters</code>\\n\\n<code>valor*</code>// Dados do campo string (Valor) <code>≤ 200 characters</code></div>\",\n    \"8-2\": \"Não\",\n    \"8-3\": \"Array of objects (Informações adicionais) <code>≤ 50</code>\",\n    \"4-0\": \"<b>devedor</b>\",\n    \"4-2\": \"Não\",\n    \"4-3\": \"Pessoa Física (object) or Pessoa Jurídica (object)\",\n    \"4-1\": \"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.\\n<br>\\ndevedor: \\n<br>\\n\\n<code>cpf *</code>// CPF do usuário pagador. string <code>/^\\\\d{11}$/</code>\\n<code>nome *</code>// Nome do usuário pagador. string <code>≤ 200 characters</code>\"\n  },\n  \"cols\": 4,\n  \"rows\": 9\n}\n[/block]\n## Criar cobrança.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**)\n\nEndpoint para criar uma cobrança <code>PUT /cob/{txid}</code>.\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"calendario\\\": {\\n    \\\"expiracao\\\": 3600\\n  },\\n  \\\"devedor\\\": {\\n    \\\"cpf\\\": \\\"12345678909\\\",\\n    \\\"nome\\\": \\\"Francisco da Silva\\\"\\n  },\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"123.45\\\"\\n  },\\n  \\\"chave\\\": \\\"71cdf9ba-c695-4e3c-b010-abb521a3f1be\\\",\\n  \\\"solicitacaoPagador\\\": \\\"Cobrança dos serviços prestados.\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 1\"\n    },\n    {\n      \"code\": \"{\\n  \\\"calendario\\\": {\\n    \\\"expiracao\\\": 3600\\n  },\\n  \\\"devedor\\\": {\\n    \\\"cnpj\\\": \\\"12345678000195\\\",\\n    \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n  },\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"37.00\\\"\\n  },\\n  \\\"chave\\\": \\\"ac107ed7-97cd-4fe7-8df5-a5f5659bf2f3\\\",\\n  \\\"solicitacaoPagador\\\": \\\"Serviço realizado.\\\",\\n  \\\"infoAdicionais\\\": [\\n    {\\n      \\\"nome\\\": \\\"Campo 1\\\",\\n      \\\"valor\\\": \\\"Informação Adicional1 do PSP-Recebedor\\\"\\n    },\\n    {\\n      \\\"nome\\\": \\\"Campo 2\\\",\\n      \\\"valor\\\": \\\"Informação Adicional2 do PSP-Recebedor\\\"\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 2\"\n    }\n  ]\n}\n[/block]\n<div class=\"tab2\">(*) Atributo obrigatório</div >\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"**txid** \",\n    \"0-1\": \"**Identificador da transação** \\nO 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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o).\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\nDados para geração da cobrança.\n\n<div class=\"tab2\">(*) Atributo obrigatório</div>\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"**calendario** \",\n    \"0-1\": \"Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança.\\n\\ncalendario:\\n<div class=\\\"tab2\\\"><code>criacao*</code>// Timestamp que indica o momento em que foi criada a cobrança. Respeita o formato definido na RFC 3339. Mínimo de 1 caractere e máximo de 255 caracteres (String).\\n\\n<code>apresentacao*</code>// 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. string date-time (Timestamp de apresentação do QR Code)\\n\\n<code>expiracao</code>// Tempo de vida da cobrança, especificado em segundos a partir da data de criação (Calendario.criacao). Recebem um numero com valor máximo integer int32, passado como integer</div>\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"object (Calendário)\",\n    \"1-0\": \"**devedor** \",\n    \"1-1\": \"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.\\n\\ndevedor:\\n<div class=\\\"tab2\\\"><code>cpf*</code>// CPF do usuário pagador.string <code>/^\\\\d{11}$/</code>\\n\\n<code> nome*</code>// Nome do usuário pagador. string (Nome) <code>≤ 200 characters</code></div>\",\n    \"1-2\": \"Não\",\n    \"1-3\": \"Pessoa Física (object) or Pessoa Jurídica (object)\",\n    \"2-0\": \"**valor** \",\n    \"2-1\": \"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”\\n\\n<br>\\n\\nvalor:\\n<div class=\\\"tab2\\\">  <code> original*</code>// Valor original da cobrança.string <code>\\\\d{1,10}\\\\.\\\\d{2}</code></div>\",\n    \"2-2\": \"Sim\",\n    \"2-3\": \"object\",\n    \"3-0\": \"**chave** \",\n    \"3-1\": \"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.\",\n    \"3-2\": \"Sim\",\n    \"3-3\": \"string (Chave DICT do recebedor) <code>≤ 77 characters</code>\",\n    \"4-0\": \"**solicitacaoPagador** \",\n    \"4-1\": \"O campo *<code>solicitacaoPagador*</code>, 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.\",\n    \"4-2\": \"Não\",\n    \"4-3\": \"string (Solicitação ao pagador)<code>≤ 140 characters</code>\",\n    \"5-0\": \"**infoAdicionais** \",\n    \"5-1\": \"Cada respectiva informação adicional contida na lista (nome e valor) deve ser apresentada ao pagador.\\n\\ninfoAdicionais:\\n<div class=\\\"tab2\\\"><code>nome*</code>// Nome do campo string (Nome)<code> ≤ 50 characters</code>\\n\\n<code>valor*</code>// Dados do campo string (Valor)<code> ≤ 200 characters</code> </div>\",\n    \"5-2\": \"Não\",\n    \"5-3\": \"Array of objects (Informações adicionais) <code>≤ 50</code>\"\n  },\n  \"cols\": 4,\n  \"rows\": 6\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"ATIVA\\\",\\n  \\\"calendario\\\": {\\n    \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n    \\\"expiracao\\\": \\\"3600\\\"\\n  },\\n  \\\"location\\\": \\\"pix.example.com/qr/9d36b84f-c70b-478f-b95c-12729b90ca25\\\",\\n  \\\"txid\\\": \\\"7978c0c97ea847e78e8849634473c1f1\\\",\\n  \\\"revisao\\\": 1,\\n  \\\"devedor\\\": {\\n    \\\"cnpj\\\": \\\"12345678000195\\\",\\n    \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n  },\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"567.89\\\"\\n  },\\n  \\\"chave\\\": \\\"a1f4102e-a446-4a57-bcce-6fa48899c1d1\\\",\\n  \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    },\n    {\n      \"code\": \"InvalidOperationError\\n{\\n  \\\"nome\\\": \\\"documento_bloqueado\\\",\\n  \\\"mensagem\\\": \\\"O documento desta conta tem bloqueios que impedem a emissão\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"chave_invalida\\\",\\n  \\\"mensagem\\\": \\\"A chave informada não faz referência à conta Gerencianet autenticada\\\"\\n}\\n\\nInvalidValueError\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"Campo valor.original deve ser maior que zero\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"Campo calendario.expiracao deve ser maior que zero\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"Documento CPF em devedor.cpf é inválido\\\"\\n}\\n\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"Documento CNPJ em devedor.cnpj é inválido\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    },\n    {\n      \"code\": \"DuplicatedRegisterError\\n{\\n  \\\"nome\\\": \\\"txid_duplicado\\\",\\n  \\\"mensagem\\\": \\\"Campo txid informado já foi utilizado em outra cobrança\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"409\"\n    },\n    {\n      \"code\": \"ApplicationError\\n{\\n  \\\"nome\\\": \\\"erro_aplicacao\\\",\\n  \\\"mensagem\\\": \\\"Ocorreu um erro ao validar a chave\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"500\"\n    }\n  ]\n}\n[/block]\n## Revisar cobrança\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**)\n\nPATCH para revisar cobrança <code>PATCH /cob/{txid}</code>\n\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"REMOVIDA_PELO_USUARIO_RECEBEDOR\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": null\n    }\n  ]\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"**txid** \",\n    \"0-1\": \"**Identificador da transação** \\nO 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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o)\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n### Dados para geração da cobrança\n\n<div class=\"tab2\">(*) Atributo obrigatório*</div>\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"**calendario** \",\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-1\": \"Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança.\\n\\ncalendario:\\n<div class=\\\"tab2\\\"><code>criacao*</code> // Timestamp que indica o momento em que foi criada a cobrança. Respeita o formato definido na RFC 3339. Mínimo de 1 caractere e máximo de 255 caracteres (String).\\n\\n<code>apresentacao*</code>// 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. string date-time (Timestamp de apresentação do QR Code)\\n\\n <code>expiracao</code>// Tempo de vida da cobrança, especificado em segundos a partir da data de criação (Calendario.criacao). Recebem um numero com valor máximo integer int32, passado como integer </div>\",\n    \"0-2\": \"Não\",\n    \"0-3\": \"object (Calendário)\",\n    \"1-0\": \"**status** \",\n    \"1-1\": \"Enum: <code>\\\"ATIVA\\\"</code>,<code>\\\"CONCLUIDA\\\"</code>\\n\\n<code>\\\"REMOVIDA_PELO_USUARIO_RECEBEDOR\\\"</code>,\\n\\n<code>\\\"REMOVIDA_PELO_PSP\\\"</code>\",\n    \"1-2\": \"Não\",\n    \"1-3\": \"string (Status da Cobrança)\",\n    \"2-0\": \"**devedor** \",\n    \"2-1\": \"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.\\n\\n*devedor:* \\n<div class=\\\"tab2\\\"><code>cpf*</code>// CPF do usuário pagador.string<code> /^\\\\d{11}$/</code>\\n\\n<code>nome*</code>// Nome do usuário pagador. string (Nome) <code>≤ 200 characters</code></div>\",\n    \"3-0\": \"<b>valor</b>\",\n    \"3-1\": \"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”<br><br> <em>valor:</em><br><code>original*</code>// Valor original da cobrança. string <code> \\\\d{1,10}\\\\.\\\\d{2}</code>\",\n    \"3-2\": \"Não\",\n    \"3-3\": \"object\",\n    \"4-0\": \"<b>chave</b>\",\n    \"4-1\": \"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.\",\n    \"4-2\": \"Não\",\n    \"4-3\": \"string (Solicitação ao pagador)<code><= 140 characters</code>\",\n    \"5-0\": \"<b>infoAdicionais</b>\",\n    \"5-1\": \"Cada respectiva informação adicional contida na lista (nome e valor) deve ser apresentada ao pagador.<br/><br> <em>infoAdicionais:</em><br><code>nome*</code>// Nome do campo string (Nome) <code>< 50 characters</code><br><br> <code>valor*</code>// Dados do campo string (Valor) <code>< 200 characters</code>\",\n    \"5-2\": \"Não\",\n    \"5-3\": \"Array of objects (Informações adicionais)<code><= 50</code>\",\n    \"2-2\": \"Não\",\n    \"2-3\": \"Pessoa Física (object) or Pessoa Jurídica (object)\"\n  },\n  \"cols\": 4,\n  \"rows\": 6\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"ATIVA\\\",\\n  \\\"calendario\\\": {\\n    \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n    \\\"expiracao\\\": \\\"3600\\\"\\n  },\\n  \\\"location\\\": \\\"pix.example.com/qr/9d36b84f-c70b-478f-b95c-12729b90ca25\\\",\\n  \\\"txid\\\": \\\"7978c0c97ea847e78e8849634473c1f1\\\",\\n  \\\"revisao\\\": 1,\\n  \\\"devedor\\\": {\\n    \\\"cnpj\\\": \\\"12345678000195\\\",\\n    \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n  },\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"567.89\\\"\\n  },\\n  \\\"chave\\\": \\\"a1f4102e-a446-4a57-bcce-6fa48899c1d1\\\",\\n  \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    },\n    {\n      \"code\": \"UnknownRegisterError\\n{\\n  \\\"nome\\\": \\\"cobranca_nao_encontrada\\\",\\n  \\\"mensagem\\\": \\\"Nenhuma cobrança encontrada para o txid informado\\\"\\n}\\n\\nInvalidOperationError\\n{\\n  \\\"nome\\\": \\\"status_cobranca_invalido\\\",\\n  \\\"mensagem\\\": \\\"A cobrança não está mais com o status ATIVA\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"chave_invalida\\\",\\n  \\\"mensagem\\\": \\\"A chave informada não faz referência à conta Gerencianet autenticada\\\"\\n}\\n\\n\\nInvalidValueError\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"Campo calendario.expiracao deve ser maior que zero\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"Documento CPF em devedor.cpf é inválido\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"Documento CNPJ em devedor.cnpj é inválido\\\"\\n}\\n\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    },\n    {\n      \"code\": \"DuplicatedRegisterError\\n{\\n  \\\"nome\\\": \\\"txid_duplicado\\\",\\n  \\\"mensagem\\\": \\\"Campo txid informado já foi utilizado em outra cobrança\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"409\"\n    },\n    {\n      \"code\": \"ApplicationError\\n{\\n  \\\"nome\\\": \\\"erro_aplicacao\\\",\\n  \\\"mensagem\\\": \\\"Ocorreu um erro ao validar a chave\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"500\"\n    }\n  ]\n}\n[/block]\n## Consultar cobrança\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**)\n\nEndpoint para consultar uma cobrança através de um determinado TxID,  o atributo é inserido no parâmetro da query  <code>GET /cob​/{txid}</code>.\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>txid</b>\",\n    \"0-1\": \"<b>Identificador da transação</b><br>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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o).\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>\",\n    \"1-0\": \"<b>revisao</b>\",\n    \"1-1\": \"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.\",\n    \"1-3\": \"integer($int32)\",\n    \"1-2\": \"Não\"\n  },\n  \"cols\": 4,\n  \"rows\": 2\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"ATIVA\\\",\\n  \\\"calendario\\\": {\\n    \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n    \\\"expiracao\\\": \\\"3600\\\"\\n  },\\n  \\\"location\\\": \\\"pix.example.com/qr/9d36b84f-c70b-478f-b95c-12729b90ca25\\\",\\n  \\\"txid\\\": \\\"7978c0c97ea847e78e8849634473c1f1\\\",\\n  \\\"revisao\\\": 1,\\n  \\\"devedor\\\": {\\n    \\\"cnpj\\\": \\\"12345678000195\\\",\\n    \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n  },\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"567.89\\\"\\n  },\\n  \\\"chave\\\": \\\"a1f4102e-a446-4a57-bcce-6fa48899c1d1\\\",\\n  \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 1 (200)\"\n    },\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"CONCLUIDA\\\",\\n  \\\"calendario\\\": {\\n    \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n    \\\"expiracao\\\": \\\"3600\\\"\\n  },\\n  \\\"location\\\": \\\"qrcodes-pix.gerencianet.com.br/1dd7f893-a58e-4172-8702-8dc33e21a403\\\",\\n  \\\"txid\\\": \\\"655dfdb1-a451-4b8f-bb58-254b958913fb\\\",\\n  \\\"revisao\\\": 1,\\n  \\\"devedor\\\": {\\n    \\\"cnpj\\\": \\\"12345678000195\\\",\\n    \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n  },\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"100.00\\\"\\n  },\\n  \\\"chave\\\": \\\"40a0932d-1918-4eee-845d-35a2da1690dc\\\",\\n  \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\",\\n  \\\"pix\\\": [\\n    {\\n      \\\"endToEndId\\\": \\\"E12345678202009091221kkkkkkkkkkk\\\",\\n      \\\"txid\\\": \\\"655dfdb1-a451-4b8f-bb58-254b958913fb\\\",\\n      \\\"valor\\\": \\\"110.00\\\",\\n      \\\"horario\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n      \\\"pagador\\\": {\\n        \\\"cnpj\\\": \\\"12345678000195\\\",\\n        \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n      },\\n      \\\"infoPagador\\\": \\\"0123456789\\\",\\n      \\\"devolucoes\\\": [\\n        {\\n          \\\"id\\\": \\\"123ABC\\\",\\n          \\\"rtrId\\\": \\\"Dxxxxxxxx202009091221kkkkkkkkkkk\\\",\\n          \\\"valor\\\": \\\"10.00\\\",\\n          \\\"horario\\\": {\\n            \\\"solicitacao\\\": \\\"2020-09-09T20:15:00.358Z\\\"\\n          },\\n          \\\"status\\\": \\\"EM_PROCESSAMENTO\\\"\\n        }\\n      ]\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 2 (200)\"\n    },\n    {\n      \"code\": \"UnknownRegisterError\\n{\\n  \\\"nome\\\": \\\"cobranca_nao_encontrada\\\",\\n  \\\"mensagem\\\": \\\"Nenhuma cobrança encontrada para o txid informado\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    }\n  ]\n}\n[/block]\n## Consultar lista de cobranças\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**)\n\nEndpoint para consultar cobranças através de parâmetros como início, fim, cpf, cnpj e status, os atributos são inseridos no parâmetro da query  <code>GET /cob​/</code>\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{{gn-pix-api}}/v2/cob?inicio=2020-10-22T16:01:35Z&fim=2020-11-30T20:10:00Z\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo\"\n    }\n  ]\n}\n[/block]\n<div class=\"tab2\">(*) Atributo obrigatório </div>\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>inicio</b>\",\n    \"0-1\": \"Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string <date-time>\",\n    \"1-0\": \"<b>fim</b>\",\n    \"1-1\": \"Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339.\",\n    \"1-2\": \"Sim\",\n    \"1-3\": \"string <date-time>\",\n    \"2-0\": \"<b>cpf</b>\",\n    \"2-1\": \"Filtro pelo CPF do pagador. Não pode ser utilizado ao mesmo tempo que o CNPJ.\",\n    \"2-2\": \"Não\",\n    \"2-3\": \"string <code>/^\\\\d{11}$/</code>\",\n    \"3-0\": \"<b>cnpj</b>\",\n    \"3-1\": \"Filtro pelo CNPJ do pagador. Não pode ser utilizado ao mesmo tempo que o CPF.\",\n    \"3-2\": \"Não\",\n    \"3-3\": \"string<code>/^\\\\d{14}$/</code>\",\n    \"4-0\": \"<b>status</b>\",\n    \"4-1\": \"Enum: <code>\\\"ATIVA\\\"</code>,<code>\\\"CONCLUIDA\\\"</code>,<br> <code>\\\"REMOVIDA_PELO_USUARIO_RECEBEDOR\\\"</code>,<br> <code>\\\"REMOVIDA_PELO_PSP\\\"</code>\\n Filtro pelo status da cobrança.\",\n    \"4-2\": \"Não\",\n    \"4-3\": \"string\",\n    \"5-0\": \"<b>paginacao.paginaAtual</b>\",\n    \"5-1\": \"Default: <code>0</code><br> Página a ser retornada pela consulta. Se não for informada, o PSP assumirá que será 0.\",\n    \"5-2\": \"Não\",\n    \"5-3\": \"integer {int32} (Página atual)  <code>>= 0</code>\",\n    \"6-0\": \"<b>paginacao.itensPorPagina</b>\",\n    \"6-1\": \"Default: <code>100</code><br> Quantidade máxima de registros retornados em cada página. Apenas a última página pode conter uma quantidade menor de registros.\",\n    \"6-2\": \"Não\",\n    \"6-3\": \"integer {int32} (Página atual)  <code>[1 .. 1000]</code>\"\n  },\n  \"cols\": 4,\n  \"rows\": 7\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) do consumo.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"parametros\\\": {\\n    \\\"inicio\\\": \\\"2020-04-01T00:00:00Z\\\",\\n    \\\"fim\\\": \\\"2020-04-02T10:00:00Z\\\",\\n    \\\"paginacao\\\": {\\n      \\\"paginaAtual\\\": 0,\\n      \\\"itensPorPagina\\\": 100,\\n      \\\"quantidadeDePaginas\\\": 1,\\n      \\\"quantidadeTotalDeItens\\\": 2\\n    }\\n  },\\n  \\\"cobs\\\": [\\n    {\\n      \\\"status\\\": \\\"ATIVA\\\",\\n      \\\"calendario\\\": {\\n        \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n        \\\"expiracao\\\": \\\"3600\\\"\\n      },\\n      \\\"location\\\": \\\"qrcodes-pix.gerencianet.com.br/9d36b84f-c70b-478f-b95c-12729b90ca25\\\",\\n      \\\"txid\\\": \\\"7978c0c97ea847e78e8849634473c1f1\\\",\\n      \\\"revisao\\\": 1,\\n      \\\"devedor\\\": {\\n        \\\"cnpj\\\": \\\"12345678000195\\\",\\n        \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n      },\\n      \\\"valor\\\": {\\n        \\\"original\\\": \\\"567.89\\\"\\n      },\\n      \\\"chave\\\": \\\"a1f4102e-a446-4a57-bcce-6fa48899c1d1\\\",\\n      \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\"\\n    },\\n    {\\n      \\\"status\\\": \\\"CONCLUIDA\\\",\\n      \\\"calendario\\\": {\\n        \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n        \\\"expiracao\\\": \\\"3600\\\"\\n      },\\n      \\\"location\\\": \\\"qrcodes-pix.gerencianet.com.br/1dd7f893-a58e-4172-8702-8dc33e21a403\\\",\\n      \\\"txid\\\": \\\"655dfdb1-a451-4b8f-bb58-254b958913fb\\\",\\n      \\\"revisao\\\": 1,\\n      \\\"devedor\\\": {\\n        \\\"cnpj\\\": \\\"12345678000195\\\",\\n        \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n      },\\n      \\\"valor\\\": {\\n        \\\"original\\\": \\\"100.00\\\"\\n      },\\n      \\\"chave\\\": \\\"40a0932d-1918-4eee-845d-35a2da1690dc\\\",\\n      \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\",\\n      \\\"pix\\\": [\\n        {\\n          \\\"endToEndId\\\": \\\"E12345678202009091221kkkkkkkkkkk\\\",\\n          \\\"txid\\\": \\\"655dfdb1-a451-4b8f-bb58-254b958913fb\\\",\\n          \\\"valor\\\": \\\"110.00\\\",\\n          \\\"horario\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n          \\\"pagador\\\": {\\n            \\\"cnpj\\\": \\\"12345678000195\\\",\\n            \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n          },\\n          \\\"infoPagador\\\": \\\"0123456789\\\",\\n          \\\"devolucoes\\\": [\\n            {\\n              \\\"id\\\": \\\"123ABC\\\",\\n              \\\"rtrId\\\": \\\"Dxxxxxxxx202009091221kkkkkkkkkkk\\\",\\n              \\\"valor\\\": \\\"10.00\\\",\\n              \\\"horario\\\": {\\n                \\\"solicitacao\\\": \\\"2020-09-09T20:15:00.358Z\\\"\\n              },\\n              \\\"status\\\": \\\"EM_PROCESSAMENTO\\\"\\n            }\\n          ]\\n        }\\n      ]\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 1 (200)\"\n    },\n    {\n      \"code\": \" \\\"parametros\\\": {\\n    \\\"inicio\\\": \\\"2020-04-01T00:00:00Z\\\",\\n    \\\"fim\\\": \\\"2020-04-01T23:59:59Z\\\",\\n    \\\"paginacao\\\": {\\n      \\\"paginaAtual\\\": 0,\\n      \\\"itensPorPagina\\\": 100,\\n      \\\"quantidadeDePaginas\\\": 1,\\n      \\\"quantidadeTotalDeItens\\\": 1\\n    }\\n  },\\n  \\\"cobs\\\": [\\n    {\\n      \\\"status\\\": \\\"ATIVA\\\",\\n      \\\"calendario\\\": {\\n        \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n        \\\"expiracao\\\": \\\"3600\\\"\\n      },\\n      \\\"location\\\": \\\"qrcodes-pix.gerencianet.com.br/9d36b84f-c70b-478f-b95c-12729b90ca25\\\",\\n      \\\"txid\\\": \\\"7978c0c9-7ea8-47e7-8e88-49634473c1f1\\\",\\n      \\\"revisao\\\": 1,\\n      \\\"devedor\\\": {\\n        \\\"cnpj\\\": \\\"12345678000195\\\",\\n        \\\"nome\\\": \\\"Empresa de Serviços SA\\\"\\n      },\\n      \\\"valor\\\": {\\n        \\\"original\\\": \\\"567.89\\\"\\n      },\\n      \\\"chave\\\": \\\"a1f4102e-a446-4a57-bcce-6fa48899c1d1\\\",\\n      \\\"solicitacaoPagador\\\": \\\"Informar cartão fidelidade\\\"\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 2 (200)\"\n    }\n  ]\n}\n[/block]\n## Pix\n\nReúne endpoints destinados a lidar com gerenciamento de Pix recebidos.\n\n\n## Consultar Pix.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.read**)\n\nEndpoint para consultar um Pix através de um e2eid <code>GET /pix/{e2eId}</code>.\n<br>\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"<b>e2eid</b>\",\n    \"0-1\": \"EndToEndIdentification que transita na PACS002, PACS004 e PACS008\",\n    \"0-2\": \"Sim\",\n    \"h-2\": \"Obrigatório\",\n    \"h-1\": \"Descrição\",\n    \"h-0\": \"Atributo\",\n    \"h-3\": \"Tipo\",\n    \"0-3\": \"string (Id fim a fim da transação) \\n<code>32 characters </code>\\n<code>^[a-zA-Z0-9]{32}</code>\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Dados do Pix efetuado.\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n## Consultar Pix recebidos.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.read**)\n\nEndpoint para consultar Pix recebidos <code>GET /pix​/</code>.\n\n<br>\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>inicio</b>\",\n    \"1-0\": \"<b>fim</b>\",\n    \"2-0\": \"<b>txid</b>\",\n    \"3-0\": \"<b>txIdPresente</b>\",\n    \"4-0\": \"<b>devolucaoPresente</b>\",\n    \"5-0\": \"<b>cpf</b>\",\n    \"6-0\": \"<b>cnpj</b>\",\n    \"7-0\": \"<b>paginacao.paginaAtual</b>\",\n    \"8-0\": \"<b>paginacao.itensPorPagina</b>\",\n    \"0-1\": \"Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339.\",\n    \"0-3\": \"string <date-time> (Data de início)\",\n    \"1-1\": \"Filtra os registros cuja data de criação seja menor ou igual que a data de fim. Respeita RFC 3339.\",\n    \"1-3\": \"string <date-time> (Data de início)\",\n    \"2-1\": \"<b>Identificador da transação</b><br>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.\\n\\nNa pacs.008, é referenciado como  <code>TransactionIdentification <txId> </code> ou  <code>idConciliacaoRecebedor. </code>\\n\\nEm 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.\\n\\nO 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.\",\n    \"2-3\": \"<code>[a-zA-Z0-9]{26,35}</code>\",\n    \"3-1\": \"boolean\",\n    \"4-1\": \"boolean\",\n    \"5-3\": \"string (CPF) <code>/^\\\\d{11}$/</code>\",\n    \"5-1\": \"Filtro pelo CPF do pagador. Não pode ser utilizado ao mesmo tempo que o CNPJ.\",\n    \"6-1\": \"Filtro pelo CNPJ do pagador. Não pode ser utilizado ao mesmo tempo que o CPF.\",\n    \"7-1\": \"Default: <code>0</code>\\nPágina a ser retornada pela consulta. Se não for informada, o PSP assumirá que será 0.\",\n    \"8-1\": \"Default: <code>100</code>\\nQuantidade máxima de registros retornados em cada página. Apenas a última página pode conter uma quantidade menor de registros.\",\n    \"6-3\": \"string (CNPJ) <code>/^\\\\d{14}$/</code>\",\n    \"7-3\": \"integer <int32> (Página atual) >= 0\",\n    \"8-3\": \"integer <int32> (Itens por Página) [ 1 .. 1000 ]\",\n    \"0-2\": \"Sim\",\n    \"1-2\": \"Sim\",\n    \"2-2\": \"Não\",\n    \"3-2\": \"Não\",\n    \"4-2\": \"Não\",\n    \"5-2\": \"Não\",\n    \"6-2\": \"Não\",\n    \"7-2\": \"Não\",\n    \"8-2\": \"Não\"\n  },\n  \"cols\": 4,\n  \"rows\": 9\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Lista dos Pix recebidos de acordo com o critério de busca\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n## Solicitar devolução.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.write**)\n\nEndpoint para solicitar uma devolução através de um e2eid do Pix e do ID da devolução. O motivo que será atribuído à PACS.004 será \"Devolução solicitada pelo usuário recebedor do pagamento original\" cuja sigla é \"MD06\" de acordo com a aba RTReason da PACS.004 que consta no Catálogo de Mensagens do Pix <code>PUT /pix/{e2eId}/devolucao/{id}</code>.\n\n<br>\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"<b>e2eid</b>\",\n    \"1-0\": \"<b>id</b>\",\n    \"0-3\": \"string (Id fim a fim da transação) <code>32 characters</code> <code>[a-zA-Z0-9]{32}</code>\",\n    \"1-3\": \"string (Id da Devolução) <code>[a-zA-Z0-9]{1,35}</code>\",\n    \"0-1\": \"EndToEndIdentification que transita na PACS002, PACS004 e PACS008\",\n    \"1-1\": \"Id gerado pelo cliente para representar unicamente uma devolução.\",\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-2\": \"Sim\",\n    \"1-2\": \"Sim\"\n  },\n  \"cols\": 4,\n  \"rows\": 2\n}\n[/block]\nDados para pedido de devolução.\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>valor</b>\",\n    \"0-1\": \"Valor solicitado para devolução. A soma dos valores de todas as devolucões não podem ultrapassar o valor total do Pix.\",\n    \"0-3\": \"string (Valor) <code>\\\\d{1,10}\\\\.\\\\d{2}</code>\",\n    \"0-2\": \"Sim\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Dados da devolução\",\n      \"language\": \"json\",\n      \"name\": \"201\"\n    }\n  ]\n}\n[/block]\n## Consultar devolução.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.read**)\n\nEndpoint para consultar uma devolução através de um End To End ID do Pix e do ID da devolução <code>GET /pix/{e2eId}/devolucao/{id}</code>.\n\n<br>\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>e2eid</b>\",\n    \"1-0\": \"<b>id</b>\",\n    \"0-1\": \"EndToEndIdentification que transita na PACS002, PACS004 e PACS008\",\n    \"1-1\": \"Id gerado pelo cliente para representar unicamente uma devolução.\",\n    \"0-3\": \"string (Id fim a fim da transação) <code>32 characters</code> <code>[a-zA-Z0-9]{32}</code>\",\n    \"1-3\": \"string (Id da Devolução) <code>[a-zA-Z0-9]{1,35}</code>\",\n    \"0-2\": \"Sim\",\n    \"1-2\": \"Sim\"\n  },\n  \"cols\": 4,\n  \"rows\": 2\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Dados da devolução\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n##  Webhook\n\nReúne endpoints para gerenciamento de notificações por parte do PSP recebedor ao usuário recebedor.\n\nDevido a uma norma do Banco Central, será necessário a inserção de uma chave pública da Gerencianet em seu servidor para que a comunicação obedeça o padrão mTLS. Em seu domínio que representa o seu servidor, deverá ser feita uma configuração para exigir a chave pública (mTLS) que estamos disponibilizando para que ocorra a autenticação mútua.\n\nA Gerencianet irá fazer 2 requisições para o seu domínio(servidor).\n\n1ª Requisição:  Vamos certificar que seu servidor esteja exigindo uma chave pública da Gerencianet. Isso será feito ao enviar uma requisição sem certificado e seu servidor não deverá aceitar a requisição. Uma vez respondido com a recusa será enviado a 2º requisição.\n\n2ª Requisição: Enviaremos a notificação junto com a nossa chave pública, o seu servidor que deve conter a chave pública disponibilizada deverá realizar o \"Hand-Shake\" e assim a comunicação ser estabelecida.\n\nÉ necessário que o seu servidor tenha a versão mínima do TLS 1.2. Mais detalhes sobre o TLS [aqui](https://dev.gerencianet.com.br/docs/atualizacao-tls-12)\n\nEm seu servidor você deve configurar uma rota 'POST' com uma resposta padrão como uma string \"200\". Deve ser inserido o nosso certificado de produção ou homologação em seu servidor, abaixo temos alguns exemplos.\n\n\n**Obs:** Você deve ter um servidor dedicado para conseguir realizar as configurações do webhook, uma vez que é necessário ter acesso a alguns arquivos para realizar as configurações como nos exemplos abaixo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"https://pix.gerencianet.com.br/webhooks/chain-pix-sandbox.crt\",\n      \"language\": \"text\",\n      \"name\": \"Chave Pública-Desenvolvimento\"\n    },\n    {\n      \"code\": \"https://pix.gerencianet.com.br/webhooks/chain-pix-prod.crt\",\n      \"language\": \"text\",\n      \"name\": \"Chave Pública-Produção\"\n    }\n  ]\n}\n[/block]\n### Exemplos de uma configuração de servidor.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"from flask import Flask, jsonify\\nimport ssl\\napp = Flask(__name__)\\n\\n\\[email protected](\\\"/\\\")\\ndef hello():\\n    return \\\"<h1 style='color:blue'>Hello There!</h1>\\\"\\n\\n\\[email protected](\\\"/\\\", methods=[\\\"PUT\\\"])\\ndef hello_put():\\n    response = {\\\"status\\\": 200}\\n    return jsonify(response)\\n\\n\\[email protected](\\\"/\\\", methods=[\\\"POST\\\"])\\ndef hello_post():\\n    response = {\\\"status\\\": 200}\\n    return jsonify(response)\\n\\n\\nif __name__ == \\\"__main__\\\":\\n    context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)\\n    context.verify_mode = ssl.CERT_REQUIRED\\n    context.load_verify_locations('caminho-certificados/certificado-público-Gerencianet.crt')\\n    context.load_cert_chain(\\n        'caminho-certificados/server_ssl.crt.pem',\\n        'caminho-certificados/server_ssl.key.pem')\\n    app.run(ssl_context=context, host='0.0.0.0')\\n#Desenvolvido pela Consultoria Técnica da Gerencianet    \",\n      \"language\": \"python\",\n      \"name\": \"Python\"\n    },\n    {\n      \"code\": \"server {\\n    #\\n    # ...\\n    #\\n    listen [::]:443 ssl ipv6only=on;\\n    listen 443 ssl;\\n    ssl_certificate server_ssl.crt.pem;\\n    ssl_certificate_key server_ssl.key.pem;\\n    ssl_client_certificate /root/chain-pix-webhooks-prod.crt;\\n    ssl_verify_client optional;\\n    #\\n    # ...\\n    #\\n    location /webhook {\\n        if ($ssl_client_verify != SUCCESS) {\\n            return 403;\\n        }\\n        rewrite ^(.*)$ /webhook;\\n    }\\n}\\n#Desenvolvido pela Consultoria Técnica da Gerencianet\",\n      \"language\": \"http\",\n      \"name\": \"Nginx\"\n    },\n    {\n      \"code\": \"https.createServer({\\n    cert: '', // certificado pem do dominio\\n    key: '', // chave pem do dominio\\n    ca: '', // certificado público da Gerencianet\\n    minVersion: 'TLSv1.2', // força o uso de TLS da versão 1.2 para cima\\n    requestCert: true, // força que o cliente envie um certificado de cliente (mtls)\\n    rejectUnauthorized: true // rejeita clientes que não enviarem certificados válidos\\n  });\\n#Desenvolvido pela Consultoria Técnica da Gerencianet\",\n      \"language\": \"javascript\",\n      \"name\": \"Node\"\n    }\n  ]\n}\n[/block]\nPara ter um ter um SSL válido, você deve entrar em contato com uma Autoridade Certificadora e gerar a chave privada  <code>server_ssl.key.pem</code> e uma pública <code>server_ssl.crt.pem</code>, assim você valida a integridade da conexão. Você consegue realizar isso de forma gratuita utilizando um utilitário como o <a href=\"https://certbot.eff.org/\" target=\"_blank\">Certbot</a> por exemplo.\n\n\n<br>\n### Configurar o Webhook Pix.\n\nEndpoint para configuração do serviço de notificações acerca de Pix recebidos. Somente PIX associados a um txid serão notificados.\n\n\nConfigurar o Webhook Pix  <code>PUT ​/webhook/:chave</code>.\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**webhook.write**)\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"webhookUrl\\\": \\\"https://exemplo-pix/webhook\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Example Value\"\n    }\n  ]\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>webhookUrl</b>\",\n    \"0-1\": \"Url para onde a notificação vai ser enviada\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string {uri}\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n### Respostas\n\nAs respostas abaixo representam Sucesso(201) e Falhas/erros do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Webhook para notificações acerca de Pix recebidos associados a um txid.\",\n      \"language\": \"json\",\n      \"name\": \"201\"\n    },\n    {\n      \"code\": \"InvalidValueError\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"URL inválida\\\"\\n}\\n\\nOu\\n\\n{\\n  \\\"nome\\\": \\\"valor_invalido\\\",\\n  \\\"mensagem\\\": \\\"A URL do webhook deve usar o protocolo HTTPS\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    }\n  ]\n}\n[/block]\n## Callbacks\n\nEsse serviço está protegido por uma camada de autenticação mTLS. Os callbacks são  enviados pela Gerencianet via <code>POST {$request.body#​/webhookUrl}​/pix</code> quando há uma alteração no status do PIX.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"pix\\\": [\\n    {\\n      \\\"endToEndId\\\": \\\"E12345678202009091221syhgfgufg\\\",\\n      \\\"txid\\\": \\\"c3e0e7a4e7f1469a9f782d3d4999343c\\\",\\n      \\\"valor\\\": \\\"110.00\\\",\\n      \\\"horario\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n      \\\"infoPagador\\\": \\\"0123456789\\\",\\n      \\\"devolucoes\\\": {\\n        \\\"id\\\": \\\"123ABC\\\",\\n        \\\"rtrId\\\": \\\"D12345678202009091221abcdf098765\\\",\\n        \\\"valor\\\": \\\"10.00\\\",\\n        \\\"horario\\\": {\\n          \\\"solicitacao\\\": \\\"2020-09-09T20:15:00.358Z\\\"\\n        },\\n        \\\"status\\\": \\\"EM_PROCESSAMENTO\\\"\\n      }\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo\"\n    }\n  ]\n}\n[/block]\n<div class=\"tab2\">(*) Atributo obrigatório </div>\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\",\n    \"0-0\": \"<b>endToEndId</b>\",\n    \"0-1\": \"EndToEndIdentification que transita na PACS002, PACS004 e PACS008\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string (Id fim a fim da transação) <code>^[a-zA-Z0-9]{26,35}$</code>\",\n    \"1-0\": \"<b>txid</b>\",\n    \"1-1\": \"<b>Identificador da transação</b><br>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, mais detalhes <a href=\\\"https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o\\\">veja aqui</a>.\",\n    \"1-2\": \"Não\",\n    \"1-3\": \"Array of objects (Pix) <code>^[a-zA-Z0-9]{26,35}$</code>\",\n    \"2-0\": \"<b>valor</b>\",\n    \"2-1\": \"Valor do Pix.\",\n    \"2-2\": \"Sim\",\n    \"2-3\": \"string <code>\\\\d{1,10}\\\\.\\\\d{2}</code>\",\n    \"3-0\": \"<b>horario</b>\",\n    \"3-1\": \"Horário em que o Pix foi processado no PSP.\",\n    \"3-2\": \"Sim\",\n    \"3-3\": \"string <date-time> (Horário)\",\n    \"4-0\": \"<b>pagador</b>\",\n    \"4-1\": \"Um CPF ou um CNPJ pode ser o pagador de uma cobrança. 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.<br><br> <em>pagador:</em><br><div class=\\\"tab2\\\"> <code>cpf*</code>// CPF do usuário pagador.string<code> /^\\\\d{11}$/</code><br><br> <code>nome*</code>// Nome do usuário pagador. string (Nome) <code>< 200 characters</code></div>\",\n    \"4-2\": \"Não\",\n    \"4-3\": \"Pessoa Física (object) or Pessoa Jurídica (object)\",\n    \"5-0\": \"<b>infoPagador</b>\",\n    \"5-1\": \"Informação livre do pagador\",\n    \"5-2\": \"Sim\",\n    \"5-3\": \"string <code>< 140 characters</code>\",\n    \"6-0\": \"<b>devolucoes</b>\",\n    \"6-1\": \"devolucoes:\\n<div class=\\\"tab2\\\"><code>id*</code>// Id gerado pelo cliente para representar unicamente uma devolução.string (Id da Devolução)<code>^[a-zA-Z0-9]{26,35}$</code>\\n\\n<code> rtrId*</code>// ReturnIdentification que transita na PACS004. string (RtrId) ≤ 32 characters\\n\\n<code>valor*</code>// Valor a devolver.string <code>\\\\d{1,10}\\\\.\\\\d{2}</code>\\n\\n <code>horario*</code>// Atributos de horário. object\\n<br>\\n<code>solicitacao*</code>: //Horário no qual a devolução foi solicitada no PSP.\\nstring <date-time> (Horário de solicitação)\\n<code>liquidacao</code>: //Horário no qual a devolução foi liquidada no PSP.\\nstring <date-time> (Horário de liquidacao)\\n<br>\\n<code>status*</code>// Status da devolução. Enum: <code>\\\"EM_PROCESSAMENTO\\\"</code>,<code>\\\"DEVOLVIDO\\\"</code>,<br><code>\\\"NAO_REALIZADO\\\"</code>Status da devolução. string (Status)</div>\",\n    \"6-2\": \"Não\",\n    \"6-3\": \"Array ()\"\n  },\n  \"cols\": 4,\n  \"rows\": 7\n}\n[/block]\n### Resposta \n\nA resposta abaixo representa Sucesso(200) do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Notificação recebida com sucesso\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n<br>\n\n## Exibir informações acerca do Wehook Pix.\n\nEndpoint para recuperação de informações sobre o webhook pix <code>GET ​/webhook/:chave</code>.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**webhook.read**)\n\n### Resposta \n\nA resposta abaixo representa Sucesso(200) do consumo.\n\n<code>Dados da location do Payload</code>\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"webhookUrl\\\": \\\"https://gn-pix-webhook.gerencianet.com.br/webhook\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n<br>\n\n\n## Consultar lista de webhooks\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**)\n\nEndpoint para consultar webhooks associados a chaves através de parâmetros como início, fim. Os atributos são inseridos no parâmetro da query  <code>GET /v2/webhook/</code>\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{{gn-pix-api}}/v2/webhook/?inicio=2020-10-22T16:01:35Z&fim=2020-10-23T16:01:35Z\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo\"\n    }\n  ]\n}\n[/block]\n\n[block:parameters]\n{\n  \"data\": {\n    \"0-0\": \"<b>inicio</b>\",\n    \"0-1\": \"Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string <date-time>\",\n    \"1-0\": \"<b>fim</b>\",\n    \"1-1\": \"Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339.\",\n    \"1-2\": \"Sim\",\n    \"1-3\": \"string <date-time>\",\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"h-3\": \"Tipo\"\n  },\n  \"cols\": 4,\n  \"rows\": 2\n}\n[/block]\n<br>\n\n## Cancelar o webhook Pix.\n\nEndpoint para cancelamento do webhook. pix <code>DELETE ​/webhook/:chave</code>.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**webhook.write**)\n\n### Resposta\n\nA resposta abaixo representa Sucesso(204) do consumo.\n\n<code>Webhook para notificações Pix foi cancelado</code>\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Webhook para notificações Pix foi cancelado.\",\n      \"language\": \"json\",\n      \"name\": \"204\"\n    }\n  ]\n}\n[/block]\n## Schemas\n\n### Id da Transação\n[block:parameters]\n{\n  \"data\": {\n    \"h-0\": \"Atributo\",\n    \"h-1\": \"Descrição\",\n    \"h-2\": \"Obrigatório\",\n    \"0-0\": \"<b>txid</b>\",\n    \"0-1\": \"<code>^[a-zA-Z0-9]{26,35}$</code><br><br><b>Identificador da transação </b><br><br>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.<br><br>Na pacs.008, é referenciado como <code>TransactionIdentification &lt;txId&gt; </code> ou <code>idConciliacaoRecebedor</code>. O preenchimento do campo  txid   é limitado a 35 caracteres na pacs.008.<br><br>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.<br><br>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.\",\n    \"0-2\": \"Sim\"\n  },\n  \"cols\": 3,\n  \"rows\": 1\n}\n[/block]\nSe você quer saber mais sobre a implementação da API Pix ou deseja receber uma proposta comercial, consulte um de nossos especialistas pelo e-mail <code>[email protected]</code> ou clique no botão abaixo.\n[block:html]\n{\n  \"html\": \"<a href=\\\"https://cta-redirect.hubspot.com/cta/redirect/3324438/0ae588cb-c51b-4c19-a281-827f2262d2d1\\\" target=\\\"_blank\\\" alt=\\\"QUERO UMA CONSULTORIA TÉCNICA\\\"><button type=\\\"button\\\" class=\\\"buttonCTA buttonorange\\\">QUERO SER CLIENTE GERENCIANET</button></a>\"\n}\n[/block]","updates":[],"order":0,"isReference":false,"hidden":false,"sync_unique":"","link_url":"","link_external":false,"createdAt":"2020-10-30T19:36:39.070Z","user":"5e8b36bc27ee9b00181b36bf","category":"5f9c614b7352f400665cd7f6","version":"575aeffae12cf20e002f306f","project":"575aeffae12cf20e002f306c","__v":0,"parentDoc":null,"childrenPages":[]}

API Pix

Você está em: *"API Pix"*

## GN API Pix A GN API Pix Gerencianet disponibiliza serviços oferecidos pela Gerencianet 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 por essa API permitem ao usuário recebedor estabelecer integração de sua plataforma ou sistema com os serviços Pix da Gerencianet. ## 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 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 GN API Pix. Clientes devem estar preparados para lidar com essas mudanças sem impactar suas integrações. Mudanças incompatíveis geram nova versão da GN API Pix. Se você quer saber mais sobre a implementação da API Pix ou deseja receber uma proposta comercial, consulte um de nossos especialistas pelo e-mail <code>[email protected]</code> ou clique no botão abaixo. [block:html] { "html": "<a href=\"https://cta-redirect.hubspot.com/cta/redirect/3324438/0ae588cb-c51b-4c19-a281-827f2262d2d1\" target=\"_blank\" alt=\"QUERO UMA CONSULTORIA TÉCNICA\"><button type=\"button\" class=\"buttonCTA buttonorange\">QUERO SER CLIENTE GERENCIANET</button></a>" } [/block] O time Técnico e Comercial também está disponível na Plataforma **Discord**. [Clique aqui](https://discord.gg/ptGHMtczcV) para acessar o servidor. ## Collection Postman Gerencianet API Pix Este é o <a href="https://documenter.getpostman.com/view/13574984/TVetcm6R" target="_blank" alt="link"></a> da nossa Collection que manteremos atualizada com o endpoints da API Pix. https://documenter.getpostman.com/view/13574984/TVetcm6R [![Run in Postman](https://run.pstmn.io/button.svg)](https://documenter.getpostman.com/view/13574984/TVetcm6R) ## Rota base [block:code] { "codes": [ { "code": " \"URL\": {\n \"sandbox\": \"https://api-pix-h.gerencianet.com.br\"\n }", "language": "json", "name": "Desenvolvimento" }, { "code": " \"URL\": {\n \"production\": \"https://api-pix.gerencianet.com.br\"\n }", "language": "json", "name": "Produção" } ] } [/block] ### OAuth2 [block:parameters] { "data": { "h-0": "Security Scheme Type", "h-1": "OAuth2", "0-0": "<b>clientCredentials OAuth Flow</b>", "0-1": "**Produção**\n<b>Token URL:</b> https://api-pix.gerencianet.com.br/oauth/token <br><b>Refresh URL:</b> https://api-pix.gerencianet.com.br/oauth/token <br>\n**Desenvolvimento**\n<b>Token URL:</b> https://api-pix-h.gerencianet.com.br/oauth/token <br><b>Refresh URL:</b> https://api-pix-h.gerencianet.com.br/oauth/token <br>\n<b>Scopes:</b> <br><br>\n\n<ul><li> <code>cob.write</code> - Permissão para alteração de cobranças</li><br> <li><code>cob.read</code> - Permissão para consulta de cobranças</li><br><li> <code>pix.write</code> - Permissão para alteração de Pix</li><br><li> <code>pix.read</code> - Permissão para consulta de Pix</li><br><li> <code>webhook.read</code> - Permissão para consulta do webhook</li><br><li> <code>webhook.write</code> - Permissão para alteração do webhook</li><br></ul>" }, "cols": 2, "rows": 1 } [/block] Todas as requisições devem conter um certificado de segurança que será fornecido pela Gerencianet dentro da sua conta, no formato <code>PFX(.p12)</code>. Essa exigência está descrita na integra no <a href="https://www.bcb.gov.br/estabilidadefinanceira/comunicacaodados" target="_blank" alt="manual de segurança do pix">manual de segurança do PIX</a>. Para gerar o seu certificado abra um ticket em https://gerencianet.com.br/fale-conosco/ informando o numero de sua conta e as credenciais client_id e client_secret de <code>desenvolvimento</code>. Nossa equipe ira retornar com o certificado para você realizar o consumo dos endpoints. **Obs:** Em algumas linguagens você deve converter o certificado .p12 para o formato .pem. Abaixo alguns exemplos utilizando o OpenSSL para a conversão. ### Conversão chave P12 para chave PEM [block:code] { "codes": [ { "code": "# Gerar certificado e chave em único arquivo\nopenssl pkcs12 -in certificado.p12 -out certificado.pem -nodes", "language": "javascript", "name": "Comando 1" }, { "code": "# Gerar certificado e chave separadas\nopenssl pkcs12 -in path.p12 -out newfile.crt.pem -clcerts -nokeys #certificado\nopenssl pkcs12 -in path.p12 -out newfile.key.pem -nocerts -nodes #chave privada", "language": "javascript", "name": "Comando 2" } ] } [/block] ### Exemplos de autenticação utilizando o certificado .P12 Para fazer requisições HTTP utilizando certificados .P12 ou .PEM para autenticação do PIX é necessário que a chave seja inserida na requisição. Para a utilização do PIX é necessário que um cliente e um servidor se comuniquem em uma conexão verificada um com o outro. A verificação é feita pelo certificado bidirecional (.PEM ou .P12). Um servidor e um cliente implementaram um certificado de chave privada e um certificado de chave pública. Abaixo, trazemos exemplos de como consumir o PIX Gerencianet incorporando esse certificado na requisição. [block:code] { "codes": [ { "code": "#Desenvolvido pela Consultoria Técnica da Gerencianet\n\n<?php\n\n$file = file_get_contents(\"./config.json\");\n$config = json_decode($file, true);\n$environment = ($config[\"sandbox\"] === true) ? \"development\" : \"production\";\n\n$certfile = \"./certificate.pem/\" . $config[$environment][\"certificate_name\"];\n\n$curl = curl_init();\n\n$authorization = base64_encode($config[$environment][\"client_id\"] . \":\" . $config[$environment][\"client_secret\"]);\n\ncurl_setopt_array($curl, array(\n CURLOPT_URL => $config[$environment][\"pix_auth_url\"], // Rota base, desenvolvimento ou produção\n CURLOPT_RETURNTRANSFER => true,\n CURLOPT_ENCODING => \"\",\n CURLOPT_MAXREDIRS => 10,\n CURLOPT_TIMEOUT => 0,\n CURLOPT_FOLLOWLOCATION => true,\n CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,\n CURLOPT_CUSTOMREQUEST => \"POST\",\n CURLOPT_POSTFIELDS => \"{\\r\\n \"grant_type\": \"client_credentials\"\\r\\n}\",\n CURLOPT_SSLCERT => $certfile, // Caminho do certificado\n CURLOPT_SSLCERTPASSWD => \"\",\n CURLOPT_HTTPHEADER => array(\n \"Authorization: Basic $authorization\",\n \"Content-Type: application/json\"\n ),\n));\n\n$response = curl_exec($curl);\n\ncurl_close($curl);\n\necho \"<pre>\";\necho $response;\necho \"</pre>\";", "language": "php" }, { "code": "//Desenvolvido pela Consultoria Técnica da Gerencianet\n\n\"use strict\";\nconst https = require(\"https\");\nvar axios = require(\"axios\");\nvar fs = require(\"fs\");\n\n//Insira o caminho de seu certificado .p12 dentro de seu projeto\nvar certificado = fs.readFileSync(\"./certificado.p12\");\n\n//Insira os valores de suas credenciais em desenvolvimento do pix\nvar credenciais = {\n client_id: \"YOUR-CLIENT-ID\",\n client_secret: \"YOUR-CLIENT-SECRET\",\n};\n\nvar data = JSON.stringify({ grant_type: \"client_credentials\" });\nvar data_credentials = credenciais.client_id + \":\" + credenciais.client_secret;\n\n// Codificando as credenciais em base64\nvar auth = Buffer.from(data_credentials).toString(\"base64\");\n\nconst agent = new https.Agent({\n pfx: certificado,\n passphrase: \"\",\n});\n//Consumo em desenvolvimento da rota post oauth/token\nvar config = {\n method: \"POST\",\n url: \"https://api-pix-h.gerencianet.com.br/oauth/token\",\n headers: {\n Authorization: \"Basic \" + auth,\n \"Content-Type\": \"application/json\",\n },\n httpsAgent: agent,\n data: data,\n};\n\naxios(config)\n .then(function (response) {\n console.log(JSON.stringify(response.data));\n })\n .catch(function (error) {\n console.log(error);\n });", "language": "javascript", "name": "Node" }, { "code": "#Desenvolvido pela Consultoria Técnica da Gerencianet\n\nimport requests\nimport base64\n\ncredentials = {\n \"client_id\": \"YOUR-CLIENT-ID\",\n \"client_secret\": \"YOUR-CLIENT-SECRET\",\n}\n\ncertificado = './certificado.pem' # A variável certificado é o diretório em que seu certificado em formato .pem deve ser inserido\n\nauth = base64.b64encode(\n (f\"{credentials['client_id']}:{credentials['client_secret']}\"\n ).encode()).decode()\n\nurl = \"https://api-pix-h.gerencianet.com.br/oauth/token\" #Para ambiente de Desenvolvimento\n\npayload = {\"grant_type\": \"client_credentials\"}\nheaders = {\n 'Authorization': f\"Basic {auth}\",\n 'Content-Type': 'application/json'\n}\n\nresponse = requests.request(\"POST\",\n url,\n headers=headers,\n data=payload,\n cert=certificado)\n\nprint(response.text)", "language": "python" }, { "code": "//Desenvolvido pela Consultoria Técnica da Gerencianet\n\nusing System;\nusing System.Security.Cryptography.X509Certificates;\nusing RestSharp;\n\nnamespace PixGerencianet\n{\n class Authorize\n {\n static void Main(string[] args)\n {\n var cities = new Dictionary<string, string>(){\n {\"client_id\", \"YOUR-CLIENT-ID\"},\n {\"client_secret\", \"YOUR-CLIENT-SECRET\"}\n };\n X509Certificate2 uidCert = new X509Certificate2(\"./certificado.p12\", \"\");\n var client = new RestSharp.RestClient(\"https://api-pix-h.gerencianet.com.br/oauth/token\");\n client.ClientCertificates = new X509CertificateCollection() { uidCert };\n var request = new RestRequest(Method.POST);\n request.AddHeader(\"Authorization\", \"Basic R2VyZW5jaWFuZXRzYQ==\");\n request.AddHeader(\"Content-Type\", \"application/json\");\n request.AddParameter(\"application/json\", \"{\\r\\n \\\"grant_type\\\": \\\"client_credentials\\\"\\r\\n}\", ParameterType.RequestBody);\n IRestResponse restResponse = client.Execute(request);\n string response = restResponse.Content;\n\n Console.WriteLine(uidCert);\n }\n }\n}", "language": "csharp" }, { "code": "#Desenvolvido pela Consultoria Técnica da Gerencianet\n\nrequire \"uri\"\nrequire \"net/http\"\nrequire \"openssl\"\n\nclient_id = \"YOUR-CLIENT-ID\";\nclient_secret = \"YOUR-CLIENT-SECRET\";\n\ncertfile = File.read(\"certificado.pem\") # A variável certificado é o diretório em que seu certificado em formato .pem deve ser inserido\n\nurl = URI(\"https://api-pix-h.gerencianet.com.br/oauth/token\") #Para ambiente de Desenvolvimento\n\nhttps = Net::HTTP.new(url.host, url.port);\nhttps.use_ssl = true\nhttps.cert = OpenSSL::X509::Certificate.new(certfile)\nhttps.key = OpenSSL::PKey::RSA.new(certfile)\n\nrequest = Net::HTTP::Post.new(url)\nrequest.basic_auth(client_id, client_secret)\nrequest[\"Content-Type\"] = \"application/json\"\nrequest.body = \"{\\r\\n \\\"grant_type\\\": \\\"client_credentials\\\"\\r\\n}\"\n\nresponse = https.request(request)\nputs response.read_body", "language": "ruby", "name": "" } ] } [/block] <br> ## CobPayload ### Endpoint (location) que serve um payload que representa uma cobrança <code>GET /{pixUrlAcessToken}</code>. 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). Obs: A url para acesso do payload é diferente da API. [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>pixUrlAcessToken</b>", "0-1": "pixUrlAcessToken", "0-2": "Sim", "0-3": "string" }, "cols": 4, "rows": 1 } [/block] <br> ### Descrição do Retorno O retorno desse endpoint é um objeto que apresenta estrutura JWS, conforme especificado no manual de segurança. Segue um exemplo: [block:code] { "codes": [ { "code": "eyJhbGciOiJQUzI1NiIsInR5cCI6IkpXUyJ9.eyJ0eElkIjoiNTJjNDMzNjEtY2FhMS00ZGRiLTkxNTItNzA4NDI2YTI1ZGIzIiwicmV2aXNhbyI6IjMiLCJjYWxlbmRhcmlvIjp7ImNyaWFjYW8iOiIyMDIwLTA5LTE1VDE5OjM5OjU0LjAxM1oiLCJhcHJlc2VudGFjYW8iOiIyMDIwLTA0LTAxVDE4OjAwOjAwWiIsImV4cGlyYWNhbyI6IjEyMDAifSwidmFsb3IiOnsib3JpZ2luYWwiOiI1MDAuMDAifSwiY2hhdmUiOiI3NDA3YzljOC1mNzhiLTExZWEtYWRjMS0wMjQyYWMxMjAwMDIiLCJzb2xpY2l0YWNhb1BhZ2Fkb3IiOiJJbmZvcm1hciBjYXJ0w6NvIGZpZGVsaWRhZGUiLCJpbmZvQWRpY2lvbmFpcyI6W3sibm9tZSI6InF1YW50aWRhZGUiLCJ2YWxvciI6IjIifV19.khlLEW4Q4W6zIYlacIaSHzwg_q9JrIkeinmvRDcUUD3120oXXew_xqSEAWsefY28g4MhUmK-RuaZgn1_rR22ZVM1pDbblw7Sk6dlHGxEc8PbMzMgEJPLdOZRumzMLx6YBYLAYsxT-HZp_vmBT713biN3jJf3V55z9RK6Xyo1CeWvemt81_O4kyGZ9lbp7p0VhmdJ9u6_EquEyP2n0uWy2ikbe7AFobkAdBRoF8gtp891WG5-gZmk4ZzATORNQOTrytQYMyprWV7o_prVjwT308RUo9Si-FRPTvYRGqyKo-voGoQVaZgCMUjc0jLr9WqYCRMyeCJZHTJmpaCFSNQnhw", "language": "json", "name": "Objeto JWS" } ] } [/block] 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. Conforme pode-se verificar no exemplo acima, o objeto JWS apresenta três fragmentos separados pelo caractere . (ponto). São eles: <code>header</code>, <code>payload</code> e <code>signature</code>. Em termos de funcionalidade, o fragmento que interessa ao pagador é o <code>payload</code>, que apresenta estrutura conforme especificada pelo <code>schema</code> do presente endpoint, contendo detalhes concernentes à cobrança. ### Respostas As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"txId\": \"fc9a4366ff3d4964b5dbc6c91a8722d3\",\n \"revisao\": \"3\",\n \"calendario\": {\n \"criacao\": \"2020-09-15T19:39:54.013Z\",\n \"apresentacao\": \"2020-04-01T18:00:00Z\",\n \"expiracao\": 3600\n },\n \"status\": \"ATIVA\",\n \"valor\": {\n \"original\": \"500.00\"\n },\n \"chave\": \"7407c9c8-f78b-11ea-adc1-0242ac120002\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\",\n \"infoAdicionais\": [\n {\n \"nome\": \"quantidade\",\n \"valor\": \"2\"\n }\n ]\n}", "language": "json", "name": "200" }, { "code": "UnknownRegisterError\n{\n \"nome\": \"cobranca_nao_encontrada\",\n \"mensagem\": \"Nenhuma cobrança encontrada para o location informado\"\n}\n\nInvalidOperationError\n{\n \"nome\": \"status_cobranca_invalido\",\n \"mensagem\": \"A cobrança não está mais com o status ATIVA\"\n}\n\nOu\n\n{\n \"nome\": \"cobranca_expirada\",\n \"mensagem\": \"A cobrança expirou\"\n}\n", "language": "json", "name": "400" } ] } [/block] <br> <div class="tab2">(*) Atributo obrigatório</div> [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>txid</b>", "0-1": "<b>Identificador da transação</b><br>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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o).", "0-2": "Sim", "0-3": "string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>", "1-0": "**revisao** ", "1-1": "Revisão da cobrança. Sempre começa em zero. Sempre varia em acréscimos de 1.", "1-2": "Sim", "1-3": "Integer (int32) (Revisão)", "2-0": "<b>calendario</b>", "2-1": "Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança.\n\n*calendario*:\n<div class=\"tab2\"><code>criacao*</code> // Timestamp que indica o momento em que foi criada a cobrança. Respeita o formato definido na RFC 3339. Mínimo de 1 caractere e máximo de 255 caracteres (String). \n\n<code>apresentacao*</code>// 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. string date-time (Timestamp de apresentação do QR Code)\n\n<code>expiracao</code>// Tempo de vida da cobrança, especificado em segundos a partir da data de criação (Calendario.criacao). Recebem um numero com valor máximo integer int32, passado como integer</div>", "2-2": "Sim", "2-3": "object (Calendário)", "3-0": "<b>status</b>", "3-1": "Enum: <code>\"ATIVA\"</code>,<code>\"CONCLUIDA\"</code><br><br><code>\"REMOVIDA_PELO_USUARIO_RECEBEDOR\"</code>,<br><br><code>\"REMOVIDA_PELO_PSP\"</code>", "3-2": "Sim", "3-3": "string (Status da Cobrança)", "5-0": "<b>valor</b>", "5-1": "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”<br><br> <em>valor:</em><br><code>original*</code>// Valor original da cobrança.\n\nstring <code>\\d{1,10}\\.\\d{2}</code>", "5-2": "Sim", "5-3": "object", "6-0": "<b>chave</b>", "6-1": "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.", "6-2": "Sim", "6-3": "string (Chave DICT do recebedor) <code>≤ 77 characters</code>", "7-0": "<b>solicitacaoPagador</b>", "7-1": "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.", "7-2": "Não", "8-0": "**infoAdicionais** ", "7-3": "string (Solicitação ao pagador)<code>≤ 140 characters</code>", "8-1": "Cada respectiva informação adicional contida na lista (nome e valor) deve ser apresentada ao pagador.\n\ninfoAdicionais:\n<div class=\"tab2\"> <code>nome*</code>// Nome do campo string (Nome) <code>≤ 50 characters</code>\n\n<code>valor*</code>// Dados do campo string (Valor) <code>≤ 200 characters</code></div>", "8-2": "Não", "8-3": "Array of objects (Informações adicionais) <code>≤ 50</code>", "4-0": "<b>devedor</b>", "4-2": "Não", "4-3": "Pessoa Física (object) or Pessoa Jurídica (object)", "4-1": "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.\n<br>\ndevedor: \n<br>\n\n<code>cpf *</code>// CPF do usuário pagador. string <code>/^\\d{11}$/</code>\n<code>nome *</code>// Nome do usuário pagador. string <code>≤ 200 characters</code>" }, "cols": 4, "rows": 9 } [/block] ## Criar cobrança. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**) Endpoint para criar uma cobrança <code>PUT /cob/{txid}</code>. [block:code] { "codes": [ { "code": "{\n \"calendario\": {\n \"expiracao\": 3600\n },\n \"devedor\": {\n \"cpf\": \"12345678909\",\n \"nome\": \"Francisco da Silva\"\n },\n \"valor\": {\n \"original\": \"123.45\"\n },\n \"chave\": \"71cdf9ba-c695-4e3c-b010-abb521a3f1be\",\n \"solicitacaoPagador\": \"Cobrança dos serviços prestados.\"\n}", "language": "json", "name": "Exemplo 1" }, { "code": "{\n \"calendario\": {\n \"expiracao\": 3600\n },\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"37.00\"\n },\n \"chave\": \"ac107ed7-97cd-4fe7-8df5-a5f5659bf2f3\",\n \"solicitacaoPagador\": \"Serviço realizado.\",\n \"infoAdicionais\": [\n {\n \"nome\": \"Campo 1\",\n \"valor\": \"Informação Adicional1 do PSP-Recebedor\"\n },\n {\n \"nome\": \"Campo 2\",\n \"valor\": \"Informação Adicional2 do PSP-Recebedor\"\n }\n ]\n}", "language": "json", "name": "Exemplo 2" } ] } [/block] <div class="tab2">(*) Atributo obrigatório</div > [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "**txid** ", "0-1": "**Identificador da transação** \nO 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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o).", "0-2": "Sim", "0-3": "string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>" }, "cols": 4, "rows": 1 } [/block] Dados para geração da cobrança. <div class="tab2">(*) Atributo obrigatório</div> [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "**calendario** ", "0-1": "Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança.\n\ncalendario:\n<div class=\"tab2\"><code>criacao*</code>// Timestamp que indica o momento em que foi criada a cobrança. Respeita o formato definido na RFC 3339. Mínimo de 1 caractere e máximo de 255 caracteres (String).\n\n<code>apresentacao*</code>// 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. string date-time (Timestamp de apresentação do QR Code)\n\n<code>expiracao</code>// Tempo de vida da cobrança, especificado em segundos a partir da data de criação (Calendario.criacao). Recebem um numero com valor máximo integer int32, passado como integer</div>", "0-2": "Sim", "0-3": "object (Calendário)", "1-0": "**devedor** ", "1-1": "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.\n\ndevedor:\n<div class=\"tab2\"><code>cpf*</code>// CPF do usuário pagador.string <code>/^\\d{11}$/</code>\n\n<code> nome*</code>// Nome do usuário pagador. string (Nome) <code>≤ 200 characters</code></div>", "1-2": "Não", "1-3": "Pessoa Física (object) or Pessoa Jurídica (object)", "2-0": "**valor** ", "2-1": "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”\n\n<br>\n\nvalor:\n<div class=\"tab2\"> <code> original*</code>// Valor original da cobrança.string <code>\\d{1,10}\\.\\d{2}</code></div>", "2-2": "Sim", "2-3": "object", "3-0": "**chave** ", "3-1": "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.", "3-2": "Sim", "3-3": "string (Chave DICT do recebedor) <code>≤ 77 characters</code>", "4-0": "**solicitacaoPagador** ", "4-1": "O campo *<code>solicitacaoPagador*</code>, 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.", "4-2": "Não", "4-3": "string (Solicitação ao pagador)<code>≤ 140 characters</code>", "5-0": "**infoAdicionais** ", "5-1": "Cada respectiva informação adicional contida na lista (nome e valor) deve ser apresentada ao pagador.\n\ninfoAdicionais:\n<div class=\"tab2\"><code>nome*</code>// Nome do campo string (Nome)<code> ≤ 50 characters</code>\n\n<code>valor*</code>// Dados do campo string (Valor)<code> ≤ 200 characters</code> </div>", "5-2": "Não", "5-3": "Array of objects (Informações adicionais) <code>≤ 50</code>" }, "cols": 4, "rows": 6 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"status\": \"ATIVA\",\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": \"3600\"\n },\n \"location\": \"pix.example.com/qr/9d36b84f-c70b-478f-b95c-12729b90ca25\",\n \"txid\": \"7978c0c97ea847e78e8849634473c1f1\",\n \"revisao\": 1,\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"567.89\"\n },\n \"chave\": \"a1f4102e-a446-4a57-bcce-6fa48899c1d1\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\"\n}", "language": "json", "name": "200" }, { "code": "InvalidOperationError\n{\n \"nome\": \"documento_bloqueado\",\n \"mensagem\": \"O documento desta conta tem bloqueios que impedem a emissão\"\n}\n\nOu\n\n{\n \"nome\": \"chave_invalida\",\n \"mensagem\": \"A chave informada não faz referência à conta Gerencianet autenticada\"\n}\n\nInvalidValueError\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"Campo valor.original deve ser maior que zero\"\n}\n\nOu\n\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"Campo calendario.expiracao deve ser maior que zero\"\n}\n\nOu\n\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"Documento CPF em devedor.cpf é inválido\"\n}\n\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"Documento CNPJ em devedor.cnpj é inválido\"\n}", "language": "json", "name": "400" }, { "code": "DuplicatedRegisterError\n{\n \"nome\": \"txid_duplicado\",\n \"mensagem\": \"Campo txid informado já foi utilizado em outra cobrança\"\n}", "language": "json", "name": "409" }, { "code": "ApplicationError\n{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao validar a chave\"\n}", "language": "json", "name": "500" } ] } [/block] ## Revisar cobrança AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**) PATCH para revisar cobrança <code>PATCH /cob/{txid}</code> [block:code] { "codes": [ { "code": "{\n \"status\": \"REMOVIDA_PELO_USUARIO_RECEBEDOR\"\n}", "language": "json", "name": null } ] } [/block] [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "**txid** ", "0-1": "**Identificador da transação** \nO 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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o)", "0-2": "Sim", "0-3": "string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>" }, "cols": 4, "rows": 1 } [/block] ### Dados para geração da cobrança <div class="tab2">(*) Atributo obrigatório*</div> [block:parameters] { "data": { "0-0": "**calendario** ", "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-1": "Os campos aninhados sob o identificador calendário organizam informações a respeito de controle de tempo da cobrança.\n\ncalendario:\n<div class=\"tab2\"><code>criacao*</code> // Timestamp que indica o momento em que foi criada a cobrança. Respeita o formato definido na RFC 3339. Mínimo de 1 caractere e máximo de 255 caracteres (String).\n\n<code>apresentacao*</code>// 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. string date-time (Timestamp de apresentação do QR Code)\n\n <code>expiracao</code>// Tempo de vida da cobrança, especificado em segundos a partir da data de criação (Calendario.criacao). Recebem um numero com valor máximo integer int32, passado como integer </div>", "0-2": "Não", "0-3": "object (Calendário)", "1-0": "**status** ", "1-1": "Enum: <code>\"ATIVA\"</code>,<code>\"CONCLUIDA\"</code>\n\n<code>\"REMOVIDA_PELO_USUARIO_RECEBEDOR\"</code>,\n\n<code>\"REMOVIDA_PELO_PSP\"</code>", "1-2": "Não", "1-3": "string (Status da Cobrança)", "2-0": "**devedor** ", "2-1": "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.\n\n*devedor:* \n<div class=\"tab2\"><code>cpf*</code>// CPF do usuário pagador.string<code> /^\\d{11}$/</code>\n\n<code>nome*</code>// Nome do usuário pagador. string (Nome) <code>≤ 200 characters</code></div>", "3-0": "<b>valor</b>", "3-1": "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”<br><br> <em>valor:</em><br><code>original*</code>// Valor original da cobrança. string <code> \\d{1,10}\\.\\d{2}</code>", "3-2": "Não", "3-3": "object", "4-0": "<b>chave</b>", "4-1": "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.", "4-2": "Não", "4-3": "string (Solicitação ao pagador)<code><= 140 characters</code>", "5-0": "<b>infoAdicionais</b>", "5-1": "Cada respectiva informação adicional contida na lista (nome e valor) deve ser apresentada ao pagador.<br/><br> <em>infoAdicionais:</em><br><code>nome*</code>// Nome do campo string (Nome) <code>< 50 characters</code><br><br> <code>valor*</code>// Dados do campo string (Valor) <code>< 200 characters</code>", "5-2": "Não", "5-3": "Array of objects (Informações adicionais)<code><= 50</code>", "2-2": "Não", "2-3": "Pessoa Física (object) or Pessoa Jurídica (object)" }, "cols": 4, "rows": 6 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"status\": \"ATIVA\",\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": \"3600\"\n },\n \"location\": \"pix.example.com/qr/9d36b84f-c70b-478f-b95c-12729b90ca25\",\n \"txid\": \"7978c0c97ea847e78e8849634473c1f1\",\n \"revisao\": 1,\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"567.89\"\n },\n \"chave\": \"a1f4102e-a446-4a57-bcce-6fa48899c1d1\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\"\n}", "language": "json", "name": "200" }, { "code": "UnknownRegisterError\n{\n \"nome\": \"cobranca_nao_encontrada\",\n \"mensagem\": \"Nenhuma cobrança encontrada para o txid informado\"\n}\n\nInvalidOperationError\n{\n \"nome\": \"status_cobranca_invalido\",\n \"mensagem\": \"A cobrança não está mais com o status ATIVA\"\n}\n\nOu\n\n{\n \"nome\": \"chave_invalida\",\n \"mensagem\": \"A chave informada não faz referência à conta Gerencianet autenticada\"\n}\n\n\nInvalidValueError\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"Campo calendario.expiracao deve ser maior que zero\"\n}\n\nOu\n\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"Documento CPF em devedor.cpf é inválido\"\n}\n\nOu\n\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"Documento CNPJ em devedor.cnpj é inválido\"\n}\n", "language": "json", "name": "400" }, { "code": "DuplicatedRegisterError\n{\n \"nome\": \"txid_duplicado\",\n \"mensagem\": \"Campo txid informado já foi utilizado em outra cobrança\"\n}", "language": "json", "name": "409" }, { "code": "ApplicationError\n{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao validar a chave\"\n}", "language": "json", "name": "500" } ] } [/block] ## Consultar cobrança AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**) Endpoint para consultar uma cobrança através de um determinado TxID, o atributo é inserido no parâmetro da query <code>GET /cob​/{txid}</code>. [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>txid</b>", "0-1": "<b>Identificador da transação</b><br>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, mais detalhes [veja aqui](https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o).", "0-2": "Sim", "0-3": "string (Id da Transação)<code>^[a-zA-Z0-9]{26,35}$</code>", "1-0": "<b>revisao</b>", "1-1": "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.", "1-3": "integer($int32)", "1-2": "Não" }, "cols": 4, "rows": 2 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"status\": \"ATIVA\",\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": \"3600\"\n },\n \"location\": \"pix.example.com/qr/9d36b84f-c70b-478f-b95c-12729b90ca25\",\n \"txid\": \"7978c0c97ea847e78e8849634473c1f1\",\n \"revisao\": 1,\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"567.89\"\n },\n \"chave\": \"a1f4102e-a446-4a57-bcce-6fa48899c1d1\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\"\n}", "language": "json", "name": "Exemplo 1 (200)" }, { "code": "{\n \"status\": \"CONCLUIDA\",\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": \"3600\"\n },\n \"location\": \"qrcodes-pix.gerencianet.com.br/1dd7f893-a58e-4172-8702-8dc33e21a403\",\n \"txid\": \"655dfdb1-a451-4b8f-bb58-254b958913fb\",\n \"revisao\": 1,\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"100.00\"\n },\n \"chave\": \"40a0932d-1918-4eee-845d-35a2da1690dc\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\",\n \"pix\": [\n {\n \"endToEndId\": \"E12345678202009091221kkkkkkkkkkk\",\n \"txid\": \"655dfdb1-a451-4b8f-bb58-254b958913fb\",\n \"valor\": \"110.00\",\n \"horario\": \"2020-09-09T20:15:00.358Z\",\n \"pagador\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"infoPagador\": \"0123456789\",\n \"devolucoes\": [\n {\n \"id\": \"123ABC\",\n \"rtrId\": \"Dxxxxxxxx202009091221kkkkkkkkkkk\",\n \"valor\": \"10.00\",\n \"horario\": {\n \"solicitacao\": \"2020-09-09T20:15:00.358Z\"\n },\n \"status\": \"EM_PROCESSAMENTO\"\n }\n ]\n }\n ]\n}", "language": "json", "name": "Exemplo 2 (200)" }, { "code": "UnknownRegisterError\n{\n \"nome\": \"cobranca_nao_encontrada\",\n \"mensagem\": \"Nenhuma cobrança encontrada para o txid informado\"\n}", "language": "json", "name": "400" } ] } [/block] ## Consultar lista de cobranças AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**) Endpoint para consultar cobranças através de parâmetros como início, fim, cpf, cnpj e status, os atributos são inseridos no parâmetro da query <code>GET /cob​/</code> [block:code] { "codes": [ { "code": "{{gn-pix-api}}/v2/cob?inicio=2020-10-22T16:01:35Z&fim=2020-11-30T20:10:00Z", "language": "json", "name": "Exemplo" } ] } [/block] <div class="tab2">(*) Atributo obrigatório </div> [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>inicio</b>", "0-1": "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339", "0-2": "Sim", "0-3": "string <date-time>", "1-0": "<b>fim</b>", "1-1": "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339.", "1-2": "Sim", "1-3": "string <date-time>", "2-0": "<b>cpf</b>", "2-1": "Filtro pelo CPF do pagador. Não pode ser utilizado ao mesmo tempo que o CNPJ.", "2-2": "Não", "2-3": "string <code>/^\\d{11}$/</code>", "3-0": "<b>cnpj</b>", "3-1": "Filtro pelo CNPJ do pagador. Não pode ser utilizado ao mesmo tempo que o CPF.", "3-2": "Não", "3-3": "string<code>/^\\d{14}$/</code>", "4-0": "<b>status</b>", "4-1": "Enum: <code>\"ATIVA\"</code>,<code>\"CONCLUIDA\"</code>,<br> <code>\"REMOVIDA_PELO_USUARIO_RECEBEDOR\"</code>,<br> <code>\"REMOVIDA_PELO_PSP\"</code>\n Filtro pelo status da cobrança.", "4-2": "Não", "4-3": "string", "5-0": "<b>paginacao.paginaAtual</b>", "5-1": "Default: <code>0</code><br> Página a ser retornada pela consulta. Se não for informada, o PSP assumirá que será 0.", "5-2": "Não", "5-3": "integer {int32} (Página atual) <code>>= 0</code>", "6-0": "<b>paginacao.itensPorPagina</b>", "6-1": "Default: <code>100</code><br> Quantidade máxima de registros retornados em cada página. Apenas a última página pode conter uma quantidade menor de registros.", "6-2": "Não", "6-3": "integer {int32} (Página atual) <code>[1 .. 1000]</code>" }, "cols": 4, "rows": 7 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) do consumo. [block:code] { "codes": [ { "code": "{\n \"parametros\": {\n \"inicio\": \"2020-04-01T00:00:00Z\",\n \"fim\": \"2020-04-02T10:00:00Z\",\n \"paginacao\": {\n \"paginaAtual\": 0,\n \"itensPorPagina\": 100,\n \"quantidadeDePaginas\": 1,\n \"quantidadeTotalDeItens\": 2\n }\n },\n \"cobs\": [\n {\n \"status\": \"ATIVA\",\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": \"3600\"\n },\n \"location\": \"qrcodes-pix.gerencianet.com.br/9d36b84f-c70b-478f-b95c-12729b90ca25\",\n \"txid\": \"7978c0c97ea847e78e8849634473c1f1\",\n \"revisao\": 1,\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"567.89\"\n },\n \"chave\": \"a1f4102e-a446-4a57-bcce-6fa48899c1d1\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\"\n },\n {\n \"status\": \"CONCLUIDA\",\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": \"3600\"\n },\n \"location\": \"qrcodes-pix.gerencianet.com.br/1dd7f893-a58e-4172-8702-8dc33e21a403\",\n \"txid\": \"655dfdb1-a451-4b8f-bb58-254b958913fb\",\n \"revisao\": 1,\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"100.00\"\n },\n \"chave\": \"40a0932d-1918-4eee-845d-35a2da1690dc\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\",\n \"pix\": [\n {\n \"endToEndId\": \"E12345678202009091221kkkkkkkkkkk\",\n \"txid\": \"655dfdb1-a451-4b8f-bb58-254b958913fb\",\n \"valor\": \"110.00\",\n \"horario\": \"2020-09-09T20:15:00.358Z\",\n \"pagador\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"infoPagador\": \"0123456789\",\n \"devolucoes\": [\n {\n \"id\": \"123ABC\",\n \"rtrId\": \"Dxxxxxxxx202009091221kkkkkkkkkkk\",\n \"valor\": \"10.00\",\n \"horario\": {\n \"solicitacao\": \"2020-09-09T20:15:00.358Z\"\n },\n \"status\": \"EM_PROCESSAMENTO\"\n }\n ]\n }\n ]\n }\n ]\n}", "language": "json", "name": "Exemplo 1 (200)" }, { "code": " \"parametros\": {\n \"inicio\": \"2020-04-01T00:00:00Z\",\n \"fim\": \"2020-04-01T23:59:59Z\",\n \"paginacao\": {\n \"paginaAtual\": 0,\n \"itensPorPagina\": 100,\n \"quantidadeDePaginas\": 1,\n \"quantidadeTotalDeItens\": 1\n }\n },\n \"cobs\": [\n {\n \"status\": \"ATIVA\",\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": \"3600\"\n },\n \"location\": \"qrcodes-pix.gerencianet.com.br/9d36b84f-c70b-478f-b95c-12729b90ca25\",\n \"txid\": \"7978c0c9-7ea8-47e7-8e88-49634473c1f1\",\n \"revisao\": 1,\n \"devedor\": {\n \"cnpj\": \"12345678000195\",\n \"nome\": \"Empresa de Serviços SA\"\n },\n \"valor\": {\n \"original\": \"567.89\"\n },\n \"chave\": \"a1f4102e-a446-4a57-bcce-6fa48899c1d1\",\n \"solicitacaoPagador\": \"Informar cartão fidelidade\"\n }\n ]\n}", "language": "json", "name": "Exemplo 2 (200)" } ] } [/block] ## Pix Reúne endpoints destinados a lidar com gerenciamento de Pix recebidos. ## Consultar Pix. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.read**) Endpoint para consultar um Pix através de um e2eid <code>GET /pix/{e2eId}</code>. <br> [block:parameters] { "data": { "0-0": "<b>e2eid</b>", "0-1": "EndToEndIdentification que transita na PACS002, PACS004 e PACS008", "0-2": "Sim", "h-2": "Obrigatório", "h-1": "Descrição", "h-0": "Atributo", "h-3": "Tipo", "0-3": "string (Id fim a fim da transação) \n<code>32 characters </code>\n<code>^[a-zA-Z0-9]{32}</code>" }, "cols": 4, "rows": 1 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) do consumo. [block:code] { "codes": [ { "code": "Dados do Pix efetuado.", "language": "json", "name": "200" } ] } [/block] ## Consultar Pix recebidos. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.read**) Endpoint para consultar Pix recebidos <code>GET /pix​/</code>. <br> [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>inicio</b>", "1-0": "<b>fim</b>", "2-0": "<b>txid</b>", "3-0": "<b>txIdPresente</b>", "4-0": "<b>devolucaoPresente</b>", "5-0": "<b>cpf</b>", "6-0": "<b>cnpj</b>", "7-0": "<b>paginacao.paginaAtual</b>", "8-0": "<b>paginacao.itensPorPagina</b>", "0-1": "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339.", "0-3": "string <date-time> (Data de início)", "1-1": "Filtra os registros cuja data de criação seja menor ou igual que a data de fim. Respeita RFC 3339.", "1-3": "string <date-time> (Data de início)", "2-1": "<b>Identificador da transação</b><br>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.\n\nNa pacs.008, é referenciado como <code>TransactionIdentification <txId> </code> ou <code>idConciliacaoRecebedor. </code>\n\nEm 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.\n\nO 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.", "2-3": "<code>[a-zA-Z0-9]{26,35}</code>", "3-1": "boolean", "4-1": "boolean", "5-3": "string (CPF) <code>/^\\d{11}$/</code>", "5-1": "Filtro pelo CPF do pagador. Não pode ser utilizado ao mesmo tempo que o CNPJ.", "6-1": "Filtro pelo CNPJ do pagador. Não pode ser utilizado ao mesmo tempo que o CPF.", "7-1": "Default: <code>0</code>\nPágina a ser retornada pela consulta. Se não for informada, o PSP assumirá que será 0.", "8-1": "Default: <code>100</code>\nQuantidade máxima de registros retornados em cada página. Apenas a última página pode conter uma quantidade menor de registros.", "6-3": "string (CNPJ) <code>/^\\d{14}$/</code>", "7-3": "integer <int32> (Página atual) >= 0", "8-3": "integer <int32> (Itens por Página) [ 1 .. 1000 ]", "0-2": "Sim", "1-2": "Sim", "2-2": "Não", "3-2": "Não", "4-2": "Não", "5-2": "Não", "6-2": "Não", "7-2": "Não", "8-2": "Não" }, "cols": 4, "rows": 9 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) do consumo. [block:code] { "codes": [ { "code": "Lista dos Pix recebidos de acordo com o critério de busca", "language": "json", "name": "200" } ] } [/block] ## Solicitar devolução. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.write**) Endpoint para solicitar uma devolução através de um e2eid do Pix e do ID da devolução. O motivo que será atribuído à PACS.004 será "Devolução solicitada pelo usuário recebedor do pagamento original" cuja sigla é "MD06" de acordo com a aba RTReason da PACS.004 que consta no Catálogo de Mensagens do Pix <code>PUT /pix/{e2eId}/devolucao/{id}</code>. <br> [block:parameters] { "data": { "0-0": "<b>e2eid</b>", "1-0": "<b>id</b>", "0-3": "string (Id fim a fim da transação) <code>32 characters</code> <code>[a-zA-Z0-9]{32}</code>", "1-3": "string (Id da Devolução) <code>[a-zA-Z0-9]{1,35}</code>", "0-1": "EndToEndIdentification que transita na PACS002, PACS004 e PACS008", "1-1": "Id gerado pelo cliente para representar unicamente uma devolução.", "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-2": "Sim", "1-2": "Sim" }, "cols": 4, "rows": 2 } [/block] Dados para pedido de devolução. [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>valor</b>", "0-1": "Valor solicitado para devolução. A soma dos valores de todas as devolucões não podem ultrapassar o valor total do Pix.", "0-3": "string (Valor) <code>\\d{1,10}\\.\\d{2}</code>", "0-2": "Sim" }, "cols": 4, "rows": 1 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) do consumo. [block:code] { "codes": [ { "code": "Dados da devolução", "language": "json", "name": "201" } ] } [/block] ## Consultar devolução. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**pix.read**) Endpoint para consultar uma devolução através de um End To End ID do Pix e do ID da devolução <code>GET /pix/{e2eId}/devolucao/{id}</code>. <br> [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>e2eid</b>", "1-0": "<b>id</b>", "0-1": "EndToEndIdentification que transita na PACS002, PACS004 e PACS008", "1-1": "Id gerado pelo cliente para representar unicamente uma devolução.", "0-3": "string (Id fim a fim da transação) <code>32 characters</code> <code>[a-zA-Z0-9]{32}</code>", "1-3": "string (Id da Devolução) <code>[a-zA-Z0-9]{1,35}</code>", "0-2": "Sim", "1-2": "Sim" }, "cols": 4, "rows": 2 } [/block] ### Respostas As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "Dados da devolução", "language": "json", "name": "200" } ] } [/block] ## Webhook Reúne endpoints para gerenciamento de notificações por parte do PSP recebedor ao usuário recebedor. Devido a uma norma do Banco Central, será necessário a inserção de uma chave pública da Gerencianet em seu servidor para que a comunicação obedeça o padrão mTLS. Em seu domínio que representa o seu servidor, deverá ser feita uma configuração para exigir a chave pública (mTLS) que estamos disponibilizando para que ocorra a autenticação mútua. A Gerencianet irá fazer 2 requisições para o seu domínio(servidor). 1ª Requisição: Vamos certificar que seu servidor esteja exigindo uma chave pública da Gerencianet. Isso será feito ao enviar uma requisição sem certificado e seu servidor não deverá aceitar a requisição. Uma vez respondido com a recusa será enviado a 2º requisição. 2ª Requisição: Enviaremos a notificação junto com a nossa chave pública, o seu servidor que deve conter a chave pública disponibilizada deverá realizar o "Hand-Shake" e assim a comunicação ser estabelecida. É necessário que o seu servidor tenha a versão mínima do TLS 1.2. Mais detalhes sobre o TLS [aqui](https://dev.gerencianet.com.br/docs/atualizacao-tls-12) Em seu servidor você deve configurar uma rota 'POST' com uma resposta padrão como uma string "200". Deve ser inserido o nosso certificado de produção ou homologação em seu servidor, abaixo temos alguns exemplos. **Obs:** Você deve ter um servidor dedicado para conseguir realizar as configurações do webhook, uma vez que é necessário ter acesso a alguns arquivos para realizar as configurações como nos exemplos abaixo. [block:code] { "codes": [ { "code": "https://pix.gerencianet.com.br/webhooks/chain-pix-sandbox.crt", "language": "text", "name": "Chave Pública-Desenvolvimento" }, { "code": "https://pix.gerencianet.com.br/webhooks/chain-pix-prod.crt", "language": "text", "name": "Chave Pública-Produção" } ] } [/block] ### Exemplos de uma configuração de servidor. [block:code] { "codes": [ { "code": "from flask import Flask, jsonify\nimport ssl\napp = Flask(__name__)\n\n\[email protected](\"/\")\ndef hello():\n return \"<h1 style='color:blue'>Hello There!</h1>\"\n\n\[email protected](\"/\", methods=[\"PUT\"])\ndef hello_put():\n response = {\"status\": 200}\n return jsonify(response)\n\n\[email protected](\"/\", methods=[\"POST\"])\ndef hello_post():\n response = {\"status\": 200}\n return jsonify(response)\n\n\nif __name__ == \"__main__\":\n context = ssl.SSLContext(ssl.PROTOCOL_TLSv1_2)\n context.verify_mode = ssl.CERT_REQUIRED\n context.load_verify_locations('caminho-certificados/certificado-público-Gerencianet.crt')\n context.load_cert_chain(\n 'caminho-certificados/server_ssl.crt.pem',\n 'caminho-certificados/server_ssl.key.pem')\n app.run(ssl_context=context, host='0.0.0.0')\n#Desenvolvido pela Consultoria Técnica da Gerencianet ", "language": "python", "name": "Python" }, { "code": "server {\n #\n # ...\n #\n listen [::]:443 ssl ipv6only=on;\n listen 443 ssl;\n ssl_certificate server_ssl.crt.pem;\n ssl_certificate_key server_ssl.key.pem;\n ssl_client_certificate /root/chain-pix-webhooks-prod.crt;\n ssl_verify_client optional;\n #\n # ...\n #\n location /webhook {\n if ($ssl_client_verify != SUCCESS) {\n return 403;\n }\n rewrite ^(.*)$ /webhook;\n }\n}\n#Desenvolvido pela Consultoria Técnica da Gerencianet", "language": "http", "name": "Nginx" }, { "code": "https.createServer({\n cert: '', // certificado pem do dominio\n key: '', // chave pem do dominio\n ca: '', // certificado público da Gerencianet\n minVersion: 'TLSv1.2', // força o uso de TLS da versão 1.2 para cima\n requestCert: true, // força que o cliente envie um certificado de cliente (mtls)\n rejectUnauthorized: true // rejeita clientes que não enviarem certificados válidos\n });\n#Desenvolvido pela Consultoria Técnica da Gerencianet", "language": "javascript", "name": "Node" } ] } [/block] Para ter um ter um SSL válido, você deve entrar em contato com uma Autoridade Certificadora e gerar a chave privada <code>server_ssl.key.pem</code> e uma pública <code>server_ssl.crt.pem</code>, assim você valida a integridade da conexão. Você consegue realizar isso de forma gratuita utilizando um utilitário como o <a href="https://certbot.eff.org/" target="_blank">Certbot</a> por exemplo. <br> ### Configurar o Webhook Pix. Endpoint para configuração do serviço de notificações acerca de Pix recebidos. Somente PIX associados a um txid serão notificados. Configurar o Webhook Pix <code>PUT ​/webhook/:chave</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**webhook.write**) [block:code] { "codes": [ { "code": "{\n \"webhookUrl\": \"https://exemplo-pix/webhook\"\n}", "language": "json", "name": "Example Value" } ] } [/block] [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>webhookUrl</b>", "0-1": "Url para onde a notificação vai ser enviada", "0-2": "Sim", "0-3": "string {uri}" }, "cols": 4, "rows": 1 } [/block] ### Respostas As respostas abaixo representam Sucesso(201) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "Webhook para notificações acerca de Pix recebidos associados a um txid.", "language": "json", "name": "201" }, { "code": "InvalidValueError\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"URL inválida\"\n}\n\nOu\n\n{\n \"nome\": \"valor_invalido\",\n \"mensagem\": \"A URL do webhook deve usar o protocolo HTTPS\"\n}", "language": "json", "name": "400" } ] } [/block] ## Callbacks Esse serviço está protegido por uma camada de autenticação mTLS. Os callbacks são enviados pela Gerencianet via <code>POST {$request.body#​/webhookUrl}​/pix</code> quando há uma alteração no status do PIX. [block:code] { "codes": [ { "code": "{\n \"pix\": [\n {\n \"endToEndId\": \"E12345678202009091221syhgfgufg\",\n \"txid\": \"c3e0e7a4e7f1469a9f782d3d4999343c\",\n \"valor\": \"110.00\",\n \"horario\": \"2020-09-09T20:15:00.358Z\",\n \"infoPagador\": \"0123456789\",\n \"devolucoes\": {\n \"id\": \"123ABC\",\n \"rtrId\": \"D12345678202009091221abcdf098765\",\n \"valor\": \"10.00\",\n \"horario\": {\n \"solicitacao\": \"2020-09-09T20:15:00.358Z\"\n },\n \"status\": \"EM_PROCESSAMENTO\"\n }\n }\n ]\n}", "language": "json", "name": "Exemplo" } ] } [/block] <div class="tab2">(*) Atributo obrigatório </div> [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "<b>endToEndId</b>", "0-1": "EndToEndIdentification que transita na PACS002, PACS004 e PACS008", "0-2": "Sim", "0-3": "string (Id fim a fim da transação) <code>^[a-zA-Z0-9]{26,35}$</code>", "1-0": "<b>txid</b>", "1-1": "<b>Identificador da transação</b><br>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, mais detalhes <a href=\"https://dev.gerencianet.com.br/v1/docs/api-pix#section-id-da-transa-o\">veja aqui</a>.", "1-2": "Não", "1-3": "Array of objects (Pix) <code>^[a-zA-Z0-9]{26,35}$</code>", "2-0": "<b>valor</b>", "2-1": "Valor do Pix.", "2-2": "Sim", "2-3": "string <code>\\d{1,10}\\.\\d{2}</code>", "3-0": "<b>horario</b>", "3-1": "Horário em que o Pix foi processado no PSP.", "3-2": "Sim", "3-3": "string <date-time> (Horário)", "4-0": "<b>pagador</b>", "4-1": "Um CPF ou um CNPJ pode ser o pagador de uma cobrança. 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.<br><br> <em>pagador:</em><br><div class=\"tab2\"> <code>cpf*</code>// CPF do usuário pagador.string<code> /^\\d{11}$/</code><br><br> <code>nome*</code>// Nome do usuário pagador. string (Nome) <code>< 200 characters</code></div>", "4-2": "Não", "4-3": "Pessoa Física (object) or Pessoa Jurídica (object)", "5-0": "<b>infoPagador</b>", "5-1": "Informação livre do pagador", "5-2": "Sim", "5-3": "string <code>< 140 characters</code>", "6-0": "<b>devolucoes</b>", "6-1": "devolucoes:\n<div class=\"tab2\"><code>id*</code>// Id gerado pelo cliente para representar unicamente uma devolução.string (Id da Devolução)<code>^[a-zA-Z0-9]{26,35}$</code>\n\n<code> rtrId*</code>// ReturnIdentification que transita na PACS004. string (RtrId) ≤ 32 characters\n\n<code>valor*</code>// Valor a devolver.string <code>\\d{1,10}\\.\\d{2}</code>\n\n <code>horario*</code>// Atributos de horário. object\n<br>\n<code>solicitacao*</code>: //Horário no qual a devolução foi solicitada no PSP.\nstring <date-time> (Horário de solicitação)\n<code>liquidacao</code>: //Horário no qual a devolução foi liquidada no PSP.\nstring <date-time> (Horário de liquidacao)\n<br>\n<code>status*</code>// Status da devolução. Enum: <code>\"EM_PROCESSAMENTO\"</code>,<code>\"DEVOLVIDO\"</code>,<br><code>\"NAO_REALIZADO\"</code>Status da devolução. string (Status)</div>", "6-2": "Não", "6-3": "Array ()" }, "cols": 4, "rows": 7 } [/block] ### Resposta A resposta abaixo representa Sucesso(200) do consumo. [block:code] { "codes": [ { "code": "Notificação recebida com sucesso", "language": "json", "name": "200" } ] } [/block] <br> ## Exibir informações acerca do Wehook Pix. Endpoint para recuperação de informações sobre o webhook pix <code>GET ​/webhook/:chave</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**webhook.read**) ### Resposta A resposta abaixo representa Sucesso(200) do consumo. <code>Dados da location do Payload</code> [block:code] { "codes": [ { "code": "{\n \"webhookUrl\": \"https://gn-pix-webhook.gerencianet.com.br/webhook\"\n}", "language": "json", "name": "200" } ] } [/block] <br> ## Consultar lista de webhooks AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**) Endpoint para consultar webhooks associados a chaves através de parâmetros como início, fim. Os atributos são inseridos no parâmetro da query <code>GET /v2/webhook/</code> [block:code] { "codes": [ { "code": "{{gn-pix-api}}/v2/webhook/?inicio=2020-10-22T16:01:35Z&fim=2020-10-23T16:01:35Z", "language": "json", "name": "Exemplo" } ] } [/block] [block:parameters] { "data": { "0-0": "<b>inicio</b>", "0-1": "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339", "0-2": "Sim", "0-3": "string <date-time>", "1-0": "<b>fim</b>", "1-1": "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339.", "1-2": "Sim", "1-3": "string <date-time>", "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo" }, "cols": 4, "rows": 2 } [/block] <br> ## Cancelar o webhook Pix. Endpoint para cancelamento do webhook. pix <code>DELETE ​/webhook/:chave</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**webhook.write**) ### Resposta A resposta abaixo representa Sucesso(204) do consumo. <code>Webhook para notificações Pix foi cancelado</code> [block:code] { "codes": [ { "code": "Webhook para notificações Pix foi cancelado.", "language": "json", "name": "204" } ] } [/block] ## Schemas ### Id da Transação [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "0-0": "<b>txid</b>", "0-1": "<code>^[a-zA-Z0-9]{26,35}$</code><br><br><b>Identificador da transação </b><br><br>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.<br><br>Na pacs.008, é referenciado como <code>TransactionIdentification &lt;txId&gt; </code> ou <code>idConciliacaoRecebedor</code>. O preenchimento do campo txid é limitado a 35 caracteres na pacs.008.<br><br>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.<br><br>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.", "0-2": "Sim" }, "cols": 3, "rows": 1 } [/block] Se você quer saber mais sobre a implementação da API Pix ou deseja receber uma proposta comercial, consulte um de nossos especialistas pelo e-mail <code>[email protected]</code> ou clique no botão abaixo. [block:html] { "html": "<a href=\"https://cta-redirect.hubspot.com/cta/redirect/3324438/0ae588cb-c51b-4c19-a281-827f2262d2d1\" target=\"_blank\" alt=\"QUERO UMA CONSULTORIA TÉCNICA\"><button type=\"button\" class=\"buttonCTA buttonorange\">QUERO SER CLIENTE GERENCIANET</button></a>" } [/block]