{
    "info": {
        "_postman_id": "spidi-api",
        "name": "API Productos SPIDI",
        "description": "Colección optimizada para la API de SPIDI Pagos. Incluye scripts de pre-request para Idempotency-Key y tests para autoguardado de Tokens.",
        "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
    },
    "item": [
        {
            "name": "Endpoints Comunes",
            "item": [
                {
                    "name": "Login (Obtener Token)",
                    "event": [
                        {
                            "listen": "test",
                            "script": {
                                "exec": [
                                    "if (pm.response.code === 200) {",
                                    "    var jsonData = pm.response.json();",
                                    "    if (jsonData.token) {",
                                    "        pm.collectionVariables.set(\"token\", jsonData.token);",
                                    "        console.log(\"Token actualizado automáticamente en variables de colección\");",
                                    "    }",
                                    "}"
                                ],
                                "type": "text/javascript"
                            }
                        }
                    ],
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"short_name\": \"spidiusuario1\",\n  \"password\": \"clavesecreta\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/spidipagos/login",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "spidipagos",
                                "login"
                            ]
                        },
                        "description": "Autenticación. El token recibido se guardará automáticamente."
                    },
                    "response": []
                },
                {
                    "name": "Crear Acuerdo (Agreement)",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"title\": \"Acuerdo Principal\",\n  \"description\": \"Sin distribución de fondos\",\n  \"split\": false,\n  \"payment_methods\": {\n    \"immediate_debit\": true,\n    \"crypto\": false,\n    \"mobile_payment\": true\n  },\n  \"default_bank_account_id\": \"uuid_banco_destino\",\n  \"routing\": {\n    \"rules\": []\n  }\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/agreements",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "agreements"
                            ]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Endpoints Botón",
            "item": [
                {
                    "name": "Crear Sesión Botón",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"agreement_id\": \"agr_id_aqui\",\n  \"amount_reference\": 50,\n  \"currency_reference\": \"USD\",\n  \"identifier_label\": \"Cliente\",\n  \"identifier\": \"Juan Pérez\",\n  \"description\": \"Pago de servicio\",\n  \"success_url\": \"https://miapp.com/ok\",\n  \"failure_url\": \"https://miapp.com/fail\",\n  \"webhook_url\": \"https://miapi.com/webhook\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-sessions/buttons",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-sessions",
                                "buttons"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Status de Sesión",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-sessions/status/:session_id",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-sessions",
                                "status",
                                ":session_id"
                            ],
                            "variable": [
                                {
                                    "key": "session_id",
                                    "value": "uuid_sesion"
                                }
                            ]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Endpoints Solicitud (Batch)",
            "item": [
                {
                    "name": "Crear Batch Solicitudes",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"continue_on_error\": false,\n  \"items\": [\n    {\n      \"currency_reference\": \"USD\",\n      \"amount_reference\": 100,\n      \"agreement_id\": \"agr_id_aqui\",\n      \"identifier_label\": \"Cliente\",\n      \"identifier\": \"Cliente 1\",\n      \"description\": \"Pago Batch 1\",\n      \"success_url\": \"https://app.com/ok\",\n      \"failure_url\": \"https://app.com/fail\",\n      \"due_date_session\": \"2025-12-31T23:59:59Z\",\n      \"due_date_reached_behavior\": \"keep_active\",\n      \"late_notice_message\": \"Pago vencido\",\n      \"internal_reference\": \"REF-001\"\n    }\n  ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-sessions/request/batch",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-sessions",
                                "request",
                                "batch"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Expirar Sesión",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"reason\": \"manual_expire_due_to_contract_change\",\n  \"user_message\": \"Enlace anulado por administración\"\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/payment-session/:session_id/expire",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "payment-session",
                                ":session_id",
                                "expire"
                            ],
                            "variable": [
                                {
                                    "key": "session_id",
                                    "value": "uuid_sesion"
                                }
                            ]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Endpoints Parada",
            "item": [
                {
                    "name": "Listar Paradas",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-stops?limit=20",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-stops"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "20"
                                },
                                {
                                    "key": "status",
                                    "value": "active",
                                    "disabled": true
                                }
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Crear Parada (Batch)",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"continue_on_error\": false,\n  \"items\": [\n    {\n      \"internal_reference\": \"REF_USER_001\",\n      \"stop_title\": \"Caja Usuario 001\",\n      \"empty_state_message\": \"No tienes pagos pendientes\",\n      \"status\": \"active\"\n    }\n  ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-stops",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-stops"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Consultar Detalle Parada",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-stops/:stop_id",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-stops",
                                ":stop_id"
                            ],
                            "variable": [
                                {
                                    "key": "stop_id",
                                    "value": "uuid_stop"
                                }
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Operar Sesiones en Parada (Add/Remove)",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"continue_on_error\": true,\n  \"items\": [\n    {\n      \"stop_id\": \"stop_uuid_aqui\",\n      \"op\": \"add\",\n      \"session_ids\": [\"sess_uuid_1\", \"sess_uuid_2\"]\n    }\n  ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-stops/payment-sessions/batch",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-stops",
                                "payment-sessions",
                                "batch"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Consultar Solicitudes de Pago Históricos de Parada",
                    "request": {
                        "method": "GET",
                        "header": [],
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-stops/:stop_id/payment-sessions?limit=20&status=pending",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-stops",
                                ":stop_id",
                                "payment-sessions"
                            ],
                            "query": [
                                {
                                    "key": "limit",
                                    "value": "20"
                                },
                                {
                                    "key": "status",
                                    "value": "pending"
                                }
                            ],
                            "variable": [
                                {
                                    "key": "stop_id",
                                    "value": "uuid_stop"
                                }
                            ]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Endpoints Publicar",
            "item": [
                {
                    "name": "Reordenar Sesiones de Pago en Paradas",
                    "request": {
                        "method": "PATCH",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"continue_on_error\": true,\n  \"items\": [\n    {\n      \"stop_id\": \"stp_111\",\n      \"session_ids\": [\n        \"sess_B\",\n        \"sess_A\",\n        \"sess_C\"\n      ],\n      \"mode\": \"append\"\n    }\n  ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-stops/payment-sessions/reorder",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-stops",
                                "payment-sessions",
                                "reorder"
                            ]
                        }
                    },
                    "response": []
                },
                {
                    "name": "Consultar Enlaces de Múltiples Paradas",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"stop_ids\": [\n    \"stp_111\",\n    \"stp_222\",\n    \"stp_333\"\n  ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/payment-stops/payment-sessions/query",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "payment-stops",
                                "payment-sessions",
                                "query"
                            ]
                        }
                    },
                    "response": []
                }
            ]
        },
        {
            "name": "Endpoints Especiales",
            "item": [
                {
                    "name": "Crear Acuerdo de Recepción de Split",
                    "request": {
                        "method": "POST",
                        "header": [],
                        "body": {
                            "mode": "raw",
                            "raw": "{\n  \"title\": \"Partner 1 (recepción)\",\n  \"description\": \"Recibir de marketplace X\",\n  \"default_bank_account_id\": \"uuid_sofitasa_001\",\n  \"rules\": [\n    {\n      \"origin_bank_code\": \"0105\",\n      \"destination_bank_account_id\": \"uuid_mercantil_007\"\n    }\n  ]\n}",
                            "options": {
                                "raw": {
                                    "language": "json"
                                }
                            }
                        },
                        "url": {
                            "raw": "{{base_url}}/api/v1/ext/split-receiving-agreements",
                            "host": [
                                "{{base_url}}"
                            ],
                            "path": [
                                "api",
                                "v1",
                                "ext",
                                "split-receiving-agreements"
                            ]
                        }
                    },
                    "response": []
                }
            ]
        }
    ],
    "auth": {
        "type": "bearer",
        "bearer": [
            {
                "key": "token",
                "value": "{{token}}",
                "type": "string"
            }
        ]
    },
    "event": [
        {
            "listen": "prerequest",
            "script": {
                "type": "text/javascript",
                "exec": [
                    "// Script Global: Agregar Idempotency-Key automáticamente a métodos que modifican datos",
                    "if (['POST', 'PATCH', 'PUT', 'DELETE'].includes(pm.request.method)) {",
                    "    if (!pm.request.headers.has(\"Idempotency-Key\")) {",
                    "        pm.request.headers.add({",
                    "            key: \"Idempotency-Key\",",
                    "            value: pm.variables.replaceIn('{{$guid}}') // Genera UUID v4",
                    "        });",
                    "        console.log(\"Idempotency-Key generado automáticamente\");",
                    "    }",
                    "}"
                ]
            }
        },
        {
            "listen": "test",
            "script": {
                "type": "text/javascript",
                "exec": [
                    ""
                ]
            }
        }
    ],
    "variable": [
        {
            "key": "base_url",
            "value": "https://sandbox.api.spidipagos.com",
            "type": "string"
        },
        {
            "key": "token",
            "value": "",
            "type": "string"
        }
    ]
}