Pre-request и after-response выполняются локально в песочнице. Канонический API — объект poly. pm — совместимый алиас того же объекта: вставленные скрипты из Postman работают как есть. Скрипты доступны на Free.
Откройте запрос → вкладка Scripts. Два поля:
poly.sendRequest.token из JSON, проверить статус, залогировать тело.Скрипты пишутся на JavaScript. console.log / warn / error попадают в консоль сессии IDE.
polyВ PolyApiIDE каноническое имя объекта — poly, не pm. Пишите новые скрипты через poly.*.
pm — совместимый алиас: это обёртка над тем же объектом. Скрипты, импортированные из Postman, можно вставлять как есть — pm.environment.set и poly.environment.set меняют одно и то же окружение.
poly.sendRequest / pm.sendRequestВызов реально отправляет HTTP через тот же стек Send, что и кнопка Send в IDE (URL, auth, cookies запроса, прокси, подстановка переменных). Это не заглушка и не отдельный fetch из песочницы: сеть идёт из расширения по инициативе скрипта, который вы сами запустили.
Удалённого выполнения вашего кода на серверах PolyApiIDE нет.
Скрипт компилируется локально через new Function в sandbox-странице расширения. Код не уходит на polyapiclient.ru. Это соответствует политикам Chrome Web Store: нет удалённого произвольного кода, нет скрытой сети из пользовательского скрипта мимо стека Send.
Скрипты доступны на Free — ключ не нужен. QA-сценарии, Collection Runner, load, AI и облачный бэкап по-прежнему на платных тарифах.
polypoly.environment.get(name) / set(name, value) / unset(name) / has(name) / toObject() — активное окружение.poly.variables.get/set — переменные текущего слоя (как в Postman pm.variables).poly.collectionVariables.get/set — переменные коллекции.poly.globals.get/set — globals пространства.poly.test(name, fn) — проверка; результат пишется в консоль сессии.poly.response.json() / text() / code — только в after-response.poly.cookies.get(name) — cookies, сохранённые у запроса/коллекции (в том числе после явной синхронизации с сайта).Те же методы есть у pm.
Кроме обычной подстановки {{name}} / {identifier}, в PolyApiIDE есть готовые Postman-совместимые пресеты вида {{$guid}}: значение вычисляется заново при каждой отправке запроса, сохранять его в переменные не нужно. Работают в URL, Headers, Params и Body — везде, где подставляются обычные переменные.
{{$guid}} / {{$uuid}} — UUID v4, например 550e8400-e29b-41d4-a716-446655440000 ($uuid — синоним $guid).{{$timestamp}} — Unix-время в секундах, например 1710000000.{{$isoTimestamp}} — время в ISO-8601 UTC, например 2026-08-11T20:00:00.000Z.{{$randomInt}} — случайное целое число от 0 до 1000.{{$randomEmail}} — случайный email, например user42@example.com.{{$randomUserName}} — случайный юзернейм, например user_ab12.{{$randomFirstName}}, {{$randomLastName}}, {{$randomFullName}} — случайные имя, фамилия и имя + фамилия.{{$randomPhoneNumber}} — телефон в формате, похожем на E.164, например +15551234567.{{$randomUrl}} — случайный HTTPS-URL.{{$randomAlphaNumeric}} — 16 случайных алфавитно-цифровых символов.{{$randomHexColor}} — HEX-цвет, например #a1b2c3.{{$randomBoolean}} — строка true или false.{{$randomIP}} / {{$randomIPV6}} — случайный IPv4- или IPv6-адрес.{{$randomPassword}} — случайный пароль из 20 символов.{{$randomLocale}} — тег локали, например en-US.{{$randomColor}} — название цвета, например blue.Тот же список открывается прямо в расширении — кнопка «Пресеты» рядом с редактором переменных (запрос, коллекция, пространство, окружение).
pm.sendRequestPre-request. Можно вставить скрипт из Postman без правок:
pm.sendRequest({
url: pm.environment.get("baseUrl") + "/login",
method: "POST",
header: { "Content-Type": "application/json" },
body: {
mode: "raw",
raw: JSON.stringify({
username: pm.environment.get("username"),
password: pm.environment.get("password")
})
}
}, function (err, res) {
if (err) {
console.log(err);
return;
}
const data = res.json();
pm.environment.set("token", data.token || data.access_token);
console.log("token updated");
});
poly.*poly.sendRequest({
url: poly.environment.get("baseUrl") + "/login",
method: "POST",
header: { "Content-Type": "application/json" },
body: {
mode: "raw",
raw: JSON.stringify({
username: poly.environment.get("username"),
password: poly.environment.get("password")
})
}
}, function (err, res) {
if (err) {
console.log(err);
return;
}
const data = res.json();
poly.environment.set("token", data.token || data.access_token);
console.log("token updated");
});
if (poly.response.code >= 200 && poly.response.code < 300) {
try {
const data = poly.response.json();
if (data.token || data.access_token) {
poly.environment.set("token", data.token || data.access_token);
console.log("token updated");
}
} catch (e) {
console.log("ответ не JSON");
}
}
poly.test("status is 2xx", function () {
if (poly.response.code < 200 || poly.response.code >= 300) {
throw new Error("unexpected status " + poly.response.code);
}
});
В IDE можно нажать Sync cookies from site («Синхронизировать cookies с сайта») — это отдельное явное действие, не скрипт. После синхронизации значения попадают в cookies запроса и доступны хелперам:
const sid = poly.cookies.get("sessionid");
console.log("sessionid", sid);
Разрешение cookies запрашивается по клику и только для hostname URL запроса. Подробности — в политике конфиденциальности.