{"info":{"_postman_id":"48fbc02a-ac57-4dd8-9a59-a717531fcc89","name":"MeuID: Obtendo dados de usuários","description":"<html><head></head><body><p>Requests que compõem o fluxo de integração para acesso dos dados do usuário entre o MeuID e empresas clientes. Esse é o fluxo que deve ser executado após o usuário autorizar que a empresa cliente acesse os dados presentes na carteira do MeuID.</p>\n<p>As requests devem ser feitas no fluxo aqui descrito (1, 2 e, por fim, 3).</p>\n<p>Favor dar atenção especial aos pontos descritos como <strong>Importantes</strong> nas descrições dos endpoints.</p>\n<h1 id=\"pre-requisitos\">Pré-requisitos</h1>\n<p>Para conseguir completar este fluxo é necessário disponibilizar um <strong>endpoint HTTPS</strong> para onde o MeuID enviará os dados de autorização do usuário. </p>\n<p>Esse endpoint será responsável por fazer o processo de obtenção dos dados do usuário descrito neste documento.</p>\n<p>Segue, agora, a descrição detalhada das necessidades dessa rota.</p>\n<h2 id=\"fluxo-com-webhook-x-fluxo-com-webview\">Fluxo com webhook X fluxo com WebView</h2>\n<p>Existem duas formas de criação desse endpoint, que dependem de qual tipo de fluxo a empresa cliente usa no MeuID:</p>\n<ul>\n<li>O fluxo com <strong>webhooks</strong>, onde todo o processo é feito server-side e o usuário não sai do ambiente do app MeuID;</li>\n<li>E o fluxo com <strong>webview</strong>, onde o endpoint referido anteriormente é uma página web para a qual o app MeuID redirecionará o usuário.</li>\n</ul>\n<h3 id=\"fluxo-com-webhook\">Fluxo com webhook</h3>\n<p>Caso a empresa utilize o fluxo com webhook, o endpoint deverá estar presente num serviço web, atendendo as seguintes guidelines:</p>\n<ul>\n<li>O servidor deverá ter SSL, não é suportado fluxo apenas com HTTP;</li>\n<li>A URL do endpoint é de livre escolha, mas ela deverá ser acessível pelo verbo HTTP GET;</li>\n<li>Ela deverá receber pelo menos dois parâmetros obrigatórios:<ul>\n<li><code>code</code>: É o código do processo de autorização do usuário. Servirá de insumo para a obtenção dos dados pessoais;</li>\n<li><code>code_verifier</code>: É um código verificador do processo de autorização. Também servirá de insumo para obtenção dos dados pessoais.</li>\n</ul>\n</li>\n</ul>\n<p>Ao receber esses dados, o back-end deve seguir os passos descritos no restante deste documento.</p>\n<h3 id=\"fluxo-com-webview\">Fluxo com webview</h3>\n<p>Caso a empresa utilize o fluxo com webview, o endpoint descrito deverá ser uma página web que atenda aos seguintes requisitos:</p>\n<ul>\n<li>O servidor deverá ter SSL, não é suportado fluxo apenas com HTTP;</li>\n<li>Ela deverá receber pelo menos dois parâmetros obrigatórios:<ul>\n<li><code>code</code>: É o código do processo de autorização do usuário. Servirá de insumo para a obtenção dos dados pessoais;</li>\n<li><code>code_verifier</code>: É um código verificador do processo de autorização. Também servirá de insumo para obtenção dos dados pessoais.</li>\n</ul>\n</li>\n</ul>\n<h4 id=\"importante\">IMPORTANTE</h4>\n<p>Após receber esses dados, a página deve <strong>enviá-los para um back-end da empresa cliente</strong>, para que esse back-end siga os passos descritos no restante deste documento.\nIsso é de <strong>extrema importância</strong>, para que a combinação de dados sigilosa de <strong>clientId</strong>/<strong>secret</strong> da empresa cliente não fique exposta na internet.</p>\n</body></html>","schema":"https://schema.getpostman.com/json/collection/v2.0.0/collection.json","toc":[{"content":"Pré-requisitos","slug":"pre-requisitos"}],"owner":"3977334","collectionId":"48fbc02a-ac57-4dd8-9a59-a717531fcc89","publishedId":"SzYUa21Q","public":true,"customColor":{"top-bar":"FFFFFF","right-sidebar":"303030","highlight":"5500FF"},"publishDate":"2020-03-26T17:00:49.000Z"},"item":[{"name":"1. Obter token de acesso aos dados do usuário","id":"73eeb643-67ba-48a6-b450-670dfc041851","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"authorization_code\": \"{{code}}\",\n    \"grant_type\": \"authorization_code\",\n    \"client_id\": \"{{client_id}}\",\n    \"client_secret\": \"{{client_secret}}\",\n    \"code_verifier\": \"{{code_verifier}}\"\n}"},"url":"https://api-v3.idwall.co/token","description":"<p>Request onde é feita a troca do código de autorização (<code>code</code>) obtido anteriormente pelo token de acesso (<code>access_token</code>) aos dados do usuário.</p>\n<h2 id=\"payload\">Payload</h2>\n<p><em>Os campos indicados como 'fixo' não devem ser alterados.</em></p>\n<ul>\n<li><code>authorization_code</code>: Código de autorização (<code>code</code>) recebido do fluxo anterior.</li>\n<li><code>grant_type</code> <em>(fixo)</em>: Valor que indica o tipo de autorização que foi feita.</li>\n<li><code>client_id</code> <em>(fixo)</em>: Identificador interno (<code>appId</code>) da sua empresa na plataforma da idwall.</li>\n<li><code>client_secret</code> <em>(fixo)</em>: Identificador privado da sua empresa na plataforma da idwall.</li>\n<li><code>code_verifier</code>: Código de verificação de segurança recebido do fluxo anterior. <strong>Seu envio só é obrigatório caso tenha sido recebido do fluxo anterior</strong>.</li>\n</ul>\n<h2 id=\"resposta\">Resposta</h2>\n<ul>\n<li>HTTP <strong>200</strong></li>\n<li>JSON contendo um campo <code>access_token</code> e um campo <code>refresh_token</code>. Ex.:</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"access_token\": \"eyJhbGciOiJSUzI1Ni...2Np6HLCKp_Ua4cGiww\",\n    \"refresh_token\": \"wxnyzLzcJPivqm...tTkmaAuUNoakNjQSZqgkJ\",\n    \"expires_at\": \"Tue Nov 12 15:32:17 UTC 2019\",\n    \"token_type\": \"Bearer\"\n}\n</code></pre>\n<h1 id=\"observações-importantes\">Observações importantes</h1>\n<ul>\n<li>O campo <code>access_token</code> contém o <strong>token de autorização</strong> que deverá ser utilizado para <strong>obter os dados do cliente</strong> (na request <em>2. Obter dados</em>).</li>\n<li>Por razões de <strong>segurança no processo</strong>, o token retornado em <code>access_token</code> tem um <strong>curto tempo de expiração</strong> (<strong>120 segundos</strong>). </li>\n<li>É possível <strong>obter um novo</strong> <code>access_token</code> utilizando o token <code>refresh_token</code>. Esse processo é descrito na request <em>3. Obtendo novo access_token</em>.</li>\n<li>O token <code>refresh_token</code> tem um <strong>tempo de expiração maior</strong> (que é o tempo configurado no cadastro da sua empresa). A data final de expiração do <code>refresh_token</code> é retornada no campo <code>expires_at</code> deste endpoint.</li>\n<li>Passado o tempo de expiração do <code>refresh_token</code>, é necessário <strong>repetir o processo de autorização do usuário</strong> para obtenção de <strong>novas credenciais</strong> (<code>access_token</code> e <code>refresh_token</code>).</li>\n</ul>\n","urlObject":{"path":["token"],"host":["https://api-v3.idwall.co"],"query":[],"variable":[]}},"response":[{"id":"ec4f6d16-92b9-423e-9517-db49f7b4db59","name":"Sucesso","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"authorization_code\": \"{{code}}\",\n    \"grant_type\": \"authorization_code\",\n    \"client_id\": \"{{client_id}}\",\n    \"client_secret\": \"{{client_secret}}\",\n    \"code_verifier\": \"{{code_verifier}}\"\n}","options":{"raw":{"language":"json"}}},"url":"https://api-v3.idwall.co/token"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n\t\"access_token\": \"{{access_token_value}}\"\n}"}],"_postman_id":"73eeb643-67ba-48a6-b450-670dfc041851"},{"name":"2. Obter dados","id":"56c199b7-ecab-4436-b0e7-335f77bb1dce","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"GET","header":[{"key":"Authorization","type":"text","value":"{{valor de 'access_token' aqui}}"}],"url":"https://api-v3.idwall.co/meuid/data","description":"<p>Request onde é feita a obtenção em si dos dados pessoais do usuário.</p>\n<h2 id=\"headers\">Headers</h2>\n<ul>\n<li><code>Authorization</code>: O valor de <code>access_token</code> recebido na request anterior (<em>1. Obter código de acesso aos dados</em>).</li>\n</ul>\n<h2 id=\"resposta\">Resposta</h2>\n<ul>\n<li>HTTP <strong>200</strong></li>\n<li>Body contendo os dados aos quais o usuário permitiu acesso.</li>\n</ul>\n<h1 id=\"observações-importantes\">Observações importantes</h1>\n<ul>\n<li>Por mais que no exemplo de resposta dessa request nós tenhamos disponiblizado o formato completo de retorno dos dados do usuário (com todos os dados possíveis), no caso de uso real serão retornados <strong>apenas os dados aos quais o usuário permitiu o acesso</strong>.</li>\n</ul>\n","urlObject":{"path":["meuid","data"],"host":["https://api-v3.idwall.co"],"query":[],"variable":[]}},"response":[{"id":"1c1e5f0c-a691-4f48-b805-608a61697e0d","name":"Sucesso","originalRequest":{"method":"GET","header":[{"key":"Authorization","value":"{{access-token}}","type":"text"}],"url":"https://api-v3.idwall.co/meuid/data"},"_postman_previewlanguage":"json","header":[],"cookie":[],"responseTime":null,"body":"{\n    \"data\": {\n        \"personal\": {\n            \"email\": \"\",\n            \"phoneNumber\": \"\"\n        },\n        \"biometric\": {\n            \"faceImageUrl\": \"\"\n        },\n        \"document\": {\n            \"rg\": {\n                \"numeroRg\": \"\",\n                \"birthDate\": \"\",\n                \"name;\": \"\",\n                \"dataExpedicao\": \"\",\n                \"fathersName\": \"\",\n                \"mothersName\": \"\",\n                \"cidadeNascimento\": \"\",\n                \"numeroCpf\": \"\",\n                \"orgaoExpeditor\": \"\",\n                \"ufExpedicao\": \"\",\n                \"imageUrls\": [\n                    {\n                        \"type\": \"FRONT\",\n                        \"url\": \"https://url-da-imagem.com.br/rg-front.jpg\"\n                    },\n                    {\n                        \"type\": \"BACK\",\n                        \"url\": \"https://url-da-imagem.com.br/rg-back.jpg\"\n                    }\n                ]\n            },\n            \"cnh\": {\n                \"acc\": \"\",\n                \"registro\": \"\",\n                \"espelhoFrente\": \"\",\n                \"espelhoVerso\": \"\",\n                \"seguranca\": \"\",\n                \"renach\": \"\",\n                \"categoria\": \"\",\n                \"dataExpiracao\": \"\",\n                \"primeiraHabilitacao\": \"\",\n                \"dataExpedicao\": \"\",\n                \"ufExpedicao\": \"\",\n                \"ufExpedicaoRg\": \"\",\n                \"orgaoEmissorRg\": \"\",\n                \"numeroCpf\": \"\",\n                \"numeroRg\": \"\",\n                \"name\": \"\",\n                \"birthDate\": \"\",\n                \"mothersName\": \"\",\n                \"fathersName\": \"\",\n                \"cidadeExpedicao\": \"\",\n                \"permissao\": \"\",\n                \"observacao\": \"\",\n                \"imageUrls\": [\n                    {\n                        \"type\": \"FULL\",\n                        \"url\": \"https://url-da-imagem.com.br/cnh-full.jpg\"\n                    }\n                ]\n            },\n            \"crm\": {\n                \"numero\": \"\",\n                \"uf\": \"\"\n            }\n        }\n    }\n}"}],"_postman_id":"56c199b7-ecab-4436-b0e7-335f77bb1dce"},{"name":"3. Obtendo novo access_token","id":"0d5db4c4-f44a-4f09-9c06-352e2c0252e2","protocolProfileBehavior":{"disableBodyPruning":true},"request":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","type":"text","value":"application/json"}],"body":{"mode":"raw","raw":"{\n    \"refresh_token\": {{valor de 'refresh_token' aqui}},\n    \"grant_type\": \"refresh_token\",\n    \"client_id\": \"3a46ec5a-b463-4069-bb9f-138715901d9d\",\n    \"client_secret\": \"{{application-secret}}\"\n}"},"url":"https://api-v3.idwall.co/token","description":"<p>Request onde é feita a obtenção de um novo token de acesso aos dados (<code>access_token</code>) a partir de um <code>refresh_token</code> ainda válido.</p>\n<h2 id=\"payload\">Payload</h2>\n<p><em>Os campos indicados como 'fixo' não devem ser alterados.</em></p>\n<ul>\n<li><code>refresh_token</code>: Valor de <code>refresh_token</code>, ainda válido, obtido na request <em>2. Obter código de acesso aos dados</em>.</li>\n<li><code>grant_type</code> <em>(fixo)</em>: Valor que indica o tipo de autorização que foi feita.</li>\n<li><code>client_id</code> <em>(fixo)</em>: Identificador interno (<code>appId</code>) da sua empresa na plataforma da idwall.</li>\n<li><code>client_secret</code> <em>(fixo)</em>: Identificador privado da sua empresa na plataforma da idwall.</li>\n</ul>\n<h2 id=\"resposta\">Resposta</h2>\n<ul>\n<li>HTTP <strong>200</strong></li>\n<li>JSON contendo um campo <code>access_token</code>. Ex.:</li>\n</ul>\n<pre class=\"click-to-expand-wrapper is-snippet-wrapper\"><code class=\"language-json\">{\n    \"access_token\": \"eyJhbGciOiJSUzI1Ni...2Np6HLCKp_Ua4cGiww\",\n    \"expires_at\": \"Tue Nov 12 15:32:17 UTC 2019\",\n    \"token_type\": \"Bearer\"\n}\n</code></pre>\n<h1 id=\"observações-importantes\">Observações importantes</h1>\n<ul>\n<li>No campo <code>access_token</code> é retornado um <strong>novo código de acesso</strong> aos dados, válido por <strong>mais 120 segundos</strong>.</li>\n<li>Ao contrário do endpoint <em>1. Obter código de acesso</em>, o campo <code>expires_at</code> da resposta desse endpoint contém a <strong>data de expiração do código de acesso (</strong><code>access_token</code><strong>) gerado</strong>.</li>\n</ul>\n","urlObject":{"path":["token"],"host":["https://api-v3.idwall.co"],"query":[],"variable":[]}},"response":[{"id":"12d5665f-a093-4bfd-afd4-58d76e141332","name":"Sucesso","originalRequest":{"method":"POST","header":[{"key":"Content-Type","name":"Content-Type","value":"application/json","type":"text"}],"body":{"mode":"raw","raw":"{\n    \"refresh_token\": {{valor de 'refresh_token' aqui}},\n    \"grant_type\": \"refresh_token\",\n    \"client_id\": \"{{ambev-application-id}}\",\n    \"client_secret\": \"{{ambev-application-secret}}\"\n}"},"url":"https://api-v3.idwall.co/token"},"status":"OK","code":200,"_postman_previewlanguage":"json","header":[{"key":"Date","value":"Thu, 07 Nov 2019 18:18:29 GMT"},{"key":"Content-Type","value":"application/json;charset=ISO-8859-1"},{"key":"Transfer-Encoding","value":"chunked"},{"key":"Connection","value":"keep-alive"},{"key":"Vary","value":"Accept-Encoding"},{"key":"Access-Control-Allow-Origin","value":"https://auth.idwall.co"},{"key":"Access-Control-Allow-Methods","value":"GET, POST, PUT, DELETE, OPTIONS"},{"key":"Access-Control-Allow-Headers","value":"Authorization, Content-type"},{"key":"Access-Control-Allow-Credentials","value":"true"},{"key":"X-Content-Type-Options","value":"nosniff"},{"key":"X-XSS-Protection","value":"1; mode=block"},{"key":"Cache-Control","value":"no-cache, no-store, max-age=0, must-revalidate"},{"key":"Pragma","value":"no-cache"},{"key":"Expires","value":"0"},{"key":"X-Frame-Options","value":"DENY"},{"key":"IDW-Request-ID","value":"de2bd07e-001a-47dc-b3c2-4d01dc02a749"},{"key":"Content-Encoding","value":"gzip"},{"key":"CF-Cache-Status","value":"DYNAMIC"},{"key":"Expect-CT","value":"max-age=604800, report-uri=\"https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct\""},{"key":"Server","value":"cloudflare"},{"key":"CF-RAY","value":"53214f5a7e724c2e-GRU"}],"cookie":[],"responseTime":null,"body":"{\n    \"access_token\": \"eyJhbGciOiJSUzI1...AzJBhjWracg2PO1osnIazA\",\n    \"expires_at\": \"Thu Nov 07 18:20:29 UTC 2019\",\n    \"token_type\": \"Bearer\"\n}"}],"_postman_id":"0d5db4c4-f44a-4f09-9c06-352e2c0252e2"}],"event":[{"listen":"prerequest","script":{"id":"6ec374f5-a9a1-4eac-b58a-91c4f18c2c82","type":"text/javascript","exec":[""]}},{"listen":"test","script":{"id":"4379b995-6e92-4a2d-9a06-e2cf6d9b02b8","type":"text/javascript","exec":[""]}}],"variable":[{"key":"idwall-api-host","value":"https://api-v3.idwall.co"},{"key":"application-id","value":"3a46ec5a-b463-4069-bb9f-138715901d9d"},{"key":"redirect-uri","value":"https://vending-machine.ambev.com/redirect"}]}