{
  "info": {
    "name": "ConnectTEF SmartPOS - Integrador",
    "description": "Collection gerada automaticamente pelo script `npm run postman:generate`.\n\nObjetivo: guiar a Soft House no fluxo principal de integracao SmartPOS, com apenas as quatro rotas essenciais: identificar o SmartPOS via QR Code, criar pagamento, solicitar estorno e solicitar impressao.\n\nAntes de usar: configure `baseUrl`, `apiKey` e `documentoCliente`. Gere o QR Code, exiba-o no seu sistema e aguarde o webhook `smartpos.identificado`. Depois copie o `dados.smartposId` recebido para a variavel `smartposId`.\n\nCom API Key de teste, o ConnectTEF envia SmartPOS virtuais ao webhook para que a integracao possa seguir sem uma maquininha em maos.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api.connecttef.com.br",
      "description": "URL base da API ConnectTEF."
    },
    {
      "key": "apiKey",
      "value": "",
      "description": "API Key de teste ou producao gerada no Portal do parceiro."
    },
    {
      "key": "documentoCliente",
      "value": "<cpf_ou_cnpj_do_cliente_cadastrado>",
      "description": "CPF ou CNPJ do cliente que possui o SmartPOS."
    },
    {
      "key": "referenciaIdentificacao",
      "value": "loja-123-pdv-001",
      "description": "Valor interno do integrador para correlacionar quem gerou o QR Code, como loja, PDV, operador, sessao ou atendimento."
    },
    {
      "key": "qrCode",
      "value": "",
      "description": "Valor retornado por POST /qrcode. Renderize este valor como QR Code visual no seu sistema."
    },
    {
      "key": "qrCodeExpiresAt",
      "value": "",
      "description": "Timestamp Unix de expiracao do QR Code."
    },
    {
      "key": "smartposId",
      "value": "POS-HML-APROVADO",
      "description": "Identificador recebido em dados.smartposId no webhook smartpos.identificado."
    },
    {
      "key": "referenciaPagamento",
      "value": "550e8400-e29b-41d4-a716-446655440000",
      "description": "Referencia unica da tentativa de pagamento."
    },
    {
      "key": "referenciaEstorno",
      "value": "0f8fad5b-d9cb-469f-a165-70867728950e",
      "description": "Referencia unica da tentativa de estorno."
    },
    {
      "key": "referenciaImpressao",
      "value": "9f1c2d3e-4b5a-4678-9abc-0d1e2f3a4b5c",
      "description": "Referencia unica da tentativa de impressao."
    },
    {
      "key": "codigoAutorizacao",
      "value": "AUTH-HML-APROVADO",
      "description": "Campo dados.autorizacao.codigo recebido no webhook pagamento.aprovado."
    },
    {
      "key": "numeroTransacao",
      "value": "NSU-HML-APROVADO",
      "description": "Campo dados.autorizacao.numeroTransacao recebido no webhook pagamento.aprovado."
    },
    {
      "key": "dadosFinalizacao",
      "value": "NSU-HML-APROVADO|AUTH-HML-APROVADO|AUTH-HML-APROVADO",
      "description": "Campo dados.autorizacao.dadosFinalizacao recebido no webhook pagamento.aprovado."
    },
    {
      "key": "tipoPagamento",
      "value": "credito",
      "description": "Campo dados.autorizacao.tipoPagamento recebido no webhook pagamento.aprovado."
    },
    {
      "key": "conteudoImpressaoBase64",
      "value": "Q09NUFJPVkFOVEUgQ09OTkVDVFRFRg==",
      "description": "Conteudo que sera enviado ao SmartPOS para impressao."
    }
  ],
  "item": [
    {
      "name": "01. Identificar SmartPOS",
      "item": [
        {
          "name": "Gerar QR Code",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-api-key",
                "value": "{{apiKey}}",
                "description": "API key da revenda para rotas novas de integrador."
              }
            ],
            "description": "Cria uma solicitacao de identificacao do SmartPOS do cliente.\n\nUse o valor retornado em `qrCode` para renderizar um QR Code visual na tela do seu sistema. O cliente deve abrir o Connect TEF no SmartPOS que sera usado nas operacoes e ler esse QR Code.\n\nDepois da leitura, a API envia o evento `smartpos.identificado` para o webhook configurado no Portal do parceiro. Copie o `dados.smartposId` recebido nesse webhook para a variavel `smartposId` desta collection.\n\n`referencia` e um valor interno do seu sistema para correlacionar quem gerou o QR Code. Pode ser o ID da loja, PDV, operador, sessao ou atendimento.\n\nCom API Key de teste, a API simula a leitura e envia dois SmartPOS virtuais para o webhook: `POS-HML-APROVADO` e `POS-HML-FALHA`.",
            "url": {
              "raw": "{{baseUrl}}/qrcode",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "qrcode"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"documentoCliente\": \"{{documentoCliente}}\",\n  \"referencia\": \"{{referenciaIdentificacao}}\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Exemplo",
              "originalRequest": {},
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"qrCode\": \"QR#22b02ed1-fe3c-42b5-9caa-b28f42829a92\",\n  \"referencia\": \"loja-123-pdv-001\",\n  \"expiresAt\": 1787721848\n}"
            }
          ],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const json = pm.response.json();",
                  "if (json.qrCode) pm.collectionVariables.set(\"qrCode\", json.qrCode);",
                  "if (json.referencia) pm.collectionVariables.set(\"referenciaIdentificacao\", json.referencia);",
                  "if (json.expiresAt) pm.collectionVariables.set(\"qrCodeExpiresAt\", String(json.expiresAt));"
                ]
              }
            }
          ]
        }
      ]
    },
    {
      "name": "02. Operar SmartPOS",
      "item": [
        {
          "name": "Criar pagamento",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-api-key",
                "value": "{{apiKey}}",
                "description": "API key da revenda para rotas novas de integrador."
              }
            ],
            "description": "Solicita um pagamento para o SmartPOS identificado.\n\nPreencha `smartposId` com o valor recebido no webhook `smartpos.identificado`. A resposta deste request confirma apenas que a operacao foi aceita/enviada; a decisao final da venda deve ser tomada pelo webhook `pagamento.aprovado` ou `pagamento.recusado`.\n\nEm testes, use `POS-HML-APROVADO` para simular aprovacao ou `POS-HML-FALHA` para simular falha operacional.",
            "url": {
              "raw": "{{baseUrl}}/v1/payments",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "payments"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"referencia\": \"{{referenciaPagamento}}\",\n  \"documentoCliente\": \"{{documentoCliente}}\",\n  \"smartposId\": \"{{smartposId}}\",\n  \"valorCentavos\": 200,\n  \"formaPagamento\": \"credito\",\n  \"parcelas\": 1,\n  \"modoExecucao\": \"imediato\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Exemplo",
              "originalRequest": {},
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"referencia\": \"550e8400-e29b-41d4-a716-446655440000\",\n  \"status\": \"processando\",\n  \"mensagem\": \"Pagamento enviado ao SmartPOS.\",\n  \"targets\": [\n    {\n      \"smartposId\": \"POS-HML-APROVADO\",\n      \"status\": \"enviado\"\n    }\n  ]\n}"
            }
          ],
          "event": []
        },
        {
          "name": "Estornar pagamento",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-api-key",
                "value": "{{apiKey}}",
                "description": "API key da revenda para rotas novas de integrador."
              }
            ],
            "description": "Solicita o estorno de um pagamento aprovado.\n\nUse o mesmo `smartposId` que executou o pagamento original e preencha os dados de autorizacao recebidos no webhook `pagamento.aprovado`: `codigoAutorizacao`, `numeroTransacao`, `dadosFinalizacao` e `tipoPagamento`.\n\nAssim como no pagamento, a resposta inicial nao conclui o estorno. A conclusao chega por webhook.",
            "url": {
              "raw": "{{baseUrl}}/v1/refunds",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "refunds"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"referencia\": \"{{referenciaEstorno}}\",\n  \"documentoCliente\": \"{{documentoCliente}}\",\n  \"smartposId\": \"{{smartposId}}\",\n  \"valorCentavos\": 200,\n  \"pagamentoOriginal\": {\n    \"codigoAutorizacao\": \"{{codigoAutorizacao}}\",\n    \"numeroTransacao\": \"{{numeroTransacao}}\",\n    \"dadosFinalizacao\": \"{{dadosFinalizacao}}\",\n    \"tipoPagamento\": \"{{tipoPagamento}}\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Exemplo",
              "originalRequest": {},
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"referencia\": \"0f8fad5b-d9cb-469f-a165-70867728950e\",\n  \"status\": \"processando\",\n  \"mensagem\": \"Estorno enviado ao SmartPOS.\",\n  \"smartposId\": \"POS-HML-APROVADO\",\n  \"targets\": [\n    {\n      \"smartposId\": \"POS-HML-APROVADO\",\n      \"status\": \"enviado\"\n    }\n  ]\n}"
            }
          ],
          "event": []
        },
        {
          "name": "Solicitar impressao",
          "request": {
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "x-api-key",
                "value": "{{apiKey}}",
                "description": "API key da revenda para rotas novas de integrador."
              }
            ],
            "description": "Envia um conteudo em Base64 para impressao no SmartPOS identificado.\n\nUse esta rota para comprovantes, vias adicionais ou textos operacionais que precisam sair na impressora do SmartPOS. Informe o `smartposId` recebido no fluxo de identificacao.\n\nA resposta inicial confirma o envio. A conclusao ou falha da impressao chega por webhook.",
            "url": {
              "raw": "{{baseUrl}}/v1/print-jobs",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "v1",
                "print-jobs"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"referencia\": \"{{referenciaImpressao}}\",\n  \"documentoCliente\": \"{{documentoCliente}}\",\n  \"smartposId\": \"{{smartposId}}\",\n  \"conteudo\": {\n    \"tipo\": \"base64\",\n    \"base64\": \"{{conteudoImpressaoBase64}}\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": [
            {
              "name": "Exemplo",
              "originalRequest": {},
              "status": "OK",
              "code": 200,
              "header": [
                {
                  "key": "Content-Type",
                  "value": "application/json"
                }
              ],
              "body": "{\n  \"referencia\": \"9f1c2d3e-4b5a-4678-9abc-0d1e2f3a4b5c\",\n  \"status\": \"processando\",\n  \"mensagem\": \"Impressao enviada ao SmartPOS.\",\n  \"smartposId\": \"POS-HML-APROVADO\",\n  \"targets\": [\n    {\n      \"smartposId\": \"POS-HML-APROVADO\",\n      \"status\": \"enviado\"\n    }\n  ]\n}"
            }
          ],
          "event": []
        }
      ]
    }
  ]
}
