{
  "info": {
    "_postman_id": "qp-payapi-0001-4a7e-9c21-quickpay001",
    "name": "QuickLink · Pay API",
    "description": "Colección oficial de la **QuickLink Pay API** — una sola integración para **cobrar** y **pagar** sobre los rieles bancarios de Venezuela (Banco Plaza, Bancaribe, Banco Activo, BNC), abstraídos por el switch.\n\n## Configuración rápida\n1. Selecciona el entorno o edita las variables de la colección.\n2. `base_url` → host del API (default `https://pay.quickoffer.io`).\n3. `api_key` → tu llave con formato **`<comercio>:<api_key>`**, p. ej. `uft:sk_test_5f3a...`.\n\n## Autenticación\nTodas las llamadas envían la cabecera **`x-switch-key`** con el valor de `{{api_key}}` (`<comercio>:<api_key>`). Está configurada a nivel de colección y se hereda en cada request.\n\n## Modo test vs. live — lo decide la llave, no tú\nEl **modo lo fija la API key**: `sk_test_…` enruta al ambiente de ensayo (QA / simulado, no mueve dinero real) y `sk_live_…` a producción. **El cliente nunca envía `tenant_id` ni `mode`** en el body: el servidor los deriva de `x-switch-key`. Por eso ningún ejemplo de esta colección los incluye.\n\n## Idempotencia\nCada operación de dinero (`cobrar`, `cobrar/token`, `pagar`) lleva un **`idempotency_key` (UUID)** único. Reintentar con la misma llave nunca duplica el movimiento: devuelve el resultado original. Genera uno nuevo por operación real (puedes usar `{{$guid}}` de Postman).\n\n## Estados asíncronos\nLa liquidación interbancaria (BCV) es asíncrona. Una operación puede quedar `ACEPTADA`/`PENDIENTE` y confirmarse luego como `LIQUIDADA` o `RECHAZADA`. Lee el **estado en el body**, no en el código HTTP. Usa `/consultar` (o un webhook) para el estado final. Ante `DESCONOCIDA`, **consulta antes de reintegrar** — nunca reenvíes la operación original.\n\n## Carpetas\n- **Cobros** — debitar al pagador (C2P / débito inmediato, con OTP de un paso previo).\n- **Pagos** — enviar dinero a un beneficiario; el riel lo elige `via` (`credito_inmediato` | `pago_movil`).\n- **Consultas** — estado de una operación y catálogos (saldo, movimientos, bancos).",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "apikey",
    "apikey": [
      { "key": "key", "value": "x-switch-key", "type": "string" },
      { "key": "value", "value": "{{api_key}}", "type": "string" },
      { "key": "in", "value": "header", "type": "string" }
    ]
  },
  "event": [
    {
      "listen": "test",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Test básico heredado por todas las requests de la colección.",
          "pm.test('status 200', function () {",
          "    pm.response.to.have.status(200);",
          "});",
          "",
          "// La Pay API responde JSON en todos los endpoints.",
          "pm.test('respuesta es JSON', function () {",
          "    pm.response.to.be.json;",
          "});"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "base_url",
      "value": "https://pay.quickoffer.io",
      "type": "string",
      "description": "Host del API. No lo hardcodees en las requests; cámbialo aquí (o por entorno) para apuntar a otro ambiente."
    },
    {
      "key": "api_key",
      "value": "uft:sk_test_5f3a9c1e7b2d4a8f6c0e1d2b3a4f5e6d",
      "type": "string",
      "description": "Llave de servicio con formato `<comercio>:<api_key>`. Usa `sk_test_…` para el ambiente de ensayo (QA/simulado) o `sk_live_…` para producción — el modo lo fija esta llave, no el body."
    }
  ],
  "item": [
    {
      "name": "Cobros",
      "description": "**Debitar al pagador** (C2P / débito inmediato). Suele requerir un **OTP** que emite el banco del pagador: primero `cobrar/token` (paso previo) y luego `cobrar` con el `otp` capturado. El sujeto evaluado por el motor de riesgo es el **pagador**.",
      "item": [
        {
          "name": "cobrar/token — solicitar OTP al banco del pagador",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var r = pm.response.json();",
                  "pm.test('token aceptado (estado ACEPTADA)', function () {",
                  "    pm.expect(r.estado).to.eql('ACEPTADA');",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"c0d187a5-5ff0-4723-871f-e126d938c7a7\",\n  \"monto\": { \"valor\": 320.00, \"moneda\": \"VES\" },\n  \"cobrador\": {\n    \"tipo\": \"cuenta\",\n    \"valor\": \"01380000011234567890\",\n    \"banco\": \"0138\",\n    \"identificacion\": \"J003789447\",\n    \"nombre\": \"UFT\"\n  },\n  \"pagador\": {\n    \"tipo\": \"telefono\",\n    \"valor\": \"04125551234\",\n    \"banco\": \"0105\",\n    \"identificacion\": \"V13759368\",\n    \"nombre\": \"Ana Perez\"\n  },\n  \"concepto\": \"Matricula 2026-1\",\n  \"canal\": \"boton_pago\",\n  \"origen_ip\": \"200.44.32.11\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{base_url}}/switch/v1/cobrar/token",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "cobrar", "token"]
            },
            "description": "Paso **previo** a un cobro con token. El banco del pagador emite un OTP (válido ~120s) que el pagador te dicta. Mismo cuerpo que `/cobrar` pero **sin `otp`**.\n\nNo envíes `tenant_id` ni `mode`: el servidor los deriva de `x-switch-key`.\n\nRespuesta: `Resultado` con `estado: ACEPTADA` (token solicitado). Luego captura el OTP del pagador y llama a **cobrar** con el mismo `idempotency_key` y el `otp`."
          },
          "response": []
        },
        {
          "name": "cobrar — debitar al pagador (con OTP)",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var r = pm.response.json();",
                  "pm.test('estado normalizado presente', function () {",
                  "    pm.expect(r).to.have.property('estado');",
                  "    pm.expect(['ACEPTADA','PENDIENTE','LIQUIDADA','RECHAZADA','ERROR','DESCONOCIDA']).to.include(r.estado);",
                  "});",
                  "pm.test('trae id y banco_usado', function () {",
                  "    pm.expect(r).to.have.property('id');",
                  "    pm.expect(r).to.have.property('banco_usado');",
                  "});",
                  "",
                  "// Guarda el id para encadenar con /consultar.",
                  "if (r && r.id) { pm.collectionVariables.set('ultimo_id', r.id); }"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"c0d187a5-5ff0-4723-871f-e126d938c7a7\",\n  \"monto\": { \"valor\": 320.00, \"moneda\": \"VES\" },\n  \"cobrador\": {\n    \"tipo\": \"cuenta\",\n    \"valor\": \"01380000011234567890\",\n    \"banco\": \"0138\",\n    \"identificacion\": \"J003789447\",\n    \"nombre\": \"UFT\"\n  },\n  \"pagador\": {\n    \"tipo\": \"telefono\",\n    \"valor\": \"04125551234\",\n    \"banco\": \"0105\",\n    \"identificacion\": \"V13759368\",\n    \"nombre\": \"Ana Perez\"\n  },\n  \"concepto\": \"Matricula 2026-1\",\n  \"otp\": \"83920147\",\n  \"canal\": \"boton_pago\",\n  \"origen_ip\": \"200.44.32.11\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{base_url}}/switch/v1/cobrar",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "cobrar"]
            },
            "description": "Ejecuta un **cobro por débito inmediato** (C2P). Incluye el `otp` (8 dígitos) capturado del pagador en el paso `cobrar/token`. Usa el **mismo `idempotency_key`** que el token para encadenar de forma idempotente.\n\nLee el resultado en el campo **`estado`** del body, no en el código HTTP. Posibles estados: `ACEPTADA` / `PENDIENTE` / `LIQUIDADA` / `RECHAZADA` (con `motivo_rechazo` normalizado, p. ej. `OTP_INVALIDO`, `SALDO_INSUFICIENTE`, `BLOQUEO_RIESGO`) / `DESCONOCIDA`.\n\nNo envíes `tenant_id` ni `mode`: los fija `x-switch-key`. El test guarda `id` en `ultimo_id` para encadenar con `/consultar`."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Pagos",
      "description": "**Enviar dinero** a un beneficiario (payout desde tesorería). El riel lo elige **`via`**:\n\n- **`credito_inmediato`** (CCE) — riel **predominante**; admite **teléfono** o **cuenta**. Liquidación BCV asíncrona → `ACEPTADA` y luego `LIQUIDADA` (confírmalo con `/consultar`).\n- **`pago_movil`** (P2P por teléfono) — alterno instantáneo → `LIQUIDADA` (p. ej. reintegros).\n\nRegla: **a cuenta siempre es crédito inmediato**; a teléfono es CCE salvo que pidas `via: pago_movil`. El sujeto evaluado por riesgo es el **beneficiario**.",
      "item": [
        {
          "name": "pagar — via credito_inmediato (a teléfono)",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var r = pm.response.json();",
                  "pm.test('estado normalizado presente', function () {",
                  "    pm.expect(['ACEPTADA','PENDIENTE','LIQUIDADA','RECHAZADA','ERROR','DESCONOCIDA']).to.include(r.estado);",
                  "});",
                  "if (r && r.id) { pm.collectionVariables.set('ultimo_id', r.id); }"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"8d96a4b2-f85a-4e05-af48-5b2eed381095\",\n  \"monto\": { \"valor\": 250.00, \"moneda\": \"VES\" },\n  \"ordenante\": {\n    \"tipo\": \"cuenta\",\n    \"valor\": \"01380000011234567890\",\n    \"banco\": \"0138\",\n    \"identificacion\": \"J003789447\",\n    \"nombre\": \"QuickLink\"\n  },\n  \"beneficiario\": {\n    \"tipo\": \"telefono\",\n    \"valor\": \"04145556677\",\n    \"banco\": \"0134\",\n    \"identificacion\": \"V14589678\",\n    \"nombre\": \"Maria Gonzalez\"\n  },\n  \"concepto\": \"Reintegro pedido 4821\",\n  \"proposito\": \"transferencia\",\n  \"via\": \"credito_inmediato\",\n  \"canal\": \"billetera_digital\",\n  \"origen_ip\": \"200.44.32.11\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{base_url}}/switch/v1/pagar",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "pagar"]
            },
            "description": "Pago por **Crédito Inmediato (CCE)** a un **teléfono** (caso típico, propósito 220). Es el riel **predominante**. Liquida en BCV de forma asíncrona: normalmente responde `ACEPTADA` y luego pasa a `LIQUIDADA` — confírmalo con `/consultar` (el poller también lo confirma con `consultaLiq` ≤20s).\n\n`via: credito_inmediato`, `beneficiario.tipo: telefono`. El `ordenante` es tu cuenta de tesorería (banco `0138`).\n\nNo envíes `tenant_id` ni `mode`: los fija `x-switch-key`."
          },
          "response": []
        },
        {
          "name": "pagar — via credito_inmediato (a cuenta)",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var r = pm.response.json();",
                  "pm.test('estado normalizado presente', function () {",
                  "    pm.expect(['ACEPTADA','PENDIENTE','LIQUIDADA','RECHAZADA','ERROR','DESCONOCIDA']).to.include(r.estado);",
                  "});",
                  "if (r && r.id) { pm.collectionVariables.set('ultimo_id', r.id); }"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"ee6f6993-8c74-4084-87c0-576831752626\",\n  \"monto\": { \"valor\": 1850.00, \"moneda\": \"VES\" },\n  \"ordenante\": {\n    \"tipo\": \"cuenta\",\n    \"valor\": \"01380000011234567890\",\n    \"banco\": \"0138\",\n    \"identificacion\": \"J003789447\",\n    \"nombre\": \"QuickLink\"\n  },\n  \"beneficiario\": {\n    \"tipo\": \"cuenta\",\n    \"valor\": \"01080000099887766554\",\n    \"banco\": \"0108\",\n    \"identificacion\": \"V18234907\",\n    \"nombre\": \"Carlos Rivas\"\n  },\n  \"concepto\": \"Pago proveedor febrero\",\n  \"proposito\": \"proveedor\",\n  \"via\": \"credito_inmediato\",\n  \"canal\": \"merchant\",\n  \"origen_ip\": \"200.44.32.11\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{base_url}}/switch/v1/pagar",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "pagar"]
            },
            "description": "Pago por **Crédito Inmediato (CCE)** a una **cuenta** (20 dígitos). A cuenta **siempre** es crédito inmediato, independientemente de `via`. Liquidación BCV asíncrona → `ACEPTADA` y luego `LIQUIDADA` por consulta.\n\n`beneficiario.tipo: cuenta`, `banco: 0108` (Provincial), `proposito: proveedor`.\n\nNo envíes `tenant_id` ni `mode`: los fija `x-switch-key`."
          },
          "response": []
        },
        {
          "name": "pagar — via pago_movil (P2P a teléfono)",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var r = pm.response.json();",
                  "pm.test('estado normalizado presente', function () {",
                  "    pm.expect(['ACEPTADA','PENDIENTE','LIQUIDADA','RECHAZADA','ERROR','DESCONOCIDA']).to.include(r.estado);",
                  "});",
                  "if (r && r.id) { pm.collectionVariables.set('ultimo_id', r.id); }"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"idempotency_key\": \"c4f75381-8072-4bac-8ac3-86ac8ec4e9f6\",\n  \"monto\": { \"valor\": 90.50, \"moneda\": \"VES\" },\n  \"ordenante\": {\n    \"tipo\": \"cuenta\",\n    \"valor\": \"01380000011234567890\",\n    \"banco\": \"0138\",\n    \"identificacion\": \"J003789447\",\n    \"nombre\": \"QuickLink\"\n  },\n  \"beneficiario\": {\n    \"tipo\": \"telefono\",\n    \"valor\": \"04267778899\",\n    \"banco\": \"0191\",\n    \"identificacion\": \"V20891345\",\n    \"nombre\": \"Luis Mendoza\"\n  },\n  \"concepto\": \"Reintegro parcial\",\n  \"proposito\": \"transferencia\",\n  \"via\": \"pago_movil\",\n  \"canal\": \"billetera_digital\",\n  \"origen_ip\": \"200.44.32.11\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{base_url}}/switch/v1/pagar",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "pagar"]
            },
            "description": "Pago por **Pago Móvil P2P** a un **teléfono** (riel alterno, instantáneo). Útil para reintegros rápidos. Suele responder directamente `LIQUIDADA`.\n\n`via: pago_movil` solo aplica a teléfono; a cuenta el switch usa CCE igualmente. `banco: 0191` (BNC).\n\nNo envíes `tenant_id` ni `mode`: los fija `x-switch-key`."
          },
          "response": []
        }
      ]
    },
    {
      "name": "Consultas",
      "description": "**Estado de una operación** y **catálogos**.\n\n- `consultar` (POST) — estado actualizado de una operación previa por su `id`.\n- `saldo` (GET) — saldo de una cuenta; read-only, no pasa por reglas de pago.\n- `movimientos` (GET) — movimientos para conciliación; `desde` es obligatorio.\n- `bancos` (GET) — bancos habilitados y sus capacidades.\n\n`saldo`, `movimientos` y `bancos` son **GET con query params**; `consultar` es **POST con JSON**.",
      "item": [
        {
          "name": "consultar — estado de una operación",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "var r = pm.response.json();",
                  "pm.test('estado actualizado presente', function () {",
                  "    pm.expect(['ACEPTADA','PENDIENTE','LIQUIDADA','RECHAZADA','ERROR','DESCONOCIDA']).to.include(r.estado);",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "method": "POST",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." },
              { "key": "Content-Type", "value": "application/json", "type": "text" }
            ],
            "body": {
              "mode": "raw",
              "raw": "{\n  \"id\": \"qp_txn_018f3c2a9b7e4d6f8a01b2c3d4e5f607\"\n}",
              "options": { "raw": { "language": "json" } }
            },
            "url": {
              "raw": "{{base_url}}/switch/v1/consultar",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "consultar"]
            },
            "description": "Devuelve el **estado actualizado** (`PENDIENTE` / `LIQUIDADA` / `RECHAZADA`) de una operación previa. Úsalo para confirmar pagos/cobros CCE asíncronos, y **siempre** ante un `DESCONOCIDA` antes de reintegrar.\n\nSolo necesita `id` (el `tenant_id` lo deriva el servidor de `x-switch-key`). Sustituye el `id` por uno real, o usa `{{ultimo_id}}` si encadenas tras un cobro/pago en esta colección.\n\nResponde `404` si el `id` no pertenece a tu comercio."
          },
          "response": []
        },
        {
          "name": "saldo — saldo de una cuenta",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." }
            ],
            "url": {
              "raw": "{{base_url}}/switch/v1/saldo?cuenta=01380000011234567890&moneda=VES&banco=banco_plaza",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "saldo"],
              "query": [
                { "key": "cuenta", "value": "01380000011234567890", "description": "Número de cuenta (20 díg) a consultar." },
                { "key": "moneda", "value": "VES", "description": "ISO-4217. Opcional." },
                { "key": "banco", "value": "banco_plaza", "description": "Hint de banco (clave interna del adaptador). Opcional." }
              ]
            },
            "description": "Saldo de una cuenta cobradora. Consulta **read-only**: no la filtran las reglas de pago (límites/horario/modo).\n\nQuery params: `cuenta` (requerido), `moneda` (opcional), `banco` (hint opcional, p. ej. `banco_plaza`, `bancaribe`, `banco_activo`, `bnc`). Responde `400` si el banco seleccionado no soporta consulta de saldo."
          },
          "response": []
        },
        {
          "name": "movimientos — movimientos para conciliación",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." }
            ],
            "url": {
              "raw": "{{base_url}}/switch/v1/movimientos?cuenta=01380000011234567890&desde=2026-06-01&hasta=2026-06-09&banco=banco_plaza",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "movimientos"],
              "query": [
                { "key": "cuenta", "value": "01380000011234567890", "description": "Número de cuenta (20 díg)." },
                { "key": "desde", "value": "2026-06-01", "description": "Fecha inicio (YYYY-MM-DD). REQUERIDO." },
                { "key": "hasta", "value": "2026-06-09", "description": "Fecha fin (YYYY-MM-DD). Opcional." },
                { "key": "banco", "value": "banco_plaza", "description": "Hint de banco. Opcional." }
              ]
            },
            "description": "Movimientos de una cuenta para conciliación. Consulta **read-only**: no pasa por reglas de pago.\n\nQuery params: `cuenta`, `desde` (**requerido**, `YYYY-MM-DD`), `hasta` (opcional), `banco` (hint opcional). Sin `desde` responde `400 desde_requerido`. Cuidado con los límites de cada banco (Plaza ~24m, Activo mes en curso, Bancaribe paginado)."
          },
          "response": []
        },
        {
          "name": "bancos — catálogo de bancos y capacidades",
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('status 200', function () {",
                  "    pm.response.to.have.status(200);",
                  "});",
                  "",
                  "pm.test('responde un arreglo de bancos', function () {",
                  "    pm.expect(pm.response.json()).to.be.an('array');",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "method": "GET",
            "header": [
              { "key": "x-switch-key", "value": "{{api_key}}", "type": "text", "description": "Auth: <comercio>:<api_key> (sk_test_… o sk_live_…)." }
            ],
            "url": {
              "raw": "{{base_url}}/switch/v1/bancos",
              "host": ["{{base_url}}"],
              "path": ["switch", "v1", "bancos"]
            },
            "description": "Catálogo de **bancos habilitados** y sus **capacidades** (`cobrar`, `pagar`, `saldo`, `movimientos`, …). Útil para descubrir qué rieles/operaciones están disponibles antes de operar. Cacheable (~1×/día).\n\nResponde un arreglo `[{ banco, capabilities: [...] }]`. No lleva body."
          },
          "response": []
        }
      ]
    }
  ]
}
