{"_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 link <a href=\"https://documenter.getpostman.com/view/13574984/TVzVgvBA\" target=\"_blank\" alt=\"link\"></a> da nossa Collection que manteremos atualizada com o endpoints da API Pix.\nhttps://documenter.getpostman.com/view/13574984/TVzVgvBA\n\n\n[![Run in Postman](https://run.pstmn.io/button.svg)](https://documenter.getpostman.com/view/13574984/TVzVgvBA)\n\n## SDK Pix\n\nEm nosso repositório no github você encontra dois exemplos de SDKs PIX Gerencianet (PHP e Python), que contém exemplos desde a emissão até a renderização do qr-code. Para mais detalhes, acesse:\n\nSDK PHP: https://github.com/gerencianet/gn-api-sdk-php\nSDK Python: https://github.com/gerencianet/gn-api-sdk-python\nSDK Node.js: https://github.com/gerencianet/gn-api-sdk-node\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\": \"Homologação\"\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**Homologação**\\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>pix.send</code> - Permissão para requisitar envio de Pix</li><br><li> <code>webhook.write</code> - Permissão para alteração do webhook</li><br><li> <code>webhook.read</code> - Permissão para consulta do webhook</li><br><li> <code>payloadlocation.write</code> - Permissão para criar location do payload</li><br><li> <code>payloadlocation.read</code> - Permissão para consulta de locations </li><br><li> <code>gn.pix.evp.write</code> - Permissão para criar/remover chave evp</li><br><li> <code>gn.pix.evp.read</code> - Permissão para listar chave evp</li><br><li> <code>gn.balance.read</code> - Permissão para buscar saldo da conta</li><br><li> <code>gn.settings.write</code> - Permissão para criar/modificar configurações da conta</li><br><li> <code>gn.settings.read</code> - Permissão para listar configurações da conta</li><br></ul>\"\n  },\n  \"cols\": 2,\n  \"rows\": 1\n}\n[/block]\n## Gerando uma aplicação e o certificado .p12\n\n* **Criar uma nova aplicação para utilização da API Pix**:  Acesse  API (1)-> Minhas Aplicações -> Nova Aplicação(2) -> Ative API Pix (3) e escolha os escopos que deseja liberar em ambiente de Produção e/ou Homologação, lembrando que estes podem ser alterados posteriormente. -> Criar nova aplicação(4). Imagem do passo a passo [aqui](https://gnetbr.com/HklP7-aMMO)\n\n* **Alterar uma aplicação existente para uso da API Pix**: Acesse API (1)-> Minhas Aplicações e escolha a sua aplicação (2) -> Editar(Botão laranja) -> Ative API Pix (3) e escolha os escopos que deseja liberar em ambiente de Produção e/ou Homologação. ->  Atualizar aplicação (4). Imagem do passo a passo [aqui](https://gnetbr.com/HJlHqv_GGO)\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\n**Para gerar o seu certificado**: Acesse API (1)-> Meus Certificados (2) e escolha o ambiente que deseja o certificado: Produção ou Homologação -> Novo Certificado (3).\nComo no exemplo deste [link](https://gnetbr.com/rJxyQlpfG_). \n\n\n\n**Obs:** Em algumas linguagens você deve converter o certificado .p12 para o formato .pem. Para converter seu certificado, basta utilizar o conversor de certificados disponibilizado pela Gerencianet no link: <a href=\"https://pix.gerencianet.com.br/ferramentas/conversorGerencianet.exe\" target=\"_blank\" alt=\"Conversor de certificados Gerencianet\">Clique aqui</a>.\nOu utilize algum dos exemplos abaixo utilizando o OpenSSL para a conversão.\n**Obs:** A senha solicitada é vazia, sendo assim é só pressionar a tecla \"enter\" e dar continuidade 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$config = [\\n  \\\"certificado\\\" => \\\"./certificado.pem\\\",\\n  \\\"client_id\\\" => \\\"YOUR-CLIENT-ID\\\",\\n  \\\"client_secret\\\" => \\\"YOUR-CLIENT-SECRET\\\"\\n];\\n$autorizacao =  base64_encode($config[\\\"client_id\\\"] . \\\":\\\" . $config[\\\"client_secret\\\"]);\\n\\n$curl = curl_init();\\n\\ncurl_setopt_array($curl, array(\\n    CURLOPT_URL => \\\"https://api-pix-h.gerencianet.com.br/oauth/token\\\", // Rota base, homologação 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 => '{\\\"grant_type\\\": \\\"client_credentials\\\"}',\\n    CURLOPT_SSLCERT => $config[\\\"certificado\\\"], // Caminho do certificado\\n    CURLOPT_SSLCERTPASSWD => \\\"\\\",\\n    CURLOPT_HTTPHEADER => array(\\n        \\\"Authorization: Basic $autorizacao\\\",\\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=\\\"{\\\\r\\\\n    \\\\\\\"grant_type\\\\\\\": \\\\\\\"client_credentials\\\\\\\"\\\\r\\\\n}\\\"\\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 System.Collections.Generic;\\nusing RestSharp;\\n\\nnamespace PixGerencianet\\n{\\n    class Authorize\\n    {\\n        public static string Base64Encode(string plainText)\\n        {\\n            var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);\\n            return System.Convert.ToBase64String(plainTextBytes);\\n        }\\n\\n        static void Main(string[] args)\\n        {\\n\\n            var credencials = new Dictionary<string, string>{\\n                {\\\"client_id\\\", \\\"YOUR-CLIENT-ID\\\"},\\n                {\\\"client_secret\\\", \\\"YOUR-CLIENT-SECRET\\\"}\\n            };\\n            var authorization = Base64Encode(credencials[\\\"client_id\\\"] + \\\":\\\" + credencials[\\\"client_secret\\\"]);\\n            var client = new RestSharp.RestClient(\\\"https://api-pix-h.gerencianet.com.br/oauth/token\\\");\\n            var request = new RestRequest(Method.POST);\\n\\n            X509Certificate2 uidCert = new X509Certificate2(\\\"./certificado.p12\\\", \\\"\\\");\\n            client.ClientCertificates = new X509CertificateCollection() { uidCert };\\n\\n            request.AddHeader(\\\"Authorization\\\", \\\"Basic \\\" + authorization);\\n            request.AddHeader(\\\"Content-Type\\\", \\\"application/json\\\");\\n            request.AddParameter(\\\"application/json\\\", \\\"{\\\\r\\\\n    \\\\\\\"grant_type\\\\\\\": \\\\\\\"client_credentials\\\\\\\"\\\\r\\\\n}\\\", ParameterType.RequestBody);\\n            \\n            IRestResponse restResponse = client.Execute(request);\\n            string response = restResponse.Content;\\n\\n            Console.WriteLine(response);\\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 certfile é 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      \"code\": \"//Desenvolvido pela Consultoria Técnica da Gerencianet\\n\\nimport java.io.BufferedReader;\\nimport java.io.InputStreamReader;\\nimport java.io.OutputStream;\\nimport java.net.URL;\\nimport java.util.Base64;\\n\\nimport javax.net.ssl.HttpsURLConnection;\\nimport javax.net.ssl.SSLSocketFactory;\\n\\npublic class Auth {\\n    public static void main(String[] args) throws Exception {\\n        String client_id = \\\"YOUR-CLIENT-ID\\\";\\n        String client_secret = \\\"YOUR-CLIENT-SECRET\\\";;\\n        String basicAuth = Base64.getEncoder().encodeToString(((client_id+':'+client_secret).getBytes()));\\n      \\n      \\t//Diretório em que seu certificado em formato .p12 deve ser inserido\\n        System.setProperty(\\\"javax.net.ssl.keyStore\\\", \\\"certificado.p12\\\"); \\n        SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();\\n        \\n        URL url = new URL (\\\"https://api-pix-h.gerencianet.com.br/oauth/token\\\"); //Para ambiente de Desenvolvimento              \\n        HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();\\n        conn.setDoOutput(true);\\n        conn.setRequestMethod(\\\"POST\\\");\\n        conn.setRequestProperty(\\\"Content-Type\\\", \\\"application/json\\\");\\n        conn.setRequestProperty(\\\"Authorization\\\", \\\"Basic \\\"+ basicAuth);\\n        conn.setSSLSocketFactory(sslsocketfactory);\\n        String input = \\\"{\\\\\\\"grant_type\\\\\\\": \\\\\\\"client_credentials\\\\\\\"}\\\";\\n       \\n        OutputStream os = conn.getOutputStream();\\n        os.write(input.getBytes());\\n        os.flush();\\t\\t\\n\\n        InputStreamReader reader = new InputStreamReader(conn.getInputStream());\\n        BufferedReader br = new BufferedReader(reader);\\n\\n        String response;\\n        while ((response = br.readLine()) != null) {\\n          System.out.println(response);\\n        }\\n        conn.disconnect();\\n\\n    }\\n}\",\n      \"language\": \"java\",\n      \"name\": \"\"\n    },\n    {\n      \"code\": \"//Desenvolvido pela Consultoria Técnica da Gerencianet\\npackage main\\n\\nimport (\\n  \\\"fmt\\\"\\n  \\\"strings\\\"\\n  \\\"net/http\\\"\\n  \\\"io/ioutil\\\"\\n  \\\"crypto/tls\\\"\\n)\\n\\nconst(\\n\\tclient_id = \\\"YOUR-CLIENT-ID\\\"\\n\\tclient_secret = \\\"YOUR-CLIENT-SECRET\\\"\\n)\\n\\nfunc main() {\\n\\n  url := \\\"https://api-pix.gerencianet.com.br/oauth/token\\\"// Rota base, homologação ou produção\\n  method := \\\"POST\\\"\\n\\n  payload := strings.NewReader(`{\\\"grant_type\\\": \\\"client_credentials\\\"}`)\\n\\n\\n  cert, _ := tls.LoadX509KeyPair(\\\"CA.crt.pem\\\", \\\"KEY.crt.pem\\\")// Seu certificado e chave privada gerada a partir dos comandos de conversão OpenSSL\\n\\n  client := &http.Client{\\n    Transport: &http.Transport{\\n        TLSClientConfig: &tls.Config{\\n            Certificates: []tls.Certificate{cert},\\n        },\\n    },\\n}\\n\\n  \\n\\n  req, err := http.NewRequest(method, url, payload)\\n\\n  if err != nil {\\n    fmt.Println(err)\\n    return\\n  }\\n  req.SetBasicAuth(client_id, client_secret)\\n  req.Header.Add(\\\"Content-Type\\\", \\\"application/json\\\")\\n\\n  res, err := client.Do(req)\\n  if err != nil {\\n    fmt.Println(err)\\n    return\\n  }\\n  defer res.Body.Close()\\n\\n  body, err := ioutil.ReadAll(res.Body)\\n  if err != nil {\\n    fmt.Println(err)\\n    return\\n  }\\n  fmt.Println(string(body))\\n}\",\n      \"language\": \"go\",\n      \"name\": \"GO\"\n    }\n  ]\n}\n[/block]\n<br>\n\nA seguir, confira todos os endpoints presentes em nossa API-Pix:\n\n<ul><li><div class=\"\"><span class=\"put\">PUT</span> <a href=\"#section-criar-cobran-a-\">/v2/cob/{txid}</a> <em>(Criar cobrança)</em></div></li><li><div class=\"\"><span class=\"put\">PATCH</span> <a href=\"#section-revisar-cobran-a\">/v2/cob/{txid}</a> <em>(Revisar cobrança)</em></div></li><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"#section-criar-cobran-a-imediata\">/v2/cob</a> <em>(Criar cobrança imediata)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-consultar-cobran-a\">/v2/cob​/{txid}</a> <em>(Consultar cobrança)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-consultar-lista-de-cobran-as\">/v2/cob​/</a> <em>(Consultar lista de cobranças)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-consultar-pix-\">/v2/pix/{e2eId}</a> <em>(Consultar Pix)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-consultar-pix-recebidos-\">/v2/pix​/</a> <em>(Consultar Pix recebidos)</em></div></li><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"#section-requisitar-envio-de-pix-\">/v2/pix</a> <em>(Requisitar envio de Pix.)</em></div></li><li><div class=\"\"><span class=\"put\">PUT</span> <a href=\"#section-solicitar-devolu-o-\">/v2/pix/{e2eId}/devolucao/{id}</a> <em>(Solicitar devolução.)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-consultar-devolu-o-\">/v2/pix/{e2eId}/devolucao/{id}</a> <em>(Consultar devolução)</em></div></li><li><div class=\"\"><span class=\"put\">PUT</span> <a href=\"#section-configurar-o-webhook-pix-\">/v2​/webhook/:chave</a> <em>(Configurar o Webhook Pix)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-exibir-informa-es-acerca-do-wehook-pix-\">/v2/webhook/:chave</a> <em>(Exibir informações do Wehook Pix)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-consultar-lista-de-webhooks\">/v2/webhook/</a> <em>(Consultar lista de webhooks)</em></div></li><li><div class=\"\"><span class=\"delete\">DELETE</span> <a href=\"#section-cancelar-o-webhook-pix-\">/v2​/webhook/:chave</a> <em>(Cancelar o webhook Pix)</em></div></li><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"#section-criar-location-do-payload\">/v2/loc</a> <em>(Criar location do payload)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-consultar-locations-cadastradas\">/v2/loc</a> <em>(Consultar locations cadastradas)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-recuperar-location-do-payload-\">/v2/loc/{id}</a> <em>(Recuperar location do payload)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-gerar-qrcode-de-um-location\">/v2/loc/{id}/qrcode</a> <em>(Gerar QRCode de um location)</em></div></li><li><div class=\"\"><span class=\"delete\">DELETE</span> <a href=\"#section-desvincular-uma-cobran-a-de-uma-location\">/v2/loc/{id}/txid</a> <em>(Desvincular um txid de uma location)</em></div></li><li><div class=\"\"><span class=\"post\">POST</span> <a href=\"#section-criar-chave-evp\">/v2/gn/evp</a> <em>(Criar chave evp)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-listar-chaves-evp\">/v2/gn/evp</a> <em>(Listar chaves evp)</em></div></li><li><div class=\"\"><span class=\"delete\">DELETE</span> <a href=\"#section-remover-chave-evp\">/v2/gn/evp/:chave</a> <em>(Remover chave evp)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-buscar-o-saldo-da-conta\">/v2/gn/saldo</a> <em>(Buscar o saldo da conta)</em></div></li><li><div class=\"\"><span class=\"put\">PUT</span> <a href=\"#section-criar-modificar-configura-es-da-conta\">/v2/gn/config</a> <em>(Criar/modificar configurações da conta)</em></div></li><li><div class=\"\"><span class=\"get\">GET</span> <a href=\"#section-listar-configura-es-da-conta\">/v2/gn/config</a> <em>(Listar configurações da conta)</em></div></li></ul>\n\n<br>\n<hr>\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[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\\\": \\\"Informe o número ou identificador do pedido.\\\",\\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). Recebe um numero com valor mínimo de 1 e 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 /v2/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\\\": \\\"Informe o número ou identificador do pedido.\\\"\\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\\\": \\\"Informe o número ou identificador do pedido.\\\",\\n  \\\"infoAdicionais\\\": [\\n    {\\n      \\\"nome\\\": \\\"Pagamento em\\\",\\n      \\\"valor\\\": \\\"Nome da sua empresa\\\"\\n    },\\n    {\\n      \\\"nome\\\": \\\"Número do Pedido\\\",\\n      \\\"valor\\\": \\\"ID do pedido\\\"\\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). Recebe um numero com valor mínimo de 1 e 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(201) e Falhas/erros do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"calendario\\\": {\\n    \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n    \\\"expiracao\\\": 3600\\n  },\\n  \\\"txid\\\": \\\"7978c0c97ea847e78e8849634473c1f1\\\",\\n  \\\"revisao\\\": 0,\\n  \\\"loc\\\": {\\n    \\\"id\\\": 789,\\n    \\\"location\\\": \\\"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\\\",\\n    \\\"tipoCob\\\": \\\"cob\\\"\\n  },\\n  \\\"location\\\": \\\"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\\\",\\n  \\\"status\\\": \\\"ATIVA\\\",\\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\\\": \\\"Indagação ao pagador\\\",\\n  \\\"infoAdicionais\\\": [\\n    {\\n      \\\"nome\\\": \\\"Pagamento em\\\",\\n      \\\"valor\\\": \\\"Nome da sua empresa\\\"\\n    },\\n    {\\n      \\\"nome\\\": \\\"Número do Pedido\\\",\\n      \\\"valor\\\": \\\"ID do pedido\\\"\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"201\"\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 /v2/cob/{txid}</code>\n\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"loc\\\": {\\n    \\\"id\\\": 7768\\n  },\\n  \\\"devedor\\\": {\\n    \\\"cpf\\\": \\\"12345678909\\\",\\n    \\\"nome\\\": \\\"Francisco da Silva\\\"\\n  },\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"123.45\\\"\\n  },\\n  \\\"solicitacaoPagador\\\": \\\"Indagação ao pagador.\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 1\"\n    },\n    {\n      \"code\": \"{\\n  \\\"valor\\\": {\\n    \\\"original\\\": \\\"567.89\\\"\\n  },\\n  \\\"solicitacaoPagador\\\": \\\"Informe o número ou identificador do pedido.\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 2\"\n    },\n    {\n      \"code\": \"{\\n  \\\"status\\\": \\\"REMOVIDA_PELO_USUARIO_RECEBEDOR\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 3\"\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 alteraçã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). Recebe um numero com valor mínimo de 1 e 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>solicitacaoPagador</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    \"6-0\": \"<b>infoAdicionais</b>\",\n    \"6-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    \"6-2\": \"Não\",\n    \"6-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    \"5-0\": \"<b>chave</b>\",\n    \"5-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    \"5-2\": \"Não\",\n    \"5-3\": \"string (Chave DICT do recebedor) <code>≤ 77 characters</code>\"\n  },\n  \"cols\": 4,\n  \"rows\": 7\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\\\": \\\"Indagação ao pagador.\\\"\\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## Criar cobrança Imediata\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**)\n\nEndpoint para criar uma cobrança imediata sem informar o txid. Neste caso, o txid deve ser definido pelo PSP. <code>POST /v2/cob</code>.\n\n** Os atributos serão os mesmos utilizados na rota <code>POST /v2/cob/{txid}</code> (Criar cobrança com txid).\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\\\": \\\"Indagação ao pagador.\\\",\\n  \\\"infoAdicionais\\\": [\\n    {\\n      \\\"nome\\\": \\\"Pagamento em\\\",\\n      \\\"valor\\\": \\\"Nome da sua empresa\\\"\\n    },\\n    {\\n      \\\"nome\\\": \\\"Número do Pedido\\\",\\n      \\\"valor\\\": \\\"ID do pedido\\\"\\n    }\\n  ]\\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\\\": \\\"Informe o número ou identificador do pedido.\\\",\\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### Respostas\n\nAs respostas abaixo representam Sucesso(201) e Falhas/erros do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"calendario\\\": {\\n    \\\"criacao\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n    \\\"expiracao\\\": 3600\\n  },\\n  \\\"txid\\\": \\\"7978c0c97ea847e78e8849634473c1f1\\\",\\n  \\\"revisao\\\": 0,\\n  \\\"loc\\\": {\\n    \\\"id\\\": 789,\\n    \\\"location\\\": \\\"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\\\",\\n    \\\"tipoCob\\\": \\\"cob\\\"\\n  },\\n  \\\"location\\\": \\\"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\\\",\\n  \\\"status\\\": \\\"ATIVA\\\",\\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\\\": \\\"Indagação ao pagador.\\\",\\n  \\\"infoAdicionais\\\": [\\n    {\\n      \\\"nome\\\": \\\"Pagamento em\\\",\\n      \\\"valor\\\": \\\"Nome da sua empresa\\\"\\n    },\\n    {\\n      \\\"nome\\\": \\\"Número do Pedido\\\",\\n      \\\"valor\\\": \\\"ID do pedido\\\"\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"201\"\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      \"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 /v2/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\\\": \\\"Indagação ao pagador.\\\"\\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\\\": \\\"Informe o número ou identificador do pedido.\\\",\\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 /v2/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\\\": \\\"Informe o número ou identificador do pedido.\\\"\\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\\\": \\\"Indagação ao pagador.\\\",\\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          \\\"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\\\": \\\"Informe o número ou identificador do pedido.\\\"\\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 /v2/pix/{e2eId}</code>.\n\n**Obs** : Este endpoint não retorna informações refentes a Pix enviados, ou seja, pelo endpoint <code>POST /v2/pix</code>\n\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 /v2/pix​/</code>.\n\n**Obs** : Este endpoint não retorna informações refentes a Pix enviados, ou seja, pelo endpoint <code>POST /v2/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]{1,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<br>\n## Requisitar envio de Pix.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2)(**pix.send**)\n\nEndpoint destinado a realizar o envio direto de um Pix para uma chave Pix cadastrada em um PSP seja da Gerencianet ou outro. <code>POST /v2/pix</code>\n\n**Para habilitar o end-point pix/enviar é necessário entrar em contato com a equipe Comercial da Gerencianet para novo anexo contratual.**\n\n**Liberamos uma versão de testes por 15 dias que pode ser solicitada tanto por pessoa física quanto jurídica, o procedimento é o mesmo, criar um ticket para a equipe comercial solicitando a liberação do escopo pix.send**\n\n**O endpoint poderá sofrer alterações quando entrar no escopo de padronização do BACEN. Os clientes habilitados serão avisados com antecedência.**\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"valor\\\": \\\"12.34\\\",\\n  \\\"pagador\\\": {\\n    \\\"chave\\\": \\\"19974764017\\\"\\n  },\\n  \\\"favorecido\\\": {\\n    \\\"chave\\\": \\\"joã[email protected]\\\"\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 1\"\n    },\n    {\n      \"code\": \"{\\n  \\\"valor\\\": \\\"99.99\\\",\\n  \\\"pagador\\\": {\\n    \\\"chave\\\": \\\"19974764017\\\",\\n    \\\"infoPagador\\\": \\\"Segue o pagamento da conta\\\"\\n  },\\n  \\\"favorecido\\\": {\\n    \\\"contaBanco\\\": {\\n      \\\"nome\\\": \\\"JOSE CARVALHO\\\",\\n      \\\"cpf\\\": \\\"10519952057\\\",\\n      \\\"codigoBanco\\\": \\\"09089356\\\",\\n      \\\"agencia\\\": \\\"1\\\",\\n      \\\"conta\\\": \\\"123453\\\",\\n      \\\"tipoConta\\\": \\\"cacc\\\"\\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\": \"<b>valor\",\n    \"0-1\": \"Valores monetários referentes à cobrança.\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string \\n<code>\\\\d{1,10}.\\\\d{2}</code>\",\n    \"1-0\": \"<b>pagador\",\n    \"1-1\": \"O campo pagador, obrigatório, contém a chave Pix associada a conta autenticada que será debitado o valor definido.\\n\\npagador:\\n\\n<code>chave*</code> // O campo chave, obrigatório, determina a chave Pix registrada no DICT que será utilizada identificar o pagador do Pix.\\nstring (Chave DICT do pagador) <code>≤ 77 characters</code>\\n\\n<code>infoPagador</code> // Informação do pagador sobre o Pix a ser enviado.\\n\\nstring <code>< 140</code>\",\n    \"1-2\": \"Sim\",\n    \"1-3\": \"object\",\n    \"2-0\": \"<b>favorecido</b>\",\n    \"2-2\": \"Sim\",\n    \"2-1\": \"O campo favorecido, obrigatório, contém a chave Pix que será creditado o valor definido.\\n\\nAtributos favorecido:\\n\\n<code>chave</code> // O campo chave, obrigatório, determina a chave Pix registrada no DICT que será utilizada identificar o recebedor do Pix.\\n\\n  string (Chave DICT do recebedor) <code>≤ 77 characters</code>\\n<br><br>\\n<code>contaBanco</code> // O campo contaBanco, obrigatório, determina os dados bancários do recebedor do Pix.\\n\\n<em>Atributos contaBanco:</em>\\n<br><code>nome (Obrigatório)</code>// Nome do recebedor (string) <code><  200 characters</code><br>\\n<code>cpf</code>// CPF do recebedor (string) <code>^[0-9]{11}$</code><br>\\n<code>cnpj</code>// CNPJ do recebedor (string) <code>^[0-9]{14}$</code><br>\\n<code>codigoBanco (Obrigatório)</code>// ISPB do Banco do recebedor (string) <code>^[0-9]{8}$</code><br>\\n<code>agencia (Obrigatório)</code>// Agência do recebedor no seu Banco (string) <code>^[0-9]{1,4}$</code><br> \\n<code>conta (Obrigatório)</code>// Conta do recebedor no seu Banco (string) <code>^[0-9]+</code>\\n<br>\\n<code>tipoConta (Obrigatório)</code>// Tipo da conta do recebedor no seu Banco (string) <code>^[0-9]+</code><br>Enum: <code>\\\"cacc\\\"</code>(Conta corrente),<code>\\\"slry\\\"</code>(Conta salário),\\n<code>\\\"svgs\\\"</code>(poupança)\",\n    \"2-3\": \"object\",\n    \"3-0\": \"<b>status</b>\",\n    \"3-1\": \"O campo status no retorno do webhook representa a situação da requisição de envio direto de um Pix para uma chave Pix, podendo assumir os seguintes estados:\\n<code>\\\"EM_PROCESSAMENTO\\\"</code>,<code>\\\"REALIZADO\\\"</code>,<code>\\\"NAO_REALIZADO\\\"</code>\",\n    \"3-2\": \"Não\",\n    \"3-3\": \"string\"\n  },\n  \"cols\": 4,\n  \"rows\": 4\n}\n[/block]\n### Respostas\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"e2eId\\\": \\\"E09089356202011251226APIff82f2e5\\\",\\n  \\\"valor\\\": \\\"12.31\\\",\\n  \\\"horario\\\": {\\n    \\\"solicitacao\\\": \\\"2020-11-25T12:26:42.905Z\\\"\\n  },\\n  \\\"status\\\": {\\n    \\\"type\\\": \\\"EM_PROCESSAMENTO\\\"\\n  }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    },\n    {\n      \"code\": \"{\\n    \\\"nome\\\": \\\"chave_invalida\\\",\\n    \\\"mensagem\\\": \\\"A chave informada não faz referência à conta Gerencianet autenticada\\\"\\n}\\n\\nOU\\n\\n{\\n  \\\"nome\\\": \\\"saldo_insuficiente\\\",\\n  \\\"mensagem\\\": \\\"Saldo insuficiente para realizar o pagamento\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"pagamento_negado\\\",\\n  \\\"mensagem\\\": \\\"Pagamento negado por análises\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"422\"\n    },\n    {\n      \"code\": \"{\\n    \\\"nome\\\": \\\"erro_aplicacao\\\",\\n    \\\"mensagem\\\": \\\"Ocorreu um erro ao requisitar o pix\\\"\\n}\\n\\nOU\\n\\n//InvalidKey\\n{\\n    \\\"nome\\\": \\\"erro_aplicacao\\\",\\n    \\\"mensagem\\\": \\\"Ocorreu um erro ao buscar os dados da chave\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"500\"\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 /v2/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 /v2/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<br>\n\nPara hospedagem em servidores compartilhados pode haver restrições relativas a inserção de certificados gerados por outra entidade,  como o nosso CA por exemplo. Caso tenha problemas, orientamos a abertura de um [ticket](https://sistema.gerencianet.com.br/tickets/criar) informando como assunto: **mTLS em hospedagem compartilhada**  ou entre em contato pelo nosso canal #api-pix no [Discord](https://discord.com/invite/ptGHMtczcV).  Analisaremos a situação para atuarmos em conjunto em seu auxílio.\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-Homologação\"\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\\nimport json\\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 imprimir():\\n    imprime = print(request.json)\\n    data = request.json\\n    with open('data.txt', 'a') as outfile:\\n        outfile.write(\\\"\\\\n\\\")\\n        json.dump(data, outfile)\\n    return jsonify(imprime)\\n\\ndef hello_post():\\n    response = {\\\"status\\\": 200}\\n    return jsonify(response)\\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    ssl_verify_depth 3;\\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\": \"const express = require(\\\"express\\\");\\nconst fs = require(\\\"fs\\\");\\nconst https = require(\\\"https\\\");\\nconst bodyParser = require(\\\"body-parser\\\");\\nvar logger = require('morgan');\\n\\nconst httpsOptions = {\\n  cert: fs.readFileSync(\\\"\\\"), // Certificado fullchain do dominio\\n  key: fs.readFileSync(\\\"/\\\"), // Chave privada do domínio\\n  ca: fs.readFileSync(\\\"\\\"),   // Certificado público da Gerencianet\\n  minVersion: \\\"TLSv1.2\\\",\\n  requestCert: true,\\n  rejectUnauthorized: false, //Mantenha como false para que os demais endpoints da API não rejeitem requisições sem MTLS\\n};\\n\\nconst app = express();\\nconst httpsServer = https.createServer(httpsOptions, app);\\nconst PORT = 443;\\n\\napp.use(logger('dev'));  // Comente essa linha caso não queira que seja exibido o log do servidor no seu console\\napp.use(bodyParser.json());\\napp.use(bodyParser.urlencoded({ extended: false }));\\n\\n// Endpoint para configuração do webhook, você precisa cadastrar https://SEUDOMINIO.com/webhook\\napp.post(\\\"/webhook\\\", (request, response) => {\\n    // Verifica se a requisição que chegou nesse endpoint foi autorizada\\n    if (request.socket.authorized) { \\n        response.status(200).end();\\n    } else {\\n        response.status(401).end();\\n    }\\n});\\n\\n// Endpoind para recepção do webhook tratando o /pix\\napp.post(\\\"/webhook/pix\\\", (request, response) => {\\n    if (request.socket.authorized){\\n        //Seu código tratando a callback\\n        /* EXEMPLO:\\n        var body = request.body;\\n        filePath = __dirname + \\\"/data.json\\\";\\n        fs.appendFile(filePath, JSON.stringify(body) + \\\"\\\\n\\\", function (err) {\\n            if (err) {\\n                console.log(err);\\n            } else {\\n                response.status(200).end();\\n            }\\n        })*/\\n        response.status(200).end();\\n    }else{\\n        response.status(401).end();\\n    }\\n});\\n\\nhttpsServer.listen(PORT, () =>\\n    console.log(`Express server currently running on port ${PORT}`)\\n);\\n#Desenvolvido pela Consultoria Técnica da Gerencianet\",\n      \"language\": \"javascript\",\n      \"name\": \"Node\"\n    },\n    {\n      \"code\": \"##\\t Diretório onde hosts virtuais estão armazenados.\\t\\t\\t\\t\\n\\n\\t\\t\\t\\tSSLCertificateFile /caminho_certificado/server_ssl.crt.pem\\n        SSLCertificateKeyFile /caminho_certificado/server_ssl.key.pem\\n        SSLVerifyClient require\\n        SSLVerifyDepth 3\\n        SSLCACertificateFile /caminho_certificado/chain-pix-prod.crt\\n\\n## Se preferir deixar apenas uma rota de sua url para notificações você pode adicionar:\\n\\n\\t\\t\\t\\tSSLVerifyClient none\\n        <Location \\\"/path\\\">\\n          SSLVerifyClient require\\n          SSLVerifyDepth 3\\n        </Location>\\n\\n\",\n      \"language\": \"c\",\n      \"name\": \"Apache\"\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 /v2​/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\": \"//Pix recebido\\n{\\n\\t\\\"pix\\\": [\\n\\t\\t{\\n\\t\\t\\t\\\"endToEndId\\\": \\\"E1803615022211340s08793XPJ\\\",\\n\\t\\t\\t\\\"txid\\\": \\\"fc9a43k6ff384ryP5f41719\\\",\\n\\t\\t\\t\\\"chave\\\": \\\"2c3c7441-b91e-4982-3c25-6105581e18ae\\\",\\n\\t\\t\\t\\\"valor\\\": \\\"0.01\\\",\\n\\t\\t\\t\\\"horario\\\": \\\"2020-12-21T13:40:34.000Z\\\",\\n\\t\\t\\t\\\"infoPagador\\\": \\\"pagando o pix\\\"\\n\\t\\t}\\n\\t]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo\"\n    },\n    {\n      \"code\": \"// Devolução\\n{\\n  \\\"pix\\\": [\\n    {\\n      \\\"endToEndId\\\": \\\"E12345678202009091221syhgfgufg\\\",\\n      \\\"txid\\\": \\\"c3e0e7a4e7f1469a9f782d3d4999343c\\\",\\n      \\\"chave\\\": \\\"2c3c7441-b91e-4982-3c25-6105581e18ae\\\",\\n      \\\"valor\\\": \\\"110.00\\\",\\n      \\\"horario\\\": \\\"2020-09-09T20:15:00.358Z\\\",\\n      \\\"infoPagador\\\": \\\"0123456789\\\",\\n      \\\"devolucoes\\\":[\\n      {\\n        \\\"id\\\": \\\"123ABC\\\",\\n        \\\"rtrId\\\": \\\"D12345678202009091221abcdf098765\\\",\\n        \\\"valor\\\": \\\"110.00\\\",\\n        \\\"horario\\\": {\\n          \\\"solicitacao\\\": \\\"2020-09-09T20:15:00.358Z\\\"\\n        },\\n        \\\"status\\\": \\\"DEVOLVIDO\\\"\\n      }\\n      ]\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 2\"\n    },\n    {\n      \"code\": \"// Pix enviado\\n{\\n  \\\"pix\\\": [\\n    {\\n      \\\"endToEndId\\\": \\\"E090893562021030PIf25a7868\\\",\\n      \\\"chave\\\": \\\"2c3c7441-b91e-4982-3c25-6105581e18ae\\\",\\n      \\\"tipo\\\": \\\"SOLICITACAO\\\",\\n      \\\"status\\\": \\\"REALIZADO\\\",\\n      \\\"valor\\\": \\\"0.01\\\",\\n      \\\"horario\\\": \\\"2021-03-04T20:39:47.000Z\\\"\\n    }\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo 3\"\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\": \"Não\",\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 ​/v2/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 /v2​/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## Criar location do payload\n\nEndpoint para criar location do payload <code>POST/v2​/loc</code>.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.write**)\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n\\t\\\"tipoCob\\\": \\\"cob\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo\"\n    }\n  ]\n}\n[/block]\n### Resposta\n\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n    \\\"id\\\": 66,\\n    \\\"location\\\": \\\"qrcodes-pix.gerencianet.com.br/v2/7796e273b8e447c2b2c0ac2c58fe1a13\\\",\\n    \\\"tipoCob\\\": \\\"cob\\\",\\n    \\\"criacao\\\": \\\"2021-01-15T20:13:39.462Z\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"201\"\n    },\n    {\n      \"code\": \"{\\n    \\\"nome\\\": \\\"json_invalido\\\",\\n    \\\"mensagem\\\": \\\"Valores ou tipos de campo inválidos\\\",\\n    \\\"erros\\\": [\\n        {\\n            \\\"chave\\\": \\\"enum\\\",\\n            \\\"caminho\\\": \\\".body.tipoCob\\\",\\n            \\\"mensagem\\\": \\\"deve ser igual a um dos valores predefinidos\\\"\\n        }\\n    ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    }\n  ]\n}\n[/block]\n## Consultar locations cadastradas\n\nEndpoint para consultar locations cadastradas <code>GET/v2​/loc</code>.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.read**)\n\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{{gn-pix-api}}/v2/loc/?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    \"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    \"0-1\": \"Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339\",\n    \"1-1\": \"Filtra os registros cuja data de criação seja menor ou igual que a data de fim. Respeita RFC 3339.\",\n    \"0-2\": \"Sim\",\n    \"1-2\": \"Sim\",\n    \"0-3\": \"string <date-time>\",\n    \"1-3\": \"string <date-time>\"\n  },\n  \"cols\": 4,\n  \"rows\": 2\n}\n[/block]\n## Recuperar location do payload.\n\nEndpoint para consultar locations cadastradas <code>GET/v2​/loc/{id}</code>.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.read**)\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\": \"**id**\",\n    \"0-1\": \"Id da location cadastrada para servir um payload\",\n    \"0-2\": \"Sim\",\n    \"0-3\": \"string\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\nA resposta abaixo representa Sucesso(200) do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"id\\\": 7716,\\n  \\\"txid\\\": \\\"fda9460fe04e4f129b72863ae57ee22f\\\",\\n  \\\"location\\\": \\\"pix.example.com/qr/v2/cobv/2353c790eefb11eaadc10242ac120002\\\",\\n  \\\"tipoCob\\\": \\\"cobv\\\",\\n  \\\"criacao\\\": \\\"2020-03-11T21:19:51.013Z\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n## Gerar QrCode de um location\n\nEndpoint para gerar QRCode de um location <code>GET/v2​/loc/{id}/qrcode</code>.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.read**)\n\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-3\": \"string\",\n    \"0-2\": \"Sim\",\n    \"0-1\": \"Id da location cadastrada para servir um payload\",\n    \"0-0\": \"**id**\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\nA resposta abaixo representa Sucesso(200) do consumo.\n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n    \\\"qrcode\\\": \\\"00020126880014BR.GOV.BCB.PIX2566qrcodes-pix.gerencianet.com.b...\\\",\\n    \\\"imagemQrcode\\\": \\\"data:image/png;base64,iVBORw0KGgoAAAAOQAAADkCAYAAACIV4s...\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n## Desvincular uma cobrança de uma location\n\nEndpoint utilizado para desvincular uma cobrança de uma location. <code>DELETE/v2​/loc/{id}/txid</code>.\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.write**)\n\nSe executado com sucesso, a entidade <code>loc</code> não apresentará mais um txid, se apresentava anteriormente à chamada. Adicionalmente, a entidade <code>cob</code> ou <code>cobv</code> associada ao txid desvinculado também passará a não mais apresentar um location. Esta operação não altera o <code>status</code> da <code>cob</code> ou <code>cobv</code> em questã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-3\": \"string\",\n    \"0-2\": \"Sim\",\n    \"0-1\": \"Id da location cadastrada para servir um payload\",\n    \"0-0\": \"**id**\"\n  },\n  \"cols\": 4,\n  \"rows\": 1\n}\n[/block]\n## Criar chave evp\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.pix.evp.write**)\n\nEndpoint utilizado para criar uma chave Pix aleatória (evp). <code>POST /v2/gn/evp</code>\n\n### Respostas\nAs respostas abaixo representam Sucesso(201) e Falhas/erros do consumo.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"chave\\\": \\\"345e4568-e89b-12d3-a456-006655440001\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"201\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"limite_criacao_chave_atingido\\\",\\n  \\\"mensagem\\\": \\\"O limite de criação de chaves foi atingido\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"erro_aplicacao\\\",\\n  \\\"mensagem\\\": \\\"Ocorreu um erro ao solicitar a criação da chave\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"500\"\n    }\n  ]\n}\n[/block]\n## Listar chaves evp\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.pix.evp.read**)\n\nEndpoint utilizado para listar as chaves Pix aleatórias (evp). A listagem somente mostrará as chaves do tipo aleatória. <code>GET /v2/gn/evp</code>\n\n### Respostas\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"chaves\\\": [\\n    \\\"355e4568-e89b-1243-a456-006655440001\\\",\\n    \\\"133e4568-e89b-1243-a456-006655440000\\\"\\n  ]\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"erro_aplicacao\\\",\\n  \\\"mensagem\\\": \\\"Ocorreu um erro ao buscar as chaves\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"500\"\n    }\n  ]\n}\n[/block]\n\n## Remover chave evp\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.pix.evp.write**)\n\nEndpoint utilizado para remover uma chave Pix aleatória (evp). Caso remova uma chave aleatória, não há como criá-la novamente: o uuid é gerado pelo DICT e a cada solicitação de registro de chave, nos é retornado um hash diferente. Isso significa que as cobranças criadas para a chave removida não poderão mais ser pagas, pois o payload não será mais retornado. <code>DELETE /v2/gn/evp/:chave</code>\n\n### Respostas\nAs respostas abaixo representam Sucesso(200) e Falhas/erros do consumo.\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Chave aleatória removida.\",\n      \"language\": \"text\",\n      \"name\": \"200\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"chave_nao_encontrada\\\",\\n  \\\"mensagem\\\": \\\"A chave informada não foi encontrada\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"erro_aplicacao\\\",\\n  \\\"mensagem\\\": \\\"Ocorreu um erro ao solicitar a exclusão da chave\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"500\"\n    }\n  ]\n}\n[/block]\n\n## Buscar o saldo da conta\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.balance.read**)\n\nEndpoint com a finalidade de consultar o saldo em sua conta Gerencianet <code>GET/v2/gn/saldo</code>. Você pode habilitar o escopo nas configurações de sua aplicação em sua conta Gerencianet.\n\n### Respostas\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n  \\\"saldo\\\": \\\"100.00\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"erro_aplicacao\\\",\\n  \\\"mensagem\\\": \\\"Ocorreu um erro ao solicitar o saldo da conta\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"500\"\n    }\n  ]\n}\n[/block]\n## Criar / modificar configurações da conta\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.settings.write**)\n\nEndpoint com a finalidade de criar e modificar as configurações da conta do cliente relacionados à API.<code>PUT /v2/gn/config</code>. \n\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n    \\\"pix\\\": {\\n        \\\"receberSemChave\\\": true,\\n        \\\"chaves\\\": {\\n            \\\"355e4568-e89b-1243-a456-006655440001\\\": {\\n                \\\"recebimento\\\": {\\n                    \\\"txidObrigatorio\\\": false,\\n                    \\\"qrCodeEstatico\\\": {\\n                        \\\"recusarTodos\\\": false\\n                    }\\n                }\\n            }\\n        }\\n    }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"Exemplo\"\n    }\n  ]\n}\n[/block]\n### Respostas\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"Configurações criados / modificadas\",\n      \"language\": \"json\",\n      \"name\": \"204\"\n    },\n    {\n      \"code\": \"{\\n  \\\"nome\\\": \\\"erro_aplicacao\\\",\\n  \\\"mensagem\\\": \\\"Ocorreu um erro ao buscar as configurações da conta\\\"\\n}\",\n      \"language\": \"json\",\n      \"name\": \"400\"\n    },\n    {\n      \"code\": \"{\\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## Listar configurações da conta\n\nAUTHORIZATIONS:  [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.settings.read**)\n\nEndpoint com a finalidade de listar as configurações definidas na conta.<code>GET /v2/gn/config</code>. \n\n\n### Resposta\n[block:code]\n{\n  \"codes\": [\n    {\n      \"code\": \"{\\n    \\\"pix\\\": {\\n        \\\"receberSemChave\\\": true,\\n        \\\"chaves\\\": {\\n            \\\"355e4568-e89b-1243-a456-006655440001\\\": {\\n                \\\"recebimento\\\": {\\n                    \\\"txidObrigatorio\\\": true,\\n                    \\\"qrCodeEstatico\\\": {\\n                        \\\"recusarTodos\\\": false\\n                    }\\n                }\\n            }\\n        }\\n    }\\n}\",\n      \"language\": \"json\",\n      \"name\": \"200\"\n    }\n  ]\n}\n[/block]\n## Fluxogramas\n\n### Criação de uma cobrança dinâmica e montagem do QRCode\n\n\n[block:image]\n{\n  \"images\": [\n    {\n      \"image\": [\n        \"https://files.readme.io/376b283-Diagrama_API-PIX_-_Fluxograma_9.png\",\n        \"Diagrama API-PIX -  Fluxograma (9).png\",\n        3113,\n        1635,\n        \"#333\"\n      ]\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]\nO txid como mencionado deve ser gerado pelo integrador e  atender a Regex <code>^[a-zA-Z0-9]{26,35}$</code>. O integrador pode automatizar este processo utilizando algum script ou realiza-lo manualmente. Uma forma de testar se o txid está obedecendo a Regex é utilizar algum site de testes de Regex informando no campo Expressão Regular o <code>^[a-zA-Z0-9]{26,35}$</code> e digitando no campo texto o txid que deseja utilizar.\n\n<br>\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 link <a href="https://documenter.getpostman.com/view/13574984/TVzVgvBA" target="_blank" alt="link"></a> da nossa Collection que manteremos atualizada com o endpoints da API Pix. https://documenter.getpostman.com/view/13574984/TVzVgvBA [![Run in Postman](https://run.pstmn.io/button.svg)](https://documenter.getpostman.com/view/13574984/TVzVgvBA) ## SDK Pix Em nosso repositório no github você encontra dois exemplos de SDKs PIX Gerencianet (PHP e Python), que contém exemplos desde a emissão até a renderização do qr-code. Para mais detalhes, acesse: SDK PHP: https://github.com/gerencianet/gn-api-sdk-php SDK Python: https://github.com/gerencianet/gn-api-sdk-python SDK Node.js: https://github.com/gerencianet/gn-api-sdk-node ## Rota base [block:code] { "codes": [ { "code": " \"URL\": {\n \"sandbox\": \"https://api-pix-h.gerencianet.com.br\"\n }", "language": "json", "name": "Homologação" }, { "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**Homologação**\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>pix.send</code> - Permissão para requisitar envio de Pix</li><br><li> <code>webhook.write</code> - Permissão para alteração do webhook</li><br><li> <code>webhook.read</code> - Permissão para consulta do webhook</li><br><li> <code>payloadlocation.write</code> - Permissão para criar location do payload</li><br><li> <code>payloadlocation.read</code> - Permissão para consulta de locations </li><br><li> <code>gn.pix.evp.write</code> - Permissão para criar/remover chave evp</li><br><li> <code>gn.pix.evp.read</code> - Permissão para listar chave evp</li><br><li> <code>gn.balance.read</code> - Permissão para buscar saldo da conta</li><br><li> <code>gn.settings.write</code> - Permissão para criar/modificar configurações da conta</li><br><li> <code>gn.settings.read</code> - Permissão para listar configurações da conta</li><br></ul>" }, "cols": 2, "rows": 1 } [/block] ## Gerando uma aplicação e o certificado .p12 * **Criar uma nova aplicação para utilização da API Pix**: Acesse API (1)-> Minhas Aplicações -> Nova Aplicação(2) -> Ative API Pix (3) e escolha os escopos que deseja liberar em ambiente de Produção e/ou Homologação, lembrando que estes podem ser alterados posteriormente. -> Criar nova aplicação(4). Imagem do passo a passo [aqui](https://gnetbr.com/HklP7-aMMO) * **Alterar uma aplicação existente para uso da API Pix**: Acesse API (1)-> Minhas Aplicações e escolha a sua aplicação (2) -> Editar(Botão laranja) -> Ative API Pix (3) e escolha os escopos que deseja liberar em ambiente de Produção e/ou Homologação. -> Atualizar aplicação (4). Imagem do passo a passo [aqui](https://gnetbr.com/HJlHqv_GGO) 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**: Acesse API (1)-> Meus Certificados (2) e escolha o ambiente que deseja o certificado: Produção ou Homologação -> Novo Certificado (3). Como no exemplo deste [link](https://gnetbr.com/rJxyQlpfG_). **Obs:** Em algumas linguagens você deve converter o certificado .p12 para o formato .pem. Para converter seu certificado, basta utilizar o conversor de certificados disponibilizado pela Gerencianet no link: <a href="https://pix.gerencianet.com.br/ferramentas/conversorGerencianet.exe" target="_blank" alt="Conversor de certificados Gerencianet">Clique aqui</a>. Ou utilize algum dos exemplos abaixo utilizando o OpenSSL para a conversão. **Obs:** A senha solicitada é vazia, sendo assim é só pressionar a tecla "enter" e dar continuidade 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$config = [\n \"certificado\" => \"./certificado.pem\",\n \"client_id\" => \"YOUR-CLIENT-ID\",\n \"client_secret\" => \"YOUR-CLIENT-SECRET\"\n];\n$autorizacao = base64_encode($config[\"client_id\"] . \":\" . $config[\"client_secret\"]);\n\n$curl = curl_init();\n\ncurl_setopt_array($curl, array(\n CURLOPT_URL => \"https://api-pix-h.gerencianet.com.br/oauth/token\", // Rota base, homologação 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 => '{\"grant_type\": \"client_credentials\"}',\n CURLOPT_SSLCERT => $config[\"certificado\"], // Caminho do certificado\n CURLOPT_SSLCERTPASSWD => \"\",\n CURLOPT_HTTPHEADER => array(\n \"Authorization: Basic $autorizacao\",\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=\"{\\r\\n \\\"grant_type\\\": \\\"client_credentials\\\"\\r\\n}\"\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 System.Collections.Generic;\nusing RestSharp;\n\nnamespace PixGerencianet\n{\n class Authorize\n {\n public static string Base64Encode(string plainText)\n {\n var plainTextBytes = System.Text.Encoding.UTF8.GetBytes(plainText);\n return System.Convert.ToBase64String(plainTextBytes);\n }\n\n static void Main(string[] args)\n {\n\n var credencials = new Dictionary<string, string>{\n {\"client_id\", \"YOUR-CLIENT-ID\"},\n {\"client_secret\", \"YOUR-CLIENT-SECRET\"}\n };\n var authorization = Base64Encode(credencials[\"client_id\"] + \":\" + credencials[\"client_secret\"]);\n var client = new RestSharp.RestClient(\"https://api-pix-h.gerencianet.com.br/oauth/token\");\n var request = new RestRequest(Method.POST);\n\n X509Certificate2 uidCert = new X509Certificate2(\"./certificado.p12\", \"\");\n client.ClientCertificates = new X509CertificateCollection() { uidCert };\n\n request.AddHeader(\"Authorization\", \"Basic \" + authorization);\n request.AddHeader(\"Content-Type\", \"application/json\");\n request.AddParameter(\"application/json\", \"{\\r\\n \\\"grant_type\\\": \\\"client_credentials\\\"\\r\\n}\", ParameterType.RequestBody);\n \n IRestResponse restResponse = client.Execute(request);\n string response = restResponse.Content;\n\n Console.WriteLine(response);\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 certfile é 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": "" }, { "code": "//Desenvolvido pela Consultoria Técnica da Gerencianet\n\nimport java.io.BufferedReader;\nimport java.io.InputStreamReader;\nimport java.io.OutputStream;\nimport java.net.URL;\nimport java.util.Base64;\n\nimport javax.net.ssl.HttpsURLConnection;\nimport javax.net.ssl.SSLSocketFactory;\n\npublic class Auth {\n public static void main(String[] args) throws Exception {\n String client_id = \"YOUR-CLIENT-ID\";\n String client_secret = \"YOUR-CLIENT-SECRET\";;\n String basicAuth = Base64.getEncoder().encodeToString(((client_id+':'+client_secret).getBytes()));\n \n \t//Diretório em que seu certificado em formato .p12 deve ser inserido\n System.setProperty(\"javax.net.ssl.keyStore\", \"certificado.p12\"); \n SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();\n \n URL url = new URL (\"https://api-pix-h.gerencianet.com.br/oauth/token\"); //Para ambiente de Desenvolvimento \n HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();\n conn.setDoOutput(true);\n conn.setRequestMethod(\"POST\");\n conn.setRequestProperty(\"Content-Type\", \"application/json\");\n conn.setRequestProperty(\"Authorization\", \"Basic \"+ basicAuth);\n conn.setSSLSocketFactory(sslsocketfactory);\n String input = \"{\\\"grant_type\\\": \\\"client_credentials\\\"}\";\n \n OutputStream os = conn.getOutputStream();\n os.write(input.getBytes());\n os.flush();\t\t\n\n InputStreamReader reader = new InputStreamReader(conn.getInputStream());\n BufferedReader br = new BufferedReader(reader);\n\n String response;\n while ((response = br.readLine()) != null) {\n System.out.println(response);\n }\n conn.disconnect();\n\n }\n}", "language": "java", "name": "" }, { "code": "//Desenvolvido pela Consultoria Técnica da Gerencianet\npackage main\n\nimport (\n \"fmt\"\n \"strings\"\n \"net/http\"\n \"io/ioutil\"\n \"crypto/tls\"\n)\n\nconst(\n\tclient_id = \"YOUR-CLIENT-ID\"\n\tclient_secret = \"YOUR-CLIENT-SECRET\"\n)\n\nfunc main() {\n\n url := \"https://api-pix.gerencianet.com.br/oauth/token\"// Rota base, homologação ou produção\n method := \"POST\"\n\n payload := strings.NewReader(`{\"grant_type\": \"client_credentials\"}`)\n\n\n cert, _ := tls.LoadX509KeyPair(\"CA.crt.pem\", \"KEY.crt.pem\")// Seu certificado e chave privada gerada a partir dos comandos de conversão OpenSSL\n\n client := &http.Client{\n Transport: &http.Transport{\n TLSClientConfig: &tls.Config{\n Certificates: []tls.Certificate{cert},\n },\n },\n}\n\n \n\n req, err := http.NewRequest(method, url, payload)\n\n if err != nil {\n fmt.Println(err)\n return\n }\n req.SetBasicAuth(client_id, client_secret)\n req.Header.Add(\"Content-Type\", \"application/json\")\n\n res, err := client.Do(req)\n if err != nil {\n fmt.Println(err)\n return\n }\n defer res.Body.Close()\n\n body, err := ioutil.ReadAll(res.Body)\n if err != nil {\n fmt.Println(err)\n return\n }\n fmt.Println(string(body))\n}", "language": "go", "name": "GO" } ] } [/block] <br> A seguir, confira todos os endpoints presentes em nossa API-Pix: <ul><li><div class=""><span class="put">PUT</span> <a href="#section-criar-cobran-a-">/v2/cob/{txid}</a> <em>(Criar cobrança)</em></div></li><li><div class=""><span class="put">PATCH</span> <a href="#section-revisar-cobran-a">/v2/cob/{txid}</a> <em>(Revisar cobrança)</em></div></li><li><div class=""><span class="post">POST</span> <a href="#section-criar-cobran-a-imediata">/v2/cob</a> <em>(Criar cobrança imediata)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-consultar-cobran-a">/v2/cob​/{txid}</a> <em>(Consultar cobrança)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-consultar-lista-de-cobran-as">/v2/cob​/</a> <em>(Consultar lista de cobranças)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-consultar-pix-">/v2/pix/{e2eId}</a> <em>(Consultar Pix)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-consultar-pix-recebidos-">/v2/pix​/</a> <em>(Consultar Pix recebidos)</em></div></li><li><div class=""><span class="post">POST</span> <a href="#section-requisitar-envio-de-pix-">/v2/pix</a> <em>(Requisitar envio de Pix.)</em></div></li><li><div class=""><span class="put">PUT</span> <a href="#section-solicitar-devolu-o-">/v2/pix/{e2eId}/devolucao/{id}</a> <em>(Solicitar devolução.)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-consultar-devolu-o-">/v2/pix/{e2eId}/devolucao/{id}</a> <em>(Consultar devolução)</em></div></li><li><div class=""><span class="put">PUT</span> <a href="#section-configurar-o-webhook-pix-">/v2​/webhook/:chave</a> <em>(Configurar o Webhook Pix)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-exibir-informa-es-acerca-do-wehook-pix-">/v2/webhook/:chave</a> <em>(Exibir informações do Wehook Pix)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-consultar-lista-de-webhooks">/v2/webhook/</a> <em>(Consultar lista de webhooks)</em></div></li><li><div class=""><span class="delete">DELETE</span> <a href="#section-cancelar-o-webhook-pix-">/v2​/webhook/:chave</a> <em>(Cancelar o webhook Pix)</em></div></li><li><div class=""><span class="post">POST</span> <a href="#section-criar-location-do-payload">/v2/loc</a> <em>(Criar location do payload)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-consultar-locations-cadastradas">/v2/loc</a> <em>(Consultar locations cadastradas)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-recuperar-location-do-payload-">/v2/loc/{id}</a> <em>(Recuperar location do payload)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-gerar-qrcode-de-um-location">/v2/loc/{id}/qrcode</a> <em>(Gerar QRCode de um location)</em></div></li><li><div class=""><span class="delete">DELETE</span> <a href="#section-desvincular-uma-cobran-a-de-uma-location">/v2/loc/{id}/txid</a> <em>(Desvincular um txid de uma location)</em></div></li><li><div class=""><span class="post">POST</span> <a href="#section-criar-chave-evp">/v2/gn/evp</a> <em>(Criar chave evp)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-listar-chaves-evp">/v2/gn/evp</a> <em>(Listar chaves evp)</em></div></li><li><div class=""><span class="delete">DELETE</span> <a href="#section-remover-chave-evp">/v2/gn/evp/:chave</a> <em>(Remover chave evp)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-buscar-o-saldo-da-conta">/v2/gn/saldo</a> <em>(Buscar o saldo da conta)</em></div></li><li><div class=""><span class="put">PUT</span> <a href="#section-criar-modificar-configura-es-da-conta">/v2/gn/config</a> <em>(Criar/modificar configurações da conta)</em></div></li><li><div class=""><span class="get">GET</span> <a href="#section-listar-configura-es-da-conta">/v2/gn/config</a> <em>(Listar configurações da conta)</em></div></li></ul> <br> <hr> ## 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\": \"Informe o número ou identificador do pedido.\",\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). Recebe um numero com valor mínimo de 1 e 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 /v2/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\": \"Informe o número ou identificador do pedido.\"\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\": \"Informe o número ou identificador do pedido.\",\n \"infoAdicionais\": [\n {\n \"nome\": \"Pagamento em\",\n \"valor\": \"Nome da sua empresa\"\n },\n {\n \"nome\": \"Número do Pedido\",\n \"valor\": \"ID do pedido\"\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). Recebe um numero com valor mínimo de 1 e 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(201) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": 3600\n },\n \"txid\": \"7978c0c97ea847e78e8849634473c1f1\",\n \"revisao\": 0,\n \"loc\": {\n \"id\": 789,\n \"location\": \"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\",\n \"tipoCob\": \"cob\"\n },\n \"location\": \"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\",\n \"status\": \"ATIVA\",\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\": \"Indagação ao pagador\",\n \"infoAdicionais\": [\n {\n \"nome\": \"Pagamento em\",\n \"valor\": \"Nome da sua empresa\"\n },\n {\n \"nome\": \"Número do Pedido\",\n \"valor\": \"ID do pedido\"\n }\n ]\n}", "language": "json", "name": "201" }, { "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 /v2/cob/{txid}</code> [block:code] { "codes": [ { "code": "{\n \"loc\": {\n \"id\": 7768\n },\n \"devedor\": {\n \"cpf\": \"12345678909\",\n \"nome\": \"Francisco da Silva\"\n },\n \"valor\": {\n \"original\": \"123.45\"\n },\n \"solicitacaoPagador\": \"Indagação ao pagador.\"\n}", "language": "json", "name": "Exemplo 1" }, { "code": "{\n \"valor\": {\n \"original\": \"567.89\"\n },\n \"solicitacaoPagador\": \"Informe o número ou identificador do pedido.\"\n}", "language": "json", "name": "Exemplo 2" }, { "code": "{\n \"status\": \"REMOVIDA_PELO_USUARIO_RECEBEDOR\"\n}", "language": "json", "name": "Exemplo 3" } ] } [/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 alteraçã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). Recebe um numero com valor mínimo de 1 e 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>solicitacaoPagador</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>", "6-0": "<b>infoAdicionais</b>", "6-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>", "6-2": "Não", "6-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)", "5-0": "<b>chave</b>", "5-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.", "5-2": "Não", "5-3": "string (Chave DICT do recebedor) <code>≤ 77 characters</code>" }, "cols": 4, "rows": 7 } [/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\": \"Indagação ao pagador.\"\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] ## Criar cobrança Imediata AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**cob.write**) Endpoint para criar uma cobrança imediata sem informar o txid. Neste caso, o txid deve ser definido pelo PSP. <code>POST /v2/cob</code>. ** Os atributos serão os mesmos utilizados na rota <code>POST /v2/cob/{txid}</code> (Criar cobrança com txid). [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\": \"Indagação ao pagador.\",\n \"infoAdicionais\": [\n {\n \"nome\": \"Pagamento em\",\n \"valor\": \"Nome da sua empresa\"\n },\n {\n \"nome\": \"Número do Pedido\",\n \"valor\": \"ID do pedido\"\n }\n ]\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\": \"Informe o número ou identificador do pedido.\",\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] ### Respostas As respostas abaixo representam Sucesso(201) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"calendario\": {\n \"criacao\": \"2020-09-09T20:15:00.358Z\",\n \"expiracao\": 3600\n },\n \"txid\": \"7978c0c97ea847e78e8849634473c1f1\",\n \"revisao\": 0,\n \"loc\": {\n \"id\": 789,\n \"location\": \"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\",\n \"tipoCob\": \"cob\"\n },\n \"location\": \"pix.example.com/qr/v2/9d36b84fc70b478fb95c12729b90ca25\",\n \"status\": \"ATIVA\",\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\": \"Indagação ao pagador.\",\n \"infoAdicionais\": [\n {\n \"nome\": \"Pagamento em\",\n \"valor\": \"Nome da sua empresa\"\n },\n {\n \"nome\": \"Número do Pedido\",\n \"valor\": \"ID do pedido\"\n }\n ]\n}", "language": "json", "name": "201" }, { "code": "InvalidOperationError\n{\n \"nome\": \"documento_bloqueado\",\n \"mensagem\": \"O documento desta conta tem bloqueios que impedem a emissão\"\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 /v2/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\": \"Indagação ao pagador.\"\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\": \"Informe o número ou identificador do pedido.\",\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 /v2/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\": \"Informe o número ou identificador do pedido.\"\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\": \"Indagação ao pagador.\",\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 \"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\": \"Informe o número ou identificador do pedido.\"\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 /v2/pix/{e2eId}</code>. **Obs** : Este endpoint não retorna informações refentes a Pix enviados, ou seja, pelo endpoint <code>POST /v2/pix</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 /v2/pix​/</code>. **Obs** : Este endpoint não retorna informações refentes a Pix enviados, ou seja, pelo endpoint <code>POST /v2/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]{1,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] <br> ## Requisitar envio de Pix. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2)(**pix.send**) Endpoint destinado a realizar o envio direto de um Pix para uma chave Pix cadastrada em um PSP seja da Gerencianet ou outro. <code>POST /v2/pix</code> **Para habilitar o end-point pix/enviar é necessário entrar em contato com a equipe Comercial da Gerencianet para novo anexo contratual.** **Liberamos uma versão de testes por 15 dias que pode ser solicitada tanto por pessoa física quanto jurídica, o procedimento é o mesmo, criar um ticket para a equipe comercial solicitando a liberação do escopo pix.send** **O endpoint poderá sofrer alterações quando entrar no escopo de padronização do BACEN. Os clientes habilitados serão avisados com antecedência.** [block:code] { "codes": [ { "code": "{\n \"valor\": \"12.34\",\n \"pagador\": {\n \"chave\": \"19974764017\"\n },\n \"favorecido\": {\n \"chave\": \"joã[email protected]\"\n }\n}", "language": "json", "name": "Exemplo 1" }, { "code": "{\n \"valor\": \"99.99\",\n \"pagador\": {\n \"chave\": \"19974764017\",\n \"infoPagador\": \"Segue o pagamento da conta\"\n },\n \"favorecido\": {\n \"contaBanco\": {\n \"nome\": \"JOSE CARVALHO\",\n \"cpf\": \"10519952057\",\n \"codigoBanco\": \"09089356\",\n \"agencia\": \"1\",\n \"conta\": \"123453\",\n \"tipoConta\": \"cacc\"\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": "<b>valor", "0-1": "Valores monetários referentes à cobrança.", "0-2": "Sim", "0-3": "string \n<code>\\d{1,10}.\\d{2}</code>", "1-0": "<b>pagador", "1-1": "O campo pagador, obrigatório, contém a chave Pix associada a conta autenticada que será debitado o valor definido.\n\npagador:\n\n<code>chave*</code> // O campo chave, obrigatório, determina a chave Pix registrada no DICT que será utilizada identificar o pagador do Pix.\nstring (Chave DICT do pagador) <code>≤ 77 characters</code>\n\n<code>infoPagador</code> // Informação do pagador sobre o Pix a ser enviado.\n\nstring <code>< 140</code>", "1-2": "Sim", "1-3": "object", "2-0": "<b>favorecido</b>", "2-2": "Sim", "2-1": "O campo favorecido, obrigatório, contém a chave Pix que será creditado o valor definido.\n\nAtributos favorecido:\n\n<code>chave</code> // O campo chave, obrigatório, determina a chave Pix registrada no DICT que será utilizada identificar o recebedor do Pix.\n\n string (Chave DICT do recebedor) <code>≤ 77 characters</code>\n<br><br>\n<code>contaBanco</code> // O campo contaBanco, obrigatório, determina os dados bancários do recebedor do Pix.\n\n<em>Atributos contaBanco:</em>\n<br><code>nome (Obrigatório)</code>// Nome do recebedor (string) <code>< 200 characters</code><br>\n<code>cpf</code>// CPF do recebedor (string) <code>^[0-9]{11}$</code><br>\n<code>cnpj</code>// CNPJ do recebedor (string) <code>^[0-9]{14}$</code><br>\n<code>codigoBanco (Obrigatório)</code>// ISPB do Banco do recebedor (string) <code>^[0-9]{8}$</code><br>\n<code>agencia (Obrigatório)</code>// Agência do recebedor no seu Banco (string) <code>^[0-9]{1,4}$</code><br> \n<code>conta (Obrigatório)</code>// Conta do recebedor no seu Banco (string) <code>^[0-9]+</code>\n<br>\n<code>tipoConta (Obrigatório)</code>// Tipo da conta do recebedor no seu Banco (string) <code>^[0-9]+</code><br>Enum: <code>\"cacc\"</code>(Conta corrente),<code>\"slry\"</code>(Conta salário),\n<code>\"svgs\"</code>(poupança)", "2-3": "object", "3-0": "<b>status</b>", "3-1": "O campo status no retorno do webhook representa a situação da requisição de envio direto de um Pix para uma chave Pix, podendo assumir os seguintes estados:\n<code>\"EM_PROCESSAMENTO\"</code>,<code>\"REALIZADO\"</code>,<code>\"NAO_REALIZADO\"</code>", "3-2": "Não", "3-3": "string" }, "cols": 4, "rows": 4 } [/block] ### Respostas [block:code] { "codes": [ { "code": "{\n \"e2eId\": \"E09089356202011251226APIff82f2e5\",\n \"valor\": \"12.31\",\n \"horario\": {\n \"solicitacao\": \"2020-11-25T12:26:42.905Z\"\n },\n \"status\": {\n \"type\": \"EM_PROCESSAMENTO\"\n }\n}", "language": "json", "name": "200" }, { "code": "{\n \"nome\": \"chave_invalida\",\n \"mensagem\": \"A chave informada não faz referência à conta Gerencianet autenticada\"\n}\n\nOU\n\n{\n \"nome\": \"saldo_insuficiente\",\n \"mensagem\": \"Saldo insuficiente para realizar o pagamento\"\n}", "language": "json", "name": "400" }, { "code": "{\n \"nome\": \"pagamento_negado\",\n \"mensagem\": \"Pagamento negado por análises\"\n}", "language": "json", "name": "422" }, { "code": "{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao requisitar o pix\"\n}\n\nOU\n\n//InvalidKey\n{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao buscar os dados da chave\"\n}", "language": "json", "name": "500" } ] } [/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 /v2/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 /v2/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. <br> Para hospedagem em servidores compartilhados pode haver restrições relativas a inserção de certificados gerados por outra entidade, como o nosso CA por exemplo. Caso tenha problemas, orientamos a abertura de um [ticket](https://sistema.gerencianet.com.br/tickets/criar) informando como assunto: **mTLS em hospedagem compartilhada** ou entre em contato pelo nosso canal #api-pix no [Discord](https://discord.com/invite/ptGHMtczcV). Analisaremos a situação para atuarmos em conjunto em seu auxílio. [block:code] { "codes": [ { "code": "https://pix.gerencianet.com.br/webhooks/chain-pix-sandbox.crt", "language": "text", "name": "Chave Pública-Homologação" }, { "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\nimport json\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 imprimir():\n imprime = print(request.json)\n data = request.json\n with open('data.txt', 'a') as outfile:\n outfile.write(\"\\n\")\n json.dump(data, outfile)\n return jsonify(imprime)\n\ndef hello_post():\n response = {\"status\": 200}\n return jsonify(response)\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 ssl_verify_depth 3;\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": "const express = require(\"express\");\nconst fs = require(\"fs\");\nconst https = require(\"https\");\nconst bodyParser = require(\"body-parser\");\nvar logger = require('morgan');\n\nconst httpsOptions = {\n cert: fs.readFileSync(\"\"), // Certificado fullchain do dominio\n key: fs.readFileSync(\"/\"), // Chave privada do domínio\n ca: fs.readFileSync(\"\"), // Certificado público da Gerencianet\n minVersion: \"TLSv1.2\",\n requestCert: true,\n rejectUnauthorized: false, //Mantenha como false para que os demais endpoints da API não rejeitem requisições sem MTLS\n};\n\nconst app = express();\nconst httpsServer = https.createServer(httpsOptions, app);\nconst PORT = 443;\n\napp.use(logger('dev')); // Comente essa linha caso não queira que seja exibido o log do servidor no seu console\napp.use(bodyParser.json());\napp.use(bodyParser.urlencoded({ extended: false }));\n\n// Endpoint para configuração do webhook, você precisa cadastrar https://SEUDOMINIO.com/webhook\napp.post(\"/webhook\", (request, response) => {\n // Verifica se a requisição que chegou nesse endpoint foi autorizada\n if (request.socket.authorized) { \n response.status(200).end();\n } else {\n response.status(401).end();\n }\n});\n\n// Endpoind para recepção do webhook tratando o /pix\napp.post(\"/webhook/pix\", (request, response) => {\n if (request.socket.authorized){\n //Seu código tratando a callback\n /* EXEMPLO:\n var body = request.body;\n filePath = __dirname + \"/data.json\";\n fs.appendFile(filePath, JSON.stringify(body) + \"\\n\", function (err) {\n if (err) {\n console.log(err);\n } else {\n response.status(200).end();\n }\n })*/\n response.status(200).end();\n }else{\n response.status(401).end();\n }\n});\n\nhttpsServer.listen(PORT, () =>\n console.log(`Express server currently running on port ${PORT}`)\n);\n#Desenvolvido pela Consultoria Técnica da Gerencianet", "language": "javascript", "name": "Node" }, { "code": "##\t Diretório onde hosts virtuais estão armazenados.\t\t\t\t\n\n\t\t\t\tSSLCertificateFile /caminho_certificado/server_ssl.crt.pem\n SSLCertificateKeyFile /caminho_certificado/server_ssl.key.pem\n SSLVerifyClient require\n SSLVerifyDepth 3\n SSLCACertificateFile /caminho_certificado/chain-pix-prod.crt\n\n## Se preferir deixar apenas uma rota de sua url para notificações você pode adicionar:\n\n\t\t\t\tSSLVerifyClient none\n <Location \"/path\">\n SSLVerifyClient require\n SSLVerifyDepth 3\n </Location>\n\n", "language": "c", "name": "Apache" } ] } [/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 /v2​/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": "//Pix recebido\n{\n\t\"pix\": [\n\t\t{\n\t\t\t\"endToEndId\": \"E1803615022211340s08793XPJ\",\n\t\t\t\"txid\": \"fc9a43k6ff384ryP5f41719\",\n\t\t\t\"chave\": \"2c3c7441-b91e-4982-3c25-6105581e18ae\",\n\t\t\t\"valor\": \"0.01\",\n\t\t\t\"horario\": \"2020-12-21T13:40:34.000Z\",\n\t\t\t\"infoPagador\": \"pagando o pix\"\n\t\t}\n\t]\n}", "language": "json", "name": "Exemplo" }, { "code": "// Devolução\n{\n \"pix\": [\n {\n \"endToEndId\": \"E12345678202009091221syhgfgufg\",\n \"txid\": \"c3e0e7a4e7f1469a9f782d3d4999343c\",\n \"chave\": \"2c3c7441-b91e-4982-3c25-6105581e18ae\",\n \"valor\": \"110.00\",\n \"horario\": \"2020-09-09T20:15:00.358Z\",\n \"infoPagador\": \"0123456789\",\n \"devolucoes\":[\n {\n \"id\": \"123ABC\",\n \"rtrId\": \"D12345678202009091221abcdf098765\",\n \"valor\": \"110.00\",\n \"horario\": {\n \"solicitacao\": \"2020-09-09T20:15:00.358Z\"\n },\n \"status\": \"DEVOLVIDO\"\n }\n ]\n }\n ]\n}", "language": "json", "name": "Exemplo 2" }, { "code": "// Pix enviado\n{\n \"pix\": [\n {\n \"endToEndId\": \"E090893562021030PIf25a7868\",\n \"chave\": \"2c3c7441-b91e-4982-3c25-6105581e18ae\",\n \"tipo\": \"SOLICITACAO\",\n \"status\": \"REALIZADO\",\n \"valor\": \"0.01\",\n \"horario\": \"2021-03-04T20:39:47.000Z\"\n }\n ]\n}", "language": "json", "name": "Exemplo 3" } ] } [/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": "Não", "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 ​/v2/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 /v2​/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] ## Criar location do payload Endpoint para criar location do payload <code>POST/v2​/loc</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.write**) [block:code] { "codes": [ { "code": "{\n\t\"tipoCob\": \"cob\"\n}", "language": "json", "name": "Exemplo" } ] } [/block] ### Resposta As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"id\": 66,\n \"location\": \"qrcodes-pix.gerencianet.com.br/v2/7796e273b8e447c2b2c0ac2c58fe1a13\",\n \"tipoCob\": \"cob\",\n \"criacao\": \"2021-01-15T20:13:39.462Z\"\n}", "language": "json", "name": "201" }, { "code": "{\n \"nome\": \"json_invalido\",\n \"mensagem\": \"Valores ou tipos de campo inválidos\",\n \"erros\": [\n {\n \"chave\": \"enum\",\n \"caminho\": \".body.tipoCob\",\n \"mensagem\": \"deve ser igual a um dos valores predefinidos\"\n }\n ]\n}", "language": "json", "name": "400" } ] } [/block] ## Consultar locations cadastradas Endpoint para consultar locations cadastradas <code>GET/v2​/loc</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.read**) [block:code] { "codes": [ { "code": "{{gn-pix-api}}/v2/loc/?inicio=2020-10-22T16:01:35Z&fim=2020-10-23T16:01:35Z", "language": "json", "name": "Exemplo" } ] } [/block] [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>", "0-1": "Filtra os registros cuja data de criação seja maior ou igual que a data de início. Respeita RFC 3339", "1-1": "Filtra os registros cuja data de criação seja menor ou igual que a data de fim. Respeita RFC 3339.", "0-2": "Sim", "1-2": "Sim", "0-3": "string <date-time>", "1-3": "string <date-time>" }, "cols": 4, "rows": 2 } [/block] ## Recuperar location do payload. Endpoint para consultar locations cadastradas <code>GET/v2​/loc/{id}</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.read**) [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-0": "**id**", "0-1": "Id da location cadastrada para servir um payload", "0-2": "Sim", "0-3": "string" }, "cols": 4, "rows": 1 } [/block] A resposta abaixo representa Sucesso(200) do consumo. [block:code] { "codes": [ { "code": "{\n \"id\": 7716,\n \"txid\": \"fda9460fe04e4f129b72863ae57ee22f\",\n \"location\": \"pix.example.com/qr/v2/cobv/2353c790eefb11eaadc10242ac120002\",\n \"tipoCob\": \"cobv\",\n \"criacao\": \"2020-03-11T21:19:51.013Z\"\n}", "language": "json", "name": "200" } ] } [/block] ## Gerar QrCode de um location Endpoint para gerar QRCode de um location <code>GET/v2​/loc/{id}/qrcode</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.read**) [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "Tipo", "0-3": "string", "0-2": "Sim", "0-1": "Id da location cadastrada para servir um payload", "0-0": "**id**" }, "cols": 4, "rows": 1 } [/block] A resposta abaixo representa Sucesso(200) do consumo. [block:code] { "codes": [ { "code": "{\n \"qrcode\": \"00020126880014BR.GOV.BCB.PIX2566qrcodes-pix.gerencianet.com.b...\",\n \"imagemQrcode\": \"data:image/png;base64,iVBORw0KGgoAAAAOQAAADkCAYAAACIV4s...\"\n}", "language": "json", "name": "200" } ] } [/block] ## Desvincular uma cobrança de uma location Endpoint utilizado para desvincular uma cobrança de uma location. <code>DELETE/v2​/loc/{id}/txid</code>. AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**payloadlocation.write**) Se executado com sucesso, a entidade <code>loc</code> não apresentará mais um txid, se apresentava anteriormente à chamada. Adicionalmente, a entidade <code>cob</code> ou <code>cobv</code> associada ao txid desvinculado também passará a não mais apresentar um location. Esta operação não altera o <code>status</code> da <code>cob</code> ou <code>cobv</code> em questão. [block:parameters] { "data": { "h-0": "Atributo", "h-1": "Descrição", "h-2": "Obrigatório", "h-3": "tipo", "0-3": "string", "0-2": "Sim", "0-1": "Id da location cadastrada para servir um payload", "0-0": "**id**" }, "cols": 4, "rows": 1 } [/block] ## Criar chave evp AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.pix.evp.write**) Endpoint utilizado para criar uma chave Pix aleatória (evp). <code>POST /v2/gn/evp</code> ### Respostas As respostas abaixo representam Sucesso(201) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"chave\": \"345e4568-e89b-12d3-a456-006655440001\"\n}", "language": "json", "name": "201" }, { "code": "{\n \"nome\": \"limite_criacao_chave_atingido\",\n \"mensagem\": \"O limite de criação de chaves foi atingido\"\n}", "language": "json", "name": "400" }, { "code": "{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao solicitar a criação da chave\"\n}", "language": "json", "name": "500" } ] } [/block] ## Listar chaves evp AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.pix.evp.read**) Endpoint utilizado para listar as chaves Pix aleatórias (evp). A listagem somente mostrará as chaves do tipo aleatória. <code>GET /v2/gn/evp</code> ### Respostas As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "{\n \"chaves\": [\n \"355e4568-e89b-1243-a456-006655440001\",\n \"133e4568-e89b-1243-a456-006655440000\"\n ]\n}", "language": "json", "name": "200" }, { "code": "{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao buscar as chaves\"\n}", "language": "json", "name": "500" } ] } [/block] ## Remover chave evp AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.pix.evp.write**) Endpoint utilizado para remover uma chave Pix aleatória (evp). Caso remova uma chave aleatória, não há como criá-la novamente: o uuid é gerado pelo DICT e a cada solicitação de registro de chave, nos é retornado um hash diferente. Isso significa que as cobranças criadas para a chave removida não poderão mais ser pagas, pois o payload não será mais retornado. <code>DELETE /v2/gn/evp/:chave</code> ### Respostas As respostas abaixo representam Sucesso(200) e Falhas/erros do consumo. [block:code] { "codes": [ { "code": "Chave aleatória removida.", "language": "text", "name": "200" }, { "code": "{\n \"nome\": \"chave_nao_encontrada\",\n \"mensagem\": \"A chave informada não foi encontrada\"\n}", "language": "json", "name": "400" }, { "code": "{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao solicitar a exclusão da chave\"\n}", "language": "json", "name": "500" } ] } [/block] ## Buscar o saldo da conta AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.balance.read**) Endpoint com a finalidade de consultar o saldo em sua conta Gerencianet <code>GET/v2/gn/saldo</code>. Você pode habilitar o escopo nas configurações de sua aplicação em sua conta Gerencianet. ### Respostas [block:code] { "codes": [ { "code": "{\n \"saldo\": \"100.00\"\n}", "language": "json", "name": "200" }, { "code": "{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao solicitar o saldo da conta\"\n}", "language": "json", "name": "500" } ] } [/block] ## Criar / modificar configurações da conta AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.settings.write**) Endpoint com a finalidade de criar e modificar as configurações da conta do cliente relacionados à API.<code>PUT /v2/gn/config</code>. [block:code] { "codes": [ { "code": "{\n \"pix\": {\n \"receberSemChave\": true,\n \"chaves\": {\n \"355e4568-e89b-1243-a456-006655440001\": {\n \"recebimento\": {\n \"txidObrigatorio\": false,\n \"qrCodeEstatico\": {\n \"recusarTodos\": false\n }\n }\n }\n }\n }\n}", "language": "json", "name": "Exemplo" } ] } [/block] ### Respostas [block:code] { "codes": [ { "code": "Configurações criados / modificadas", "language": "json", "name": "204" }, { "code": "{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao buscar as configurações da conta\"\n}", "language": "json", "name": "400" }, { "code": "{\n \"nome\": \"erro_aplicacao\",\n \"mensagem\": \"Ocorreu um erro ao validar a chave\"\n}", "language": "json", "name": "500" } ] } [/block] ## Listar configurações da conta AUTHORIZATIONS: [OAUTH2](https://dev.gerencianet.com.br/docs#section-oauth2) (**gn.settings.read**) Endpoint com a finalidade de listar as configurações definidas na conta.<code>GET /v2/gn/config</code>. ### Resposta [block:code] { "codes": [ { "code": "{\n \"pix\": {\n \"receberSemChave\": true,\n \"chaves\": {\n \"355e4568-e89b-1243-a456-006655440001\": {\n \"recebimento\": {\n \"txidObrigatorio\": true,\n \"qrCodeEstatico\": {\n \"recusarTodos\": false\n }\n }\n }\n }\n }\n}", "language": "json", "name": "200" } ] } [/block] ## Fluxogramas ### Criação de uma cobrança dinâmica e montagem do QRCode [block:image] { "images": [ { "image": [ "https://files.readme.io/376b283-Diagrama_API-PIX_-_Fluxograma_9.png", "Diagrama API-PIX - Fluxograma (9).png", 3113, 1635, "#333" ] } ] } [/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] O txid como mencionado deve ser gerado pelo integrador e atender a Regex <code>^[a-zA-Z0-9]{26,35}$</code>. O integrador pode automatizar este processo utilizando algum script ou realiza-lo manualmente. Uma forma de testar se o txid está obedecendo a Regex é utilizar algum site de testes de Regex informando no campo Expressão Regular o <code>^[a-zA-Z0-9]{26,35}$</code> e digitando no campo texto o txid que deseja utilizar. <br> 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]