{
  "info": {
    "_postman_id": "efxpay-mobile-api-v1",
    "name": "EFXPay Mobile API",
    "description": "Coleção para testar a API EFXPay `/api/v1` (consumo mobile).\n\nVariáveis:\n- `base_url` — ex. http://localhost:8000\n- `jwt` — preenchido automaticamente após Login\n- `idempotency_key` — gerado no Pre-request das rotas PIX\n\nContrato: openapi.mobile.yaml",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "variable": [
    { "key": "base_url", "value": "http://localhost:8000" },
    { "key": "jwt", "value": "" },
    { "key": "idempotency_key", "value": "" },
    { "key": "onboarding_id", "value": "" },
    { "key": "transaction_id", "value": "" }
  ],
  "auth": {
    "type": "bearer",
    "bearer": [{ "key": "token", "value": "{{jwt}}", "type": "string" }]
  },
  "item": [
    {
      "name": "Auth",
      "item": [
        {
          "name": "Login",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 200) {",
                  "  const j = pm.response.json();",
                  "  pm.collectionVariables.set('jwt', j.access_token);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [{ "key": "Accept", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"email\": \"seu@email.com\",\n  \"password\": \"sua-senha\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": "{{base_url}}/api/v1/auth/login"
          }
        },
        {
          "name": "Logout",
          "request": {
            "method": "POST",
            "url": "{{base_url}}/api/v1/auth/logout"
          }
        }
      ]
    },
    {
      "name": "Accounts",
      "item": [
        {
          "name": "Me",
          "request": { "method": "GET", "url": "{{base_url}}/api/v1/accounts/me" }
        },
        {
          "name": "Balance",
          "request": { "method": "GET", "url": "{{base_url}}/api/v1/accounts/balance" }
        },
        {
          "name": "Statement",
          "request": {
            "method": "GET",
            "url": {
              "raw": "{{base_url}}/api/v1/accounts/statement?start_date=&end_date=",
              "host": ["{{base_url}}"],
              "path": ["api", "v1", "accounts", "statement"],
              "query": [
                { "key": "start_date", "value": "" },
                { "key": "end_date", "value": "" }
              ]
            }
          }
        }
      ]
    },
    {
      "name": "PIX",
      "item": [
        {
          "name": "Send PIX",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "pm.collectionVariables.set('idempotency_key', pm.variables.replaceIn('{{$guid}}'));"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 200) {",
                  "  pm.collectionVariables.set('transaction_id', pm.response.json().transaction_id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "Idempotency-Key", "value": "{{idempotency_key}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"pix_key\": \"destino@email.com\",\n  \"amount\": 0.01,\n  \"description\": \"Teste Postman\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": "{{base_url}}/api/v1/pix/send"
          }
        },
        {
          "name": "Charge QR (dynamic)",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "pm.collectionVariables.set('idempotency_key', pm.variables.replaceIn('{{$guid}}'));"
                ],
                "type": "text/javascript"
              }
            },
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 200) {",
                  "  pm.collectionVariables.set('transaction_id', pm.response.json().transaction_id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "Idempotency-Key", "value": "{{idempotency_key}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"dynamic\",\n  \"amount\": 1.00,\n  \"description\": \"Cobrança teste\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": "{{base_url}}/api/v1/pix/charge"
          }
        },
        {
          "name": "Charge QR (static)",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "exec": [
                  "pm.collectionVariables.set('idempotency_key', pm.variables.replaceIn('{{$guid}}'));"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "Idempotency-Key", "value": "{{idempotency_key}}" },
              { "key": "Content-Type", "value": "application/json" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"type\": \"static\",\n  \"amount\": 5.00\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": "{{base_url}}/api/v1/pix/charge"
          }
        },
        {
          "name": "Get transaction",
          "request": {
            "method": "GET",
            "url": "{{base_url}}/api/v1/pix/{{transaction_id}}"
          }
        }
      ]
    },
    {
      "name": "PIX Keys",
      "item": [
        {
          "name": "List keys",
          "request": { "method": "GET", "url": "{{base_url}}/api/v1/pix/keys" }
        },
        {
          "name": "Create key (EVP)",
          "request": {
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"key_type\": \"EVP_ENDERECO_VIRTUAL_DE_PAGAMENTO\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": "{{base_url}}/api/v1/pix/keys"
          }
        },
        {
          "name": "Delete key",
          "request": {
            "method": "DELETE",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"key\": \"chave@email.com\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": "{{base_url}}/api/v1/pix/keys"
          }
        }
      ]
    },
    {
      "name": "Onboarding",
      "item": [
        {
          "name": "Start PF",
          "event": [
            {
              "listen": "test",
              "script": {
                "exec": [
                  "if (pm.response.code === 201) {",
                  "  const j = pm.response.json();",
                  "  pm.collectionVariables.set('onboarding_id', j.id || j.data?.id);",
                  "}"
                ],
                "type": "text/javascript"
              }
            }
          ],
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "header": [{ "key": "Content-Type", "value": "application/json" }],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"name\": \"Nome Teste\",\n  \"email\": \"novo@email.com\",\n  \"password\": \"SenhaForte123!\",\n  \"password_confirmation\": \"SenhaForte123!\",\n  \"document\": \"12345678901\",\n  \"phone\": \"11999999999\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": "{{base_url}}/api/v1/onboarding/pf"
          }
        },
        {
          "name": "Show application",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": "{{base_url}}/api/v1/onboarding/{{onboarding_id}}"
          }
        },
        {
          "name": "Lookup CEP",
          "request": {
            "auth": { "type": "noauth" },
            "method": "GET",
            "url": "{{base_url}}/api/v1/onboarding/cep/01310100"
          }
        },
        {
          "name": "Sync",
          "request": {
            "auth": { "type": "noauth" },
            "method": "POST",
            "url": "{{base_url}}/api/v1/onboarding/{{onboarding_id}}/sync"
          }
        }
      ]
    }
  ]
}
