{
  "info": {
    "name": "Podeli API — Sandbox",
    "_postman_id": "32b24446-e020-4861-9fa4-b25d904476b9",
    "description": "Коллекция для первичного тестирования Podeli API в sandbox-окружении. Перед запуском укажите login и password. X-Correlation-ID формируется автоматически для каждого запроса. Для CREATE и CREATE_OFFLINE автоматически генерируется order.id и сохраняется в переменную orderId.",
    "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
  },
  "auth": {
    "type": "basic",
    "basic": [
      {
        "key": "username",
        "value": "{{login}}",
        "type": "string"
      },
      {
        "key": "password",
        "value": "{{password}}",
        "type": "string"
      }
    ]
  },
  "event": [
    {
      "listen": "prerequest",
      "script": {
        "type": "text/javascript",
        "exec": [
          "pm.collectionVariables.set(",
          "  'correlationId',",
          "  pm.variables.replaceIn('{{$guid}}')",
          ");"
        ]
      }
    }
  ],
  "variable": [
    {
      "key": "baseUrl",
      "value": "https://api-sand.podeli.ru/partners/v1",
      "type": "string"
    },
    {
      "key": "login",
      "value": "partner_login",
      "type": "string"
    },
    {
      "key": "password",
      "value": "partner_password",
      "type": "string"
    },
    {
      "key": "orderId",
      "value": "demo-online-00000000-000000-0000",
      "type": "string"
    },
    {
      "key": "subpartnerLogin",
      "value": "submerchant_01",
      "type": "string"
    },
    {
      "key": "userAgent",
      "value": "postman-podeli-api-sandbox",
      "type": "string"
    },
    {
      "key": "correlationId",
      "value": "",
      "type": "string"
    },
    {
      "key": "dateFrom",
      "value": "2026-01-01T00:00:00%2B03:00",
      "type": "string"
    },
    {
      "key": "dateTo",
      "value": "2026-01-01T23:59:59%2B03:00",
      "type": "string"
    }
  ],
  "item": [
    {
      "name": "Orders",
      "description": "Методы для создания заказа, подтверждения оплаты, отмены, возврата, получения статуса и сверки.",
      "item": [
        {
          "name": "CREATE",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "function pad(value) {",
                  "  return String(value).padStart(2, '0');",
                  "}",
                  "",
                  "const now = new Date();",
                  "",
                  "const date = [",
                  "  now.getUTCFullYear(),",
                  "  pad(now.getUTCMonth() + 1),",
                  "  pad(now.getUTCDate())",
                  "].join('');",
                  "",
                  "const time = [",
                  "  pad(now.getUTCHours()),",
                  "  pad(now.getUTCMinutes()),",
                  "  pad(now.getUTCSeconds())",
                  "].join('');",
                  "",
                  "const suffix = Math.floor(1000 + Math.random() * 9000);",
                  "const orderId = `demo-online-${date}-${time}-${suffix}`;",
                  "",
                  "pm.collectionVariables.set('orderId', orderId);",
                  "console.log(`Generated order.id: ${orderId}`);"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const orderId = pm.collectionVariables.get('orderId');",
                  "",
                  "pm.test(`Generated order.id: ${orderId}`, function () {",
                  "  pm.expect(orderId).to.be.a('string').and.not.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Создаёт заказ для онлайн-сценария. order.id генерируется автоматически перед отправкой и сохраняется в переменную orderId для последующих запросов.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/create",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "create"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"order\": {\n    \"id\": \"{{orderId}}\",\n    \"amount\": 7340.00,\n    \"prepaidAmount\": 1340.00,\n    \"items\": [\n      {\n        \"id\": \"item-001\",\n        \"article\": \"ART-COFFEE-001\",\n        \"name\": \"Кофемашина автоматическая\",\n        \"amount\": 3990.00,\n        \"quantity\": 1,\n        \"prepaidAmount\": 670.00\n      },\n      {\n        \"id\": \"item-002\",\n        \"article\": \"ART-MUG-002\",\n        \"name\": \"Набор керамических кружек\",\n        \"amount\": 3350.00,\n        \"quantity\": 1,\n        \"prepaidAmount\": 670.00\n      }\n    ],\n    \"deliveryMethod\": \"Mall\",\n    \"courierId\": \"courier-demo-17\",\n    \"recipient\": \"Петрова Мария Сергеевна\",\n    \"phoneRecipient\": \"79990000001\",\n    \"addressDelivery\": \"г. Тестоград, ул. Примерная, д. 7, кв. 42\",\n    \"isTwoStagePayment\": true\n  },\n  \"clientInfo\": {\n    \"firstName\": \"Мария\",\n    \"lastName\": \"Петрова\",\n    \"middleName\": \"Сергеевна\",\n    \"birthdate\": \"1992-04-17\",\n    \"phone\": \"79990000002\",\n    \"email\": \"maria.petrova@example.com\"\n  },\n  \"notificationUrl\": \"https://api.partner.example.com/podeli/notifications\",\n  \"failUrl\": \"https://shop.example.com/payment/podeli/fail\",\n  \"successUrl\": \"https://shop.example.com/payment/podeli/success\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "CREATE_OFFLINE",
          "event": [
            {
              "listen": "prerequest",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "function pad(value) {",
                  "  return String(value).padStart(2, '0');",
                  "}",
                  "",
                  "const now = new Date();",
                  "",
                  "const date = [",
                  "  now.getUTCFullYear(),",
                  "  pad(now.getUTCMonth() + 1),",
                  "  pad(now.getUTCDate())",
                  "].join('');",
                  "",
                  "const time = [",
                  "  pad(now.getUTCHours()),",
                  "  pad(now.getUTCMinutes()),",
                  "  pad(now.getUTCSeconds())",
                  "].join('');",
                  "",
                  "const suffix = Math.floor(1000 + Math.random() * 9000);",
                  "const orderId = `demo-offline-${date}-${time}-${suffix}`;",
                  "",
                  "pm.collectionVariables.set('orderId', orderId);",
                  "console.log(`Generated order.id: ${orderId}`);"
                ]
              }
            },
            {
              "listen": "test",
              "script": {
                "type": "text/javascript",
                "exec": [
                  "const orderId = pm.collectionVariables.get('orderId');",
                  "",
                  "pm.test(`Generated order.id: ${orderId}`, function () {",
                  "  pm.expect(orderId).to.be.a('string').and.not.empty;",
                  "});"
                ]
              }
            }
          ],
          "request": {
            "description": "Создаёт заказ для офлайн-сценария. order.id генерируется автоматически перед отправкой и сохраняется в переменную orderId.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/create_offline",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "create_offline"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"order\": {\n    \"id\": \"{{orderId}}\",\n    \"amount\": 6200.00,\n    \"prepaidAmount\": 1200.00,\n    \"items\": [\n      {\n        \"id\": \"item-001\",\n        \"article\": \"ART-BAG-001\",\n        \"name\": \"Рюкзак городской\",\n        \"amount\": 4200.00,\n        \"quantity\": 1,\n        \"prepaidAmount\": 800.00\n      },\n      {\n        \"id\": \"item-002\",\n        \"article\": \"ART-UMBRELLA-002\",\n        \"name\": \"Зонт складной\",\n        \"amount\": 2000.00,\n        \"quantity\": 1,\n        \"prepaidAmount\": 400.00\n      }\n    ],\n    \"latitude\": 55.755826,\n    \"longitude\": 37.617300,\n    \"mall\": \"ТЦ Тестовый\",\n    \"address\": \"г. Тестоград, ул. Торговая, д. 10\",\n    \"cashRegisterNumber\": \"cashbox-demo-01\",\n    \"cashierNumber\": \"cashier-demo-01\"},\n  \"terminalId\": \"terminal-demo-001\",\n  \"clientInfo\": {\n    \"id\": \"MTExMQ==\"\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "COMMIT",
          "request": {
            "description": "Подтверждает двухстадийную оплату по заказу из переменной orderId.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/{{orderId}}/commit",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "{{orderId}}",
                "commit"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"order\": {\n    \"amount\": 7340.00,\n    \"prepaidAmount\": 1340.00\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "CANCEL",
          "request": {
            "description": "Отменяет заказ из переменной orderId, если текущий статус заказа допускает отмену.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/{{orderId}}/cancel",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "{{orderId}}",
                "cancel"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"cancellationInitiator\": \"shop\"\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "REFUND",
          "request": {
            "description": "Создаёт возврат по заказу из переменной orderId. В примере выполняется возврат одной позиции.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/{{orderId}}/refund",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "{{orderId}}",
                "refund"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"order\": {\n    \"refund\": {\n      \"id\": 100001,\n      \"initiator\": \"client\",\n      \"items\": [\n        {\n          \"id\": \"item-001\",\n          \"refundedQuantity\": 1\n        }\n      ]}\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "INFO",
          "request": {
            "description": "Возвращает текущий статус заказа из переменной orderId.",
            "method": "GET",
            "header": [
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/{{orderId}}/info",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "{{orderId}}",
                "info"
              ]
            }
          },
          "response": []
        },
        {
          "name": "ORDER_RECONCILIATION",
          "request": {
            "description": "Возвращает список заказов за указанный период. Используйте dateFrom и dateTo в формате ISO 8601 с URL-encoded часовым поясом.",
            "method": "GET",
            "header": [
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/order_reconciliation?dateFrom={{dateFrom}}&dateTo={{dateTo}}&detailing=false",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "order_reconciliation"
              ],
              "query": [
                {
                  "key": "dateFrom",
                  "value": "{{dateFrom}}"
                },
                {
                  "key": "dateTo",
                  "value": "{{dateTo}}"
                },
                {
                  "key": "detailing",
                  "value": "false"
                }
              ]
            }
          },
          "response": []
        },
        {
          "name": "CALCULATE",
          "request": {
            "description": "Рассчитывает параметры оплаты по сумме заказа.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/orders/calculate",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "orders",
                "calculate"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"sum\": 400.00\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    },
    {
      "name": "Subpartners",
      "description": "Методы для регистрации, получения информации и обновления данных субпартнёра.",
      "item": [
        {
          "name": "SUBPARTNER REGISTRATION",
          "request": {
            "description": "Регистрирует субпартнёра в sandbox-окружении.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              },
              {
                "key": "User-Agent",
                "value": "{{userAgent}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/subpartner/registration",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "subpartner",
                "registration"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subPartnerInfo\": {\n    \"login\": \"submerchant_01\",\n    \"name\": \"Тестовый магазин\",\n    \"legalEntity\": \"ООО \\\"ТЕСТОВЫЙ МАГАЗИН\\\"\",\n    \"inn\": \"7700000000\",\n    \"kpp\": \"770001001\",\n    \"ogrn\": \"1207700000000\",\n    \"mcc\": \"5651\",\n    \"email\": \"submerchant@example.com\",\n    \"siteUrl\": \"https://submerchant.example.com\",\n    \"notificationUrlReg\": \"https://partner.example.com/subpartner-status\",\n    \"agreementSignDate\": \"2026-06-01\",\n    \"commission\": 1.00,\n    \"averageCheck\": 1000.00,\n    \"requisite\": {\n      \"bankName\": \"Тестовый банк\",\n      \"bankIdentifierCode\": \"044525999\",\n      \"correspondingAccount\": \"30101810400000000999\",\n      \"paymentAccount\": \"40702810900000012345\"\n    },\n    \"address\": {\n      \"index\": \"125009\",\n      \"city\": \"Тестоград\",\n      \"street\": \"Примерная\",\n      \"house\": \"1\",\n      \"office\": \"10\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        },
        {
          "name": "SUBPARTNER INFO",
          "request": {
            "description": "Возвращает данные субпартнёра по логину из переменной subpartnerLogin.",
            "method": "GET",
            "header": [
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              },
              {
                "key": "User-Agent",
                "value": "{{userAgent}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/subpartner/info/{{subpartnerLogin}}",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "subpartner",
                "info",
                "{{subpartnerLogin}}"
              ]
            }
          },
          "response": []
        },
        {
          "name": "SUBPARTNER UPDATE",
          "request": {
            "description": "Обновляет данные субпартнёра в sandbox-окружении.",
            "method": "POST",
            "header": [
              {
                "key": "Content-Type",
                "value": "application/json",
                "type": "text"
              },
              {
                "key": "X-Correlation-ID",
                "value": "{{correlationId}}",
                "type": "text"
              },
              {
                "key": "User-Agent",
                "value": "{{userAgent}}",
                "type": "text"
              }
            ],
            "url": {
              "raw": "{{baseUrl}}/subpartner/update",
              "host": [
                "{{baseUrl}}"
              ],
              "path": [
                "subpartner",
                "update"
              ]
            },
            "body": {
              "mode": "raw",
              "raw": "{\n  \"subPartnerInfo\": {\n    \"login\": \"submerchant_01\",\n    \"name\": \"Тестовый магазин обновлённый\",\n    \"inn\": \"7700000000\",\n    \"kpp\": \"770001001\",\n    \"ogrn\": \"1207700000000\",\n    \"mcc\": \"5651\",\n    \"email\": \"billing@example.com\",\n    \"siteUrl\": \"https://submerchant.example.com\",\n    \"notificationUrlReg\": \"https://partner.example.com/subpartner-status\",\n    \"agreementSignDate\": \"2026-06-01\",\n    \"requisite\": {\n      \"bankName\": \"Тестовый банк\",\n      \"bankIdentifierCode\": \"044525999\",\n      \"correspondingAccount\": \"30101810400000000999\",\n      \"paymentAccount\": \"40702810900000067890\"\n    },\n    \"address\": {\n      \"index\": \"125009\",\n      \"city\": \"Тестоград\",\n      \"street\": \"Примерная\",\n      \"house\": \"1\",\n      \"office\": \"10\"\n    }\n  }\n}",
              "options": {
                "raw": {
                  "language": "json"
                }
              }
            }
          },
          "response": []
        }
      ]
    }
  ]
}