{
  "item": [
    {
      "name": "Cuenta",
      "description": "",
      "item": [
        {
          "name": "Saldos disponibles",
          "request": {
            "name": "Saldos disponibles",
            "description": {
              "content": "Saldo disponible de la empresa dueña de la llave, una fila por moneda.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-saldos/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "balances"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Límites de la cuenta",
          "request": {
            "name": "Límites de la cuenta",
            "description": {
              "content": "Monto máximo por operación, si existe uno fijo para la empresa, y rieles habilitados. Un riel fuera de `rails` no se puede usar.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-limites/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "limits"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Cuentas para recibir",
          "request": {
            "name": "Cuentas para recibir",
            "description": {
              "content": "Cuentas de la empresa para recibir fondos. Los campos que no apliquen a un tipo de cuenta llegan en null.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-cuentas-para-recibir/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "receiving-accounts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Abrir una cuenta para recibir",
          "request": {
            "name": "Abrir una cuenta para recibir",
            "description": {
              "content": "Abre una cuenta de la empresa en una moneda, si tu empresa tiene esa moneda activada. Hay una por moneda: si ya existe, responde 200 con esa misma cuenta y `already_existed: true`, nunca abre otra. Exige `Idempotency-Key` y firma. 201 si se abrió; 202 si aún no se confirma: repite con la misma clave.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/abrir-cuenta-para-recibir/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "receiving-accounts"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"currency\": \"USD\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Wallets de la empresa",
          "request": {
            "name": "Wallets de la empresa",
            "description": {
              "content": "Las wallets de la empresa dueña de la llave, con su red y su saldo disponible. Sólo consulta: las wallets no se crean ni se modifican por API. Una red puede tener más de una wallet. La suma por moneda es lo que da `GET /v1/balances`, salvo redondeo al centavo. Lo apartado por compras con tarjeta se descuenta primero de la wallet con más saldo. Para recibir fondos usa `GET /v1/deposit-addresses`.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-wallets/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "wallets"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Beneficiarios",
      "description": "",
      "item": [
        {
          "name": "Beneficiarios",
          "request": {
            "name": "Beneficiarios",
            "description": {
              "content": "Beneficiarios de la empresa, con su estado. Paginación por cursor.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-beneficiarios/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "beneficiaries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Filas por página, de 1 a 100. Por omisión, 25.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Valor de `next_cursor` de la página anterior.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": ""
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Alta de beneficiario, pendiente de aprobar en el panel",
          "request": {
            "name": "Alta de beneficiario, pendiente de aprobar en el panel",
            "description": {
              "content": "Da de alta una cuenta destino. Nace pendiente y se aprueba en el panel, nunca por API: una llave robada no paga a un destino nuevo. Exige `Idempotency-Key` y firma. 201 si el alta quedó registrada; 202 si aún no se confirma: repite con la misma clave.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/crear-beneficiario/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "beneficiaries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"rail\": \"mxn_spei\",\n  \"holder_name\": \"PROVEEDOR FICTICIO SA DE CV\",\n  \"clabe\": \"999180000000000011\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Baja de beneficiario",
          "request": {
            "name": "Baja de beneficiario",
            "description": {
              "content": "Da de baja un beneficiario. Exige `Idempotency-Key` y firma. 202 si la baja aún no se confirma: repite con la misma clave.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/eliminar-beneficiario/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "beneficiaries",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "DELETE",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Un beneficiario",
          "request": {
            "name": "Un beneficiario",
            "description": {
              "content": "Un beneficiario de tu empresa. Si el alta quedó sin confirmar responde `processing`. El id de otra empresa da 404.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-beneficiario/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "beneficiaries",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Países del riel `latam`",
          "request": {
            "name": "Países del riel `latam`",
            "description": {
              "content": "Países a los que tu empresa puede pagar por el riel `latam`, con su moneda y lo que cada uno pide para dar de alta una cuenta. Sale de la configuración vigente: consúltalo en vez de copiarlo.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-paises-latam/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "latam",
                "countries"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Bancos de un país del riel `latam`",
          "request": {
            "name": "Bancos de un país del riel `latam`",
            "description": {
              "content": "Bancos y entidades de un país del riel `latam`, con el valor a enviar en `entity`. Un país fuera de `GET /v1/latam/countries` responde `404`.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-bancos-latam/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "latam",
                "countries",
                ":country",
                "entities"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "ft",
                  "key": "country",
                  "disabled": false,
                  "description": {
                    "content": "(Required) País, en código de 2 letras.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Cobros",
      "description": "",
      "item": [
        {
          "name": "Métodos de cobro",
          "request": {
            "name": "Métodos de cobro",
            "description": {
              "content": "Métodos de cobro de la empresa, con país, moneda, mínimos y máximos.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-metodos-de-cobro/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "collection-methods"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Cobros, con su último estado conocido",
          "request": {
            "name": "Cobros, con su último estado conocido",
            "description": {
              "content": "Cobros creados por esta API, con el último estado conocido, del más nuevo al más viejo.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-cobros/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "collections"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Filas por página, de 1 a 100. Por omisión, 25.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Valor de `next_cursor` de la página anterior.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": ""
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Crear un cobro",
          "request": {
            "name": "Crear un cobro",
            "description": {
              "content": "Crea un cobro y devuelve la instrucción para quien paga. Exige `Idempotency-Key` y firma. Envía `amount` o `destination_amount`. 201 si quedó creado; 202 si aún no se confirma: repite con la misma clave.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/crear-cobro/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "collections"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"currency\": \"MXN\",\n  \"method\": \"spei\",\n  \"amount\": \"1250.00\",\n  \"payer\": {\n    \"firstName\": \"CLIENTE\",\n    \"lastName\": \"FICTICIO\",\n    \"email\": \"pagos@empresa-ejemplo.com\"\n  },\n  \"description\": \"Pedido 7731\",\n  \"external_ref\": \"pedido-7731\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Estimar un cobro",
          "request": {
            "name": "Estimar un cobro",
            "description": {
              "content": "Estima montos y comisiones de un cobro antes de crearlo. Es indicativa y no crea nada, por eso no pide `Idempotency-Key`. Va firmada como las demás escrituras de cobros.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/estimar-cobro/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "collections",
                "estimate"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"currency\": \"MXN\",\n  \"method\": \"spei\",\n  \"amount\": \"1250.00\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Un cobro",
          "request": {
            "name": "Un cobro",
            "description": {
              "content": "Un cobro de tu empresa, con su estado actual. `paid` y `expired` no vuelven atrás.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-cobro/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "collections",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Depósitos",
      "description": "",
      "item": [
        {
          "name": "Direcciones de depósito",
          "request": {
            "name": "Direcciones de depósito",
            "description": {
              "content": "Direcciones de depósito de la empresa. Paginación por cursor.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-direcciones-de-deposito/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "deposit-addresses"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Filas por página, de 1 a 100. Por omisión, 25.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Valor de `next_cursor` de la página anterior.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": ""
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Crear una dirección de depósito",
          "request": {
            "name": "Crear una dirección de depósito",
            "description": {
              "content": "Crea una dirección de depósito para una red y un token. Exige `Idempotency-Key` y firma. 201 si quedó activa; 202 si aún no se confirma: repite con la misma clave.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/crear-direccion-de-deposito/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "deposit-addresses"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"chain\": \"polygon\",\n  \"currency\": \"USDC\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Una dirección de depósito",
          "request": {
            "name": "Una dirección de depósito",
            "description": {
              "content": "Una dirección de depósito de tu empresa. Si el alta quedó sin confirmar responde `processing`, con los datos en null.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-direccion-de-deposito/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "deposit-addresses",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Depósitos recibidos y quién pagó",
          "request": {
            "name": "Depósitos recibidos y quién pagó",
            "description": {
              "content": "Depósitos recibidos y quién pagó, del más nuevo al más viejo. `payer` llega en null si no hay datos legibles.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-depositos/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "deposits"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Filas por página, de 1 a 100. Por omisión, 25.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Valor de `next_cursor` de la página anterior.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": ""
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Un depósito",
          "request": {
            "name": "Un depósito",
            "description": {
              "content": "Un depósito de tu empresa. El id va sellado por empresa: el de otra da 404.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-deposito/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "deposits",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Eventos",
      "description": "",
      "item": [
        {
          "name": "Eventos de la empresa",
          "request": {
            "name": "Eventos de la empresa",
            "description": {
              "content": "Eventos de la empresa, del más nuevo al más viejo. Sirve para recuperar lo que un webhook no entregó: pide sin cursor y recorre hasta un evento que ya procesaste. `next_cursor` sólo camina hacia el pasado y termina en null, así que no lo guardes entre consultas. Filtra con `type`.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-eventos/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "events"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Filas por página, de 1 a 100. Por omisión, 25.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Valor de `next_cursor` de la página anterior.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": ""
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Filtra por tipo de evento, por ejemplo `payment.completed`.",
                    "type": "text/plain"
                  },
                  "key": "type",
                  "value": ""
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Un evento",
          "request": {
            "name": "Un evento",
            "description": {
              "content": "Un evento de tu empresa, con el mismo contenido que entrega el webhook.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-evento/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "events",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Sistema",
      "description": "",
      "item": [
        {
          "name": "Salud pública del servicio",
          "request": {
            "name": "Salud pública del servicio",
            "description": {
              "content": "Estado general del servicio, sin llave y sin gastar cuota. Sale de una medición en segundo plano: si tiene más de 15 s responde `degraded`, aunque dijera `ok`. Con `down` el código es 503.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-salud/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "health"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "IP de salida de webhooks",
          "request": {
            "name": "IP de salida de webhooks",
            "description": {
              "content": "Direcciones desde las que FITAL envía webhooks, para tu firewall. Pública, con un minuto de caché. La firma HMAC sigue siendo la protección principal.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-ip-de-salida/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "meta",
                "egress-ips"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Estado por capacidad",
          "request": {
            "name": "Estado por capacidad",
            "description": {
              "content": "Estado de pagos, cobros, webhooks y API para tu empresa. Acepta cualquier llave válida. `not_enabled` indica que tu empresa no tiene esa capacidad y `unknown` que no hay medición reciente.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-estado/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "status"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Movimientos",
      "description": "",
      "item": [
        {
          "name": "Movimientos de la cuenta",
          "request": {
            "name": "Movimientos de la cuenta",
            "description": {
              "content": "Movimientos de la cuenta, de esta API y de otros orígenes, en el orden en que cambiaron. `payment_id` y `external_ref` dicen de qué pago sale cada uno. Al llegar al final `has_more` es `false` y `next_cursor` sigue presente: guárdalo y úsalo después para recibir sólo lo nuevo. Ese recorrido siguiente empieza en la hora en que abrió el anterior y repasa 2 minutos más, para no perder lo que confirmó tarde, y una fila que cambia mientras recorres vuelve a salir. Por eso un mismo id puede repetirse: quédate con la copia de `updated_at` más reciente. Con `from` y `to`, `from` debe ser anterior.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-movimientos/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "movements"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Filas por página, de 1 a 100. Por omisión, 25.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Valor de `next_cursor` de la página anterior.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": ""
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Desde esta fecha de creación, incluida.",
                    "type": "text/plain"
                  },
                  "key": "from",
                  "value": ""
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Hasta esta fecha de creación, sin incluirla.",
                    "type": "text/plain"
                  },
                  "key": "to",
                  "value": ""
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Filtra por categoría. `payment`: Salida por un riel de pago. `deposit`: Entrada de dinero. `crypto`: Envío o recepción de un token. `internal`: Movimiento interno de la cuenta. `card`: Operación con tarjeta. `other`: Cualquier otro movimiento. (This can only be one of payment,deposit,crypto,internal,card,other)",
                    "type": "text/plain"
                  },
                  "key": "type",
                  "value": ""
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Filtra por cualquiera de las monedas del movimiento.",
                    "type": "text/plain"
                  },
                  "key": "currency",
                  "value": ""
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Un movimiento",
          "request": {
            "name": "Un movimiento",
            "description": {
              "content": "Un movimiento de tu empresa. El id va sellado por empresa: el de otra da 404.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-movimiento/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "movements",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Recibo de un movimiento terminal",
          "request": {
            "name": "Recibo de un movimiento terminal",
            "description": {
              "content": "Recibo de un movimiento terminal. Con `Accept: application/json` responde datos; si no, un PDF. Antes de terminar da `409 receipt_not_available`.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/descargar-recibo/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "movements",
                ":id",
                "receipt"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Pagos",
      "description": "",
      "item": [
        {
          "name": "Pagos, con su último estado conocido",
          "request": {
            "name": "Pagos, con su último estado conocido",
            "description": {
              "content": "Pagos creados por esta API, con su último estado conocido, del más nuevo al más viejo. Para el estado más fresco de uno, usa `GET /v1/payments/{id}`.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-pagos/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "payments"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [
                {
                  "disabled": false,
                  "description": {
                    "content": "Filas por página, de 1 a 100. Por omisión, 25.",
                    "type": "text/plain"
                  },
                  "key": "limit",
                  "value": "25"
                },
                {
                  "disabled": true,
                  "description": {
                    "content": "Valor de `next_cursor` de la página anterior.",
                    "type": "text/plain"
                  },
                  "key": "cursor",
                  "value": ""
                }
              ],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Crear un pago",
          "request": {
            "name": "Crear un pago",
            "description": {
              "content": "Crea un pago a un beneficiario aprobado. Exige `Idempotency-Key` y firma. Responde 202: el resultado llega por webhook o en `GET /v1/payments/{id}`. Si la respuesta se corta, repite con la misma clave: nunca crea un segundo pago. `in_review` con `retryable: false` quedó registrado: esa clave repite el rechazo, y volver a intentarlo exige otra.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/crear-pago/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "payments"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"beneficiary_id\": \"ben_3kTMd9wQp2LxZ7vR1nYcA4bE\",\n  \"amount\": \"1500.00\",\n  \"currency\": \"MXN\",\n  \"external_ref\": \"factura-1042\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Un pago",
          "request": {
            "name": "Un pago",
            "description": {
              "content": "Un pago de tu empresa. `completed` exige confirmación del riel. `freshness` dice de dónde sale el estado: con `current` es la lectura de ahora y `as_of` su hora; con `delayed` no hubo lectura concluyente y es lo último que se sabe, a la hora de `as_of`. Una cancelación confirmada responde `canceled` con `delayed` hasta que una lectura la confirme. Si un pago cancelado vuelve a `processing` con `current`, se reabrió de verdad.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/consultar-pago/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "payments",
                ":id"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Cancelar un pago que aún espera fondos",
          "request": {
            "name": "Cancelar un pago que aún espera fondos",
            "description": {
              "content": "Cancela un pago que aún espera fondos. Exige `Idempotency-Key` y firma. Si ya no se puede cancelar da `409 not_cancellable`. 202 si la cancelación aún no se confirma: repite con la misma clave.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/cancelar-pago/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "payments",
                ":id",
                "cancel"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": [
                {
                  "type": "any",
                  "value": "pay_6nRtY1wKs3QzD8cL5mVhF2gB",
                  "key": "id",
                  "disabled": false,
                  "description": {
                    "content": "(Required) Identificador del recurso.",
                    "type": "text/plain"
                  }
                }
              ]
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        },
        {
          "name": "Cotización indicativa con vencimiento",
          "request": {
            "name": "Cotización indicativa con vencimiento",
            "description": {
              "content": "Estima cuánto se debitaría por un pago a un beneficiario de tu empresa. Es indicativa y vence. No mueve dinero. Envía `quote_id` al crear el pago para fijar el tope de débito.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/crear-cotizacion/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "quotes"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json"
              },
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "POST",
            "body": {
              "mode": "raw",
              "raw": "{\n  \"beneficiary_id\": \"ben_3kTMd9wQp2LxZ7vR1nYcA4bE\",\n  \"amount\": \"1500.00\",\n  \"currency\": \"MXN\"\n}",
              "options": {
                "raw": {
                  "headerFamily": "json",
                  "language": "json"
                }
              }
            }
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    },
    {
      "name": "Webhooks",
      "description": "",
      "item": [
        {
          "name": "Destinos de webhooks",
          "request": {
            "name": "Destinos de webhooks",
            "description": {
              "content": "Destinos de webhooks de la empresa, sólo para consultarlos. El alta, la edición, la baja, la rotación del secreto y la reactivación se hacen en el panel: v1 no tiene API para eso.\n\n[Errores, reintentos, muestras y guías](/docs/operaciones/listar-destinos-de-webhook/).",
              "type": "text/plain"
            },
            "url": {
              "path": [
                "v1",
                "webhook-endpoints"
              ],
              "host": [
                "{{baseUrl}}"
              ],
              "query": [],
              "variable": []
            },
            "header": [
              {
                "key": "Accept",
                "value": "application/json"
              }
            ],
            "method": "GET",
            "body": {}
          },
          "response": [],
          "event": [
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "pm.test('responde con la forma documentada', () => pm.expect(pm.response.code).to.be.below(500));",
                  "pm.test('marca el ambiente de simulador', () => pm.expect(pm.response.code === 401 || pm.response.headers.has('X-Fital-Environment')).to.be.true);"
                ]
              }
            }
          ],
          "protocolProfileBehavior": {
            "disableBodyPruning": true
          }
        }
      ]
    }
  ],
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "// Clave nueva por ejecución. En tu integración, derívala de tu identificador interno.",
          "pm.request.headers.upsert({ key: 'Idempotency-Key', value: 'postman-' + pm.variables.replaceIn('{{$guid}}') });",
          "// Los encabezados de firma no aplican en el simulador público.",
          "pm.request.headers.remove('X-Fital-Timestamp');",
          "pm.request.headers.remove('X-Fital-Signature');"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://widget.fital.xyz/explorar",
      "type": "string"
    }
  ],
  "info": {
    "name": "FITAL API, simulador público",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json",
    "description": "Sólo habla con el simulador público. No uses aquí una llave real."
  },
  "auth": {
    "type": "bearer",
    "bearer": [
      {
        "key": "token",
        "value": "{{llave}}",
        "type": "string"
      }
    ]
  }
}
