{ "info": { "_postman_id": "9bcb9051-44d0-46ec-83a0-a62260dd6b4b", "name": "Avtomat", "description": "### Welcome to Postman! This is your first collection.\n\nCollections are your starting point for building and testing APIs. You can use this one to:\n\n• Group related requests \n• Test your API in real-world scenarios \n• Document and share your requests\n\nUpdate the name and overview whenever you’re ready to make it yours.\n\n[Learn more about Postman Collections.](https://learning.postman.com/docs/collections/collections-overview/)", "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json", "_exporter_id": "52019133", "_collection_link": "https://go.postman.co/collection/52019133-9bcb9051-44d0-46ec-83a0-a62260dd6b4b?source=collection_link" }, "item": [ { "name": "VendingMachines", "item": [ { "name": "Все торговые автоматы", "event": [ { "listen": "prerequest", "script": { "exec": [ "" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "pm.test(\"Статус 200 OK\", function () {", " pm.response.to.have.status(200);", "});", "", "pm.test(\"Ответ — массив объектов\", function () {", " const json = pm.response.json();", " pm.expect(json).to.be.an(\"array\");", " if (json.length > 0) {", " const first = json[0];", " pm.expect(first).to.have.all.keys(\"id\", \"name\", \"location\", \"status\");", " pm.expect(first.id).to.be.a(\"number\");", " pm.expect(first.status).to.be.oneOf([\"online\", \"offline\", \"maintenance\"]);", " }", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "protocolProfileBehavior": { "disableBodyPruning": true }, "request": { "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{authToken}}", "type": "string" } ] }, "method": "GET", "header": [], "body": { "mode": "raw", "raw": "", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/vendingMachines", "host": [ "{{baseURL}}" ], "path": [ "vendingMachines" ] }, "description": "## Получение списка всех торговых автоматов в системе.\n\n**Метод:** GET \n**Авторизация:** Bearer Token \n**Параметры запроса:** нет \n**Ответ (200 OK):**\n\n \nМассив объектов торговых автоматов со следующими полями:\n\n- `id` — уникальный идентификатор (number)\n \n- `name` — название автомата (string)\n \n- `location` — адрес/локация (string)\n \n- `status` — текущий статус (online | offline | maintenance)" }, "response": [ { "name": "200 ОК", "originalRequest": { "method": "GET", "header": [], "body": { "mode": "raw", "raw": "[\r\n {\r\n \"id\": 123,\r\n \"name\": \"Аппарат у метро\",\r\n \"location\": \"Москва, Тверская 1\",\r\n \"status\": \"active\"\r\n },\r\n {\r\n \"id\": 456,\r\n \"name\": \"Кофе на заправке\",\r\n \"location\": \"СПб, Невский 10\",\r\n \"status\": \"maintenance\"\r\n }\r\n]", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/vendingMachines", "host": [ "{{baseURL}}" ], "path": [ "vendingMachines" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "json", "header": [], "cookie": [], "body": "[\n {\n \"id\": 1,\n \"name\": \"Аппарат у метро\",\n \"location\": \"Москва, Тверская 1\",\n \"status\": \"online\"\n },\n {\n \"id\": 2,\n \"name\": \"Кофе на заправке\",\n \"location\": \"СПб, Невский 10\",\n \"status\": \"maintenance\"\n },\n {\n \"id\": 3,\n \"name\": \"Снеки в офисе\",\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\n \"status\": \"online\"\n }\n]" } ] }, { "name": "Добавить автомат", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Статус 201 Created или 200\", () => {\r", " pm.expect(pm.response.code).to.be.oneOf([200, 201]);\r", "});\r", "\r", "const json = pm.response.json();\r", "\r", "pm.test(\"Созданный автомат имеет id и created_at\", () => {\r", " pm.expect(json).to.have.property(\"id\").that.is.a(\"number\");\r", " pm.expect(json).to.have.property(\"created_at\");\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{authToken}}", "type": "string" } ] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"name\": \"Тестовый автомат\",\r\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\r\n \"status\": \"offline\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/vendingMachines", "host": [ "{{baseURL}}" ], "path": [ "vendingMachines" ] }, "description": "## Создание нового торгового автомата.\n\n**Метод:** POST \n**Авторизация:** Bearer Token\n\n**Тело запроса (JSON):**\n\n``` json\n{\n \"name\": string,\n \"location\": string,\n \"status\": string (\"online\" | \"offline\" | \"maintenance\")\n}\n\n ```\n\n**Ответ (201 Created):** \nСозданный объект автомата с добавленным `id` и `created_at` (опционально)" }, "response": [ { "name": "201 ОК", "originalRequest": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"name\": \"Тестовый автомат\",\r\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\r\n \"status\": \"offline\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/vendingMachines", "host": [ "{{baseURL}}" ], "path": [ "vendingMachines" ] } }, "status": "Created", "code": 201, "_postman_previewlanguage": "", "header": [ { "key": "Date", "value": "Tue, 03 Feb 2026 11:09:57 GMT" }, { "key": "Content-Type", "value": "application/json; charset=utf-8" }, { "key": "Transfer-Encoding", "value": "chunked" }, { "key": "Connection", "value": "keep-alive" }, { "key": "Content-Encoding", "value": "gzip" }, { "key": "x-srv-trace", "value": "v=1;t=d746421ec992e4b8" }, { "key": "x-srv-span", "value": "v=1;s=619b8eaa295a4693" }, { "key": "access-control-allow-origin", "value": "*" }, { "key": "x-ratelimit-limit", "value": "120" }, { "key": "x-ratelimit-remaining", "value": "118" }, { "key": "x-ratelimit-reset", "value": "1770117037" }, { "key": "etag", "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\"" }, { "key": "vary", "value": "Accept-Encoding" }, { "key": "x-envoy-upstream-service-time", "value": "135" }, { "key": "cf-cache-status", "value": "DYNAMIC" }, { "key": "Set-Cookie", "value": "__cf_bm=PmgADFpaJRMF.zGhVafH06GYxLspzhovtNm0Qy18xr8-1770116997-1.0.1.1-7SbZSka8ORxS3uKFPkTHvj7A87w24eRuqiJxJhj0lAFBayeSaVH1AmuGkNRQvWkuo00Pf.uvRhpILhwwdDXxiHX8xr04a.XJ.vwRlXkhYCE; path=/; expires=Tue, 03-Feb-26 11:39:57 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None" }, { "key": "Server", "value": "cloudflare" }, { "key": "CF-RAY", "value": "9c817a9d7842967b-HEL" } ], "cookie": [ { "expires": "Invalid Date", "domain": "", "path": "" } ], "body": "{\n \"id\": 4,\n \"name\": \"Тестовый автомат\",\n \"location\": \"г. Йошкар-Ола, ул. Кремлёвская, ТРЦ. Плаза\",\n \"status\": \"offline\",\n \"created_at\": \"2026-02-03T15:00:00Z\"\n}" } ] } ] }, { "name": "Companies", "item": [ { "name": "Все компании", "event": [ { "listen": "prerequest", "script": { "exec": [ "" ], "type": "text/javascript", "packages": {}, "requests": {} } }, { "listen": "test", "script": { "exec": [ "pm.test(\"Статус 200 OK\", function () {", " pm.response.to.have.status(200);", "});", "", "pm.test(\"Ответ — массив\", function () {", " pm.expect(pm.response.json()).to.be.an(\"array\");", "});", "", "pm.test(\"Есть хотя бы одна компания\", function () {", " pm.expect(pm.response.json().length).to.be.at.least(1);", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{authToken}}", "type": "string" } ] }, "method": "GET", "header": [], "url": { "raw": "{{baseURL}}/companies", "host": [ "{{baseURL}}" ], "path": [ "companies" ] }, "description": "## Получение списка всех компаний-франчайзи.\n\n**Метод:** GET \n**Авторизация:** Bearer Token \n**Ответ (200 OK):**\n\nМассив объектов компаний:\n\n- `id` — идентификатор\n \n- `name` — название компании\n \n- `inn` — ИНН\n \n- `address` — юридический/фактический адрес\n \n- `created_at` — дата создания\n \n- `active_machines` — количество активных автоматов (число)" }, "response": [ { "name": "200 ОК", "originalRequest": { "method": "GET", "header": [], "url": { "raw": "{{baseURL}}/companies", "host": [ "{{baseURL}}" ], "path": [ "companies" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "", "header": [ { "key": "Date", "value": "Tue, 03 Feb 2026 11:14:53 GMT" }, { "key": "Content-Type", "value": "application/json; charset=utf-8" }, { "key": "Transfer-Encoding", "value": "chunked" }, { "key": "Connection", "value": "keep-alive" }, { "key": "Content-Encoding", "value": "gzip" }, { "key": "x-srv-trace", "value": "v=1;t=25fb64a4511f3eca" }, { "key": "x-srv-span", "value": "v=1;s=017a1a2762c491d6" }, { "key": "access-control-allow-origin", "value": "*" }, { "key": "x-ratelimit-limit", "value": "120" }, { "key": "x-ratelimit-remaining", "value": "119" }, { "key": "x-ratelimit-reset", "value": "1770117353" }, { "key": "etag", "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\"" }, { "key": "vary", "value": "Accept-Encoding" }, { "key": "x-envoy-upstream-service-time", "value": "194" }, { "key": "cf-cache-status", "value": "DYNAMIC" }, { "key": "Set-Cookie", "value": "__cf_bm=LiaMS6IDb50haRp187ub5Nj.eUpoyIaUBGVVfhnPOAM-1770117293-1.0.1.1-C6a1JcrMIIG5XLXmW8gowoB_rCWrIV4lJHso0VKF_AcghIfUcwaruKGW1SDMNBSTSbWTtzvFVGaoTwi3gkihOqnrtNMvLl8RspFXL.V6BU4; path=/; expires=Tue, 03-Feb-26 11:44:53 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None" }, { "key": "Server", "value": "cloudflare" }, { "key": "CF-RAY", "value": "9c8181d8fd1a8d8c-HEL" } ], "cookie": [ { "expires": "Invalid Date", "domain": "", "path": "" } ], "body": "[\n {\n \"id\": 1,\n \"name\": \"ООО Франчайзинг Про\",\n \"inn\": \"7701234567\",\n \"address\": \"Москва, ул. Ленина, 10\",\n \"created_at\": \"2025-06-15\",\n \"active_machines\": 18\n },\n {\n \"id\": 2,\n \"name\": \"ИП Иванов\",\n \"inn\": \"123456789012\",\n \"address\": \"Санкт-Петербург, Невский 25\",\n \"created_at\": \"2025-11-20\",\n \"active_machines\": 3\n }\n]" } ] }, { "name": "Добавить компанию", "request": { "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{authToken}}", "type": "string" } ] }, "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"name\": \"Новая компания тест\",\r\n \"inn\": \"123456789012\",\r\n \"address\": \"Екатеринбург, Малышева 50\",\r\n \"phone\": \"+79991234567\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/companies", "host": [ "{{baseURL}}" ], "path": [ "companies" ] }, "description": "## Регистрация новой компании-франчайзи.\n\n**Метод:** POST \n**Авторизация:** Bearer Token \n**Тело запроса (JSON):**\n\n``` json\n{\n \"name\": string,\n \"inn\": string,\n \"address\": string,\n \"phone\": string,\n \"email\": string\n}\n\n ```\n\n**Ответ (201 Created):** \nСозданный объект компании" }, "response": [ { "name": "201 ОК", "originalRequest": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"name\": \"Новая компания тест\",\r\n \"inn\": \"123456789012\",\r\n \"address\": \"Екатеринбург, Малышева 50\",\r\n \"phone\": \"+79991234567\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/companies", "host": [ "{{baseURL}}" ], "path": [ "companies" ] } }, "status": "Created", "code": 201, "_postman_previewlanguage": "", "header": [ { "key": "Date", "value": "Tue, 03 Feb 2026 11:17:40 GMT" }, { "key": "Content-Type", "value": "application/json; charset=utf-8" }, { "key": "Transfer-Encoding", "value": "chunked" }, { "key": "Connection", "value": "keep-alive" }, { "key": "Content-Encoding", "value": "gzip" }, { "key": "x-srv-trace", "value": "v=1;t=2a65a3b0dc4b6dee" }, { "key": "x-srv-span", "value": "v=1;s=49ad58831a41cc92" }, { "key": "access-control-allow-origin", "value": "*" }, { "key": "x-ratelimit-limit", "value": "120" }, { "key": "x-ratelimit-remaining", "value": "119" }, { "key": "x-ratelimit-reset", "value": "1770117520" }, { "key": "etag", "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\"" }, { "key": "vary", "value": "Accept-Encoding" }, { "key": "x-envoy-upstream-service-time", "value": "182" }, { "key": "cf-cache-status", "value": "DYNAMIC" }, { "key": "Set-Cookie", "value": "__cf_bm=jWt58PEhVN0ePoUENgvDqe_SYayiLf9Ng0HBovLemTg-1770117460-1.0.1.1-D1Rck7fWyzmfR9L82c2XHgIGe1UFN0SH3KO_WNCu2ZhUJYHmncIygTXkbGpEAF98aeCOQKoQKMrrkRghL1327lRvgKGM3g4zNLpHg68stHw; path=/; expires=Tue, 03-Feb-26 11:47:40 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None" }, { "key": "Server", "value": "cloudflare" }, { "key": "CF-RAY", "value": "9c8185f078a08db7-HEL" } ], "cookie": [ { "expires": "Invalid Date", "domain": "", "path": "" } ], "body": "{\n \"id\": 999,\n \"name\": \"Новая компания тест\",\n \"inn\": \"123456789012\",\n \"address\": \"Екатеринбург, Малышева 50\",\n \"phone\": \"+79991234567\",\n \"created_at\": \"2026-02-03T16:45:00Z\",\n \"active_machines\": 0\n}" } ] } ] }, { "name": "Monitoring", "item": [ { "name": "Общее состояние сети", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Статус 200\", () => pm.response.to.have.status(200));\r", "\r", "pm.test(\"Есть ключевые метрики\", () => {\r", " let json = pm.response.json();\r", " pm.expect(json).to.have.property(\"total_machines\");\r", " pm.expect(json).to.have.property(\"online\");\r", " pm.expect(json).to.have.property(\"offline\");\r", " pm.expect(json).to.have.property(\"average_uptime\");\r", "});" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{authToken}}", "type": "string" } ] }, "method": "GET", "header": [], "url": { "raw": "{{baseURL}}/monitoring/status", "host": [ "{{baseURL}}" ], "path": [ "monitoring", "status" ] }, "description": "## Получение общей статистики по состоянию сети торговых автоматов.\n\n**Метод:** GET \n**Авторизация:** Bearer Token \n**Ответ (200 OK):** \nОбъект статистики:\n\n- `total_machines` — общее количество автоматов\n \n- `online` — количество онлайн\n \n- `offline` — количество оффлайн\n \n- `maintenance` — на обслуживании\n \n- `errors` — количество автоматов с ошибками\n \n- `average_uptime` — средняя доступность (%)\n \n- `last_check` — время последней проверки\n \n- `alerts` — массив активных алертов (если есть)" }, "response": [ { "name": "Общее состояние сети", "originalRequest": { "method": "GET", "header": [], "url": { "raw": "{{baseURL}}/monitoring/status", "host": [ "{{baseURL}}" ], "path": [ "monitoring", "status" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "", "header": [ { "key": "Date", "value": "Tue, 03 Feb 2026 11:19:01 GMT" }, { "key": "Content-Type", "value": "application/json; charset=utf-8" }, { "key": "Transfer-Encoding", "value": "chunked" }, { "key": "Connection", "value": "keep-alive" }, { "key": "Content-Encoding", "value": "gzip" }, { "key": "x-srv-trace", "value": "v=1;t=00f877fc16c0dd02" }, { "key": "x-srv-span", "value": "v=1;s=c4d19af1b4b9af0d" }, { "key": "access-control-allow-origin", "value": "*" }, { "key": "x-ratelimit-limit", "value": "120" }, { "key": "x-ratelimit-remaining", "value": "119" }, { "key": "x-ratelimit-reset", "value": "1770117600" }, { "key": "etag", "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\"" }, { "key": "vary", "value": "Accept-Encoding" }, { "key": "x-envoy-upstream-service-time", "value": "178" }, { "key": "cf-cache-status", "value": "DYNAMIC" }, { "key": "Set-Cookie", "value": "__cf_bm=Wi6LBsYnNQn9HUnZ1aFEC8XDQAJDSOtN9e5R8PnBQSA-1770117541-1.0.1.1-.PgzlPqP0HA_QP_FhL0pEAzx_xuBOyWfypKhhOwlQTjjUky_g5JFvZD5csygFyd.k6Akvs72eONVPtDOr7ejbw2OIHXpWCTAxWmOGfL8qIE; path=/; expires=Tue, 03-Feb-26 11:49:01 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None" }, { "key": "Server", "value": "cloudflare" }, { "key": "CF-RAY", "value": "9c8187e5b9778db7-HEL" } ], "cookie": [ { "expires": "Invalid Date", "domain": "", "path": "" } ], "body": "{\n \"total_machines\": 5,\n \"online\": 4,\n \"offline\": 1,\n \"maintenance\": 0,\n \"errors\": 0,\n \"average_uptime\": \"98.7%\",\n \"last_check\": \"2026-02-03T16:12:45Z\",\n \"alerts\": []\n}" } ] } ] }, { "name": "Auth", "item": [ { "name": "Login", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Логин успешен — статус 200\", function () {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "const responseJson = pm.response.json();\r", "if (responseJson.token) {\r", " pm.collectionVariables.set(\"authToken\", responseJson.token);\r", " console.log(\"Токен сохранён в переменную: \" + responseJson.token.substring(0, 20) + \"...\");\r", "}" ], "type": "text/javascript", "packages": {} } } ], "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"username\": \"testuser\",\r\n \"password\": \"testpass123\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/auth/login", "host": [ "{{baseURL}}" ], "path": [ "auth", "login" ] }, "description": "## Авторизация пользователя и получение JWT-токена.\n\n**Метод:** POST \n**Авторизация:** не требуется \n**Тело запроса (JSON):**\n\n``` json\n{\n \"username\": string,\n \"password\": string\n}\n\n ```\n\n**Ответ (200 OK):**\n\n``` json\n{\n \"token\": string (JWT),\n \"refresh_token\": string,\n \"expires_in\": number,\n \"user\": { id, username, role }\n} \n\n ```" }, "response": [ { "name": "Login", "originalRequest": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"username\": \"testuser\",\r\n \"password\": \"testpass123\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/auth/login", "host": [ "{{baseURL}}" ], "path": [ "auth", "login" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "", "header": [ { "key": "Date", "value": "Tue, 03 Feb 2026 11:21:22 GMT" }, { "key": "Content-Type", "value": "application/json; charset=utf-8" }, { "key": "Transfer-Encoding", "value": "chunked" }, { "key": "Connection", "value": "keep-alive" }, { "key": "Content-Encoding", "value": "gzip" }, { "key": "x-srv-trace", "value": "v=1;t=67797a254f2be497" }, { "key": "x-srv-span", "value": "v=1;s=052fc1a55cac11ab" }, { "key": "access-control-allow-origin", "value": "*" }, { "key": "x-ratelimit-limit", "value": "120" }, { "key": "x-ratelimit-remaining", "value": "118" }, { "key": "x-ratelimit-reset", "value": "1770117740" }, { "key": "etag", "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\"" }, { "key": "vary", "value": "Accept-Encoding" }, { "key": "x-envoy-upstream-service-time", "value": "133" }, { "key": "cf-cache-status", "value": "DYNAMIC" }, { "key": "Set-Cookie", "value": "__cf_bm=fjd5JwWWWnFiFJVGr0h93bglrrh5YkoIQT_0iavOw5A-1770117682-1.0.1.1-i.IJRD82Ya56FjsIdsYhRP.MfkokHF7cksOR160mxkQKbaBB1S0o2uTE6bbTpTaGNKhC6NfE1d7ZDi2BoP97T.KJxZ5VCowWiQMX7yNyxAI; path=/; expires=Tue, 03-Feb-26 11:51:22 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None" }, { "key": "Server", "value": "cloudflare" }, { "key": "CF-RAY", "value": "9c818b5c6eea0560-HEL" } ], "cookie": [ { "expires": "Invalid Date", "domain": "", "path": "" } ], "body": "{\n \"token\": \"test-token\",\n \"refresh_token\": \"refresh-test\",\n \"expires_in\": 3600,\n \"user\": {\n \"id\": 1,\n \"username\": \"testuser\",\n \"role\": \"testpass123\"\n }\n}" } ] }, { "name": "Refresh Token", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Refresh успешен — статус 200\", function () {\r", " pm.response.to.have.status(200);\r", "});\r", "\r", "pm.test(\"Новый token в ответе\", function () {\r", " var json = pm.response.json();\r", " pm.expect(json).to.have.property(\"token\");\r", " pm.expect(json.token).to.be.a(\"string\").that.is.not.empty;\r", "});\r", "\r", "// Сохраняем новый токен (перезаписываем старый)\r", "if (pm.response.json().token) {\r", " pm.collectionVariables.set(\"authToken\", pm.response.json().token);\r", " console.log(\"Новый токен после refresh сохранён\");\r", "}\r", "\r", "// Опционально: сохраняем новый refresh_token\r", "if (pm.response.json().refresh_token) {\r", " pm.collectionVariables.set(\"refreshToken\", pm.response.json().refresh_token);\r", "}" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"refresh_token\": \"refresh-test\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/auth/refresh-token", "host": [ "{{baseURL}}" ], "path": [ "auth", "refresh-token" ] }, "description": "## Обновление access-токена с помощью refresh-токена.\n\n**Метод:** POST \n**Авторизация:** не требуется \n**Тело запроса (JSON):**\n\n``` json\n{\n \"refresh_token\": string\n}\n\n ```\n\n**Ответ (200 OK):**\n\n``` json\n{\n \"token\": string,\n \"refresh_token\": string,\n \"expires_in\": number\n}\n\n ```" }, "response": [ { "name": "Успешный refresh 200", "originalRequest": { "method": "POST", "header": [], "body": { "mode": "raw", "raw": "{\r\n \"refresh_token\": \"refresh-test\"\r\n}", "options": { "raw": { "language": "json" } } }, "url": { "raw": "{{baseURL}}/auth/refresh-token", "host": [ "{{baseURL}}" ], "path": [ "auth", "refresh-token" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "", "header": [ { "key": "Date", "value": "Tue, 03 Feb 2026 11:28:47 GMT" }, { "key": "Content-Type", "value": "application/json; charset=utf-8" }, { "key": "Transfer-Encoding", "value": "chunked" }, { "key": "Connection", "value": "keep-alive" }, { "key": "Content-Encoding", "value": "gzip" }, { "key": "x-srv-trace", "value": "v=1;t=678398e6223878fa" }, { "key": "x-srv-span", "value": "v=1;s=2a01ae1591972179" }, { "key": "access-control-allow-origin", "value": "*" }, { "key": "x-ratelimit-limit", "value": "120" }, { "key": "x-ratelimit-remaining", "value": "119" }, { "key": "x-ratelimit-reset", "value": "1770118187" }, { "key": "etag", "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\"" }, { "key": "vary", "value": "Accept-Encoding" }, { "key": "x-envoy-upstream-service-time", "value": "203" }, { "key": "cf-cache-status", "value": "DYNAMIC" }, { "key": "Set-Cookie", "value": "__cf_bm=bG.TIWQ_yUW_o97uBvD869z3OMtqNKvg9f6aKmOPqKA-1770118127-1.0.1.1-Rj0baKP6mQCdKNZPc.6_zXa3LNRJ1ZWF2bStZc4avTPp3z7zCzAxjNvZv7OoEGmzZHSFt80zIn_SJc0qjEL1zW5SWmx5LZZ6VPupMoHyvg0; path=/; expires=Tue, 03-Feb-26 11:58:47 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None" }, { "key": "Server", "value": "cloudflare" }, { "key": "CF-RAY", "value": "9c8196386c9bbc86-HEL" } ], "cookie": [ { "expires": "Invalid Date", "domain": "", "path": "" } ], "body": "{\n \"token\": \"test-token\",\n \"refresh_token\": \"refresh-new-def456-ghi012\",\n \"expires_in\": 3600\n}" } ] }, { "name": "Logout", "event": [ { "listen": "test", "script": { "exec": [ "pm.test(\"Logout успешен\", function () {\r", " pm.expect(pm.response.code).to.be.oneOf([200, 204]);\r", "});\r", "\r", "if (pm.response.code === 200) {\r", " pm.test(\"Сообщение об успешном выходе\", function () {\r", " var json = pm.response.json();\r", " pm.expect(json).to.have.property(\"message\");\r", " pm.expect(json.message).to.include(\"Successfully\");\r", " });\r", "}" ], "type": "text/javascript", "packages": {}, "requests": {} } } ], "request": { "auth": { "type": "bearer", "bearer": [ { "key": "token", "value": "{{authToken}}", "type": "string" } ] }, "method": "POST", "header": [], "url": { "raw": "{{baseURL}}/auth/logout", "host": [ "{{baseURL}}" ], "path": [ "auth", "logout" ] }, "description": "## Выход из системы (инвалидация текущего токена).\n\n**Метод:** POST \n**Авторизация:** Bearer Token \n**Ответ (200 OK):**\n\n``` json\n{\n \"message\": \"Successfully logged out\",\n \"status\": \"success\"\n}\n\n ```" }, "response": [ { "name": "Logout", "originalRequest": { "method": "POST", "header": [], "url": { "raw": "{{baseURL}}/auth/logout", "host": [ "{{baseURL}}" ], "path": [ "auth", "logout" ] } }, "status": "OK", "code": 200, "_postman_previewlanguage": "", "header": [ { "key": "Date", "value": "Tue, 03 Feb 2026 11:31:39 GMT" }, { "key": "Content-Type", "value": "application/json; charset=utf-8" }, { "key": "Transfer-Encoding", "value": "chunked" }, { "key": "Connection", "value": "keep-alive" }, { "key": "Content-Encoding", "value": "gzip" }, { "key": "x-srv-trace", "value": "v=1;t=ea7ec0e8cd6ca9dd" }, { "key": "x-srv-span", "value": "v=1;s=bffede6a70bbd085" }, { "key": "access-control-allow-origin", "value": "*" }, { "key": "x-ratelimit-limit", "value": "120" }, { "key": "x-ratelimit-remaining", "value": "119" }, { "key": "x-ratelimit-reset", "value": "1770118359" }, { "key": "etag", "value": "W/\"f3-HBiIyJWUHUWX/oPT7Emp7x0Nxms\"" }, { "key": "vary", "value": "Accept-Encoding" }, { "key": "x-envoy-upstream-service-time", "value": "177" }, { "key": "cf-cache-status", "value": "DYNAMIC" }, { "key": "Set-Cookie", "value": "__cf_bm=DyTFFCD8Wzg3QLYXN3SlT_CXxUSgehEzJIFoDdbyxm8-1770118299-1.0.1.1-lb1mPsg8X6owCqNgA0XW8fI_oUfEQhCx4K_T1YwaSHnpWAxLWUSr7MCe85YBsn7J7aUYt0wZ5IKc3ZXgxG4DW9uN2egNptT8OgE8UWvRXf8; path=/; expires=Tue, 03-Feb-26 12:01:39 GMT; domain=.pstmn.io; HttpOnly; Secure; SameSite=None" }, { "key": "Server", "value": "cloudflare" }, { "key": "CF-RAY", "value": "9c819a6b3ddec4ef-HEL" } ], "cookie": [ { "expires": "Invalid Date", "domain": "", "path": "" } ], "body": "{\n \"message\": \"Successfully logged out\",\n \"status\": \"success\"\n}" } ] } ] } ], "event": [ { "listen": "prerequest", "script": { "type": "text/javascript", "packages": {}, "requests": {}, "exec": [ "" ] } }, { "listen": "test", "script": { "type": "text/javascript", "packages": {}, "requests": {}, "exec": [ "" ] } } ], "variable": [ { "key": "baseURL", "value": "https://46889495-5399-4ffa-93c0-1dc71ba1fb36.mock.pstmn.io" }, { "key": "companyID", "value": "1" }, { "key": "vendingMachineID", "value": "3" }, { "key": "authToken", "value": "" }, { "key": "accessToken", "value": "test-token" }, { "key": "refreshToken", "value": "refresh-new-def456-ghi012" } ] }