Norly API

REST API для работы с прокси из кода: баланс, заказ, списки доступов, продление и белый список IP. Всё, что делается в кабинете, можно сделать запросом.

Начало работы

Ключ
Создайте ключ в кабинете: Настройки → API. Ключ показывается один раз, сохраните его в секретах.
Авторизация
Передавайте ключ в заголовке Authorization: Bearer nrl_live_… в каждом запросе.
Формат
Запросы и ответы — JSON в UTF-8. Даты — ISO 8601 в UTC, суммы — доллары США числом.
Деньги
Заказы и продления оплачиваются с баланса. Пополнение баланса — только в кабинете.
Базовый URL
https://api.norlyproxy.com/v1
Первый запрос
curl https://api.norlyproxy.com/v1/balance \
  -H "Authorization: Bearer $NORLY_API_KEY"

Ошибки

При ошибке API возвращает HTTP-код и объект error с машинным кодом и текстом для человека.

HTTPcodeКогда
400BAD_REQUESTНе удалось разобрать запрос.
401UNAUTHORIZEDНет ключа, ключ отозван или неверный.
402INSUFFICIENT_FUNDSНе хватает денег на балансе. В ответе поле needed — сколько доплатить.
404NOT_FOUNDПакет, IP или запись не найдены.
422VALIDATIONОшибка в параметрах. В fields — что именно не так.
429TOO_MANY_REQUESTSСлишком часто. Подождите retryAfter секунд.
Пример ошибки 402
{
  "error": {
    "code": "INSUFFICIENT_FUNDS",
    "message": "Не хватает $12.40",
    "needed": 12.4
  }
}

Баланс

Баланс

GET/balance

Текущий баланс аккаунта.

curl -X GET "https://api.norlyproxy.com/v1/balance" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200
{
  "balance": 248.6,
  "currency": "USD"
}

История баланса

GET/transactions

Пополнения, покупки, продления, бонусы и расход Pay as you go — от новых к старым.

Query-параметры

ПараметрТипОписание
limitintegerСколько записей вернуть, от 1 до 200. По умолчанию 50.
beforestringID записи: вернуть операции старше неё. Для постраничной загрузки.
curl -X GET "https://api.norlyproxy.com/v1/transactions?limit=2" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200
{
  "items": [
    {
      "id": "t_9qk2",
      "kind": "purchase",
      "title": "Residential · 50 GB",
      "amount": -130,
      "balanceAfter": 248.6,
      "createdAt": "2026-10-20T14:03:11Z"
    },
    {
      "id": "t_9qk1",
      "kind": "topup",
      "title": "Пополнение · USDT",
      "amount": 300,
      "balanceAfter": 378.6,
      "createdAt": "2026-10-20T13:58:40Z"
    }
  ]
}

Заказы

Справочник продуктов

GET/products

Типы прокси с ценами по объёму, странами и сроками. Нужен, чтобы собрать заказ.

curl -X GET "https://api.norlyproxy.com/v1/products" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200
{
  "products": [
    {
      "id": "residential",
      "name": "Residential",
      "kind": "traffic",
      "unit": "GB",
      "validityDays": 90,
      "tiers": [
        {
          "from": 1,
          "price": 3.5
        },
        {
          "from": 10,
          "price": 3
        },
        {
          "from": 1000,
          "price": 1.5
        }
      ],
      "countries": []
    },
    {
      "id": "isp",
      "name": "ISP",
      "kind": "ip",
      "unit": "IP",
      "udp": true,
      "tiers": [
        {
          "from": 1,
          "price": 2.5
        },
        {
          "from": 100,
          "price": 1.7
        }
      ],
      "periods": [
        {
          "days": 1,
          "label": "1 день"
        },
        {
          "days": 30,
          "label": "1 месяц"
        }
      ],
      "countries": [
        "us",
        "gb",
        "de"
      ]
    }
  ]
}

Расчёт стоимости

POST/orders/quote

Считает цену заказа без покупки. Параметры те же, что у создания заказа.

Тело запроса (JSON)

ПараметрТипОписание
productобязательноstringТип прокси: residential, premium, mobile, isp, datacenter.
modestringpackage — пакет (по умолчанию), payg — Pay as you go (Residential, Premium).
qtyобязательноintegerГигабайты для трафиковых продуктов или количество IP.
daysintegerСрок аренды для ISP и Datacenter: 1, 7, 30, 60 или 90.
countrystringКод страны (ISO 3166-1 alpha-2) для ISP и Datacenter.
citystringГород для ISP — необязательно.
udpbooleanВключить UDP для ISP.
curl -X POST "https://api.norlyproxy.com/v1/orders/quote" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product": "isp", "qty": 10, "days": 30, "country": "us"}'
Ответ 200
{
  "quote": {
    "unitPrice": 2.2,
    "basePrice": 2.5,
    "subtotal": 25,
    "savings": 3,
    "total": 22
  }
}

Создать заказ

POST/orders

Покупает прокси и списывает сумму с баланса. Доступы появляются сразу — заберите их через «Список прокси». Если денег не хватает, вернётся 402 с полем needed.

Тело запроса (JSON)

ПараметрТипОписание
productобязательноstringТип прокси: residential, premium, mobile, isp, datacenter.
modestringpackage — пакет (по умолчанию), payg — Pay as you go (Residential, Premium).
qtyобязательноintegerГигабайты для трафиковых продуктов или количество IP.
daysintegerСрок аренды для ISP и Datacenter: 1, 7, 30, 60 или 90.
countrystringКод страны (ISO 3166-1 alpha-2) для ISP и Datacenter.
citystringГород для ISP — необязательно.
udpbooleanВключить UDP для ISP.
curl -X POST "https://api.norlyproxy.com/v1/orders" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"product": "residential", "qty": 50}'
Ответ 201
{
  "order": {
    "id": "o_4kd82m",
    "product": "residential",
    "mode": "package",
    "qty": 50,
    "days": 90,
    "total": 130,
    "createdAt": "2026-10-21T09:15:00Z"
  },
  "balance": 118.6
}

Прокси

Список прокси

GET/proxies

Пакеты трафика (Residential, Premium, Mobile) и выделенные IP (ISP, Datacenter) с данными для подключения.

Query-параметры

ПараметрТипОписание
typestringТолько один тип: residential, premium, mobile, isp, datacenter.
statusstringactive, depleted или expired.
tagstringТолько IP с этим тегом.
curl -X GET "https://api.norlyproxy.com/v1/proxies?type=isp" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200
{
  "packages": [
    {
      "id": "pk_8f2k1x9a",
      "product": "residential",
      "mode": "package",
      "gbTotal": 50,
      "gbUsed": 38.4,
      "host": "gate.norly.io",
      "httpPort": 7000,
      "socksPort": 7001,
      "username": "nr6vczyd",
      "password": "ewyfuzngcy4t",
      "autoRenew": true,
      "status": "active",
      "createdAt": "2026-09-30T10:12:00Z",
      "expiresAt": "2026-12-29T10:12:00Z"
    }
  ],
  "ips": [
    {
      "id": "ip_3m7qz2kd",
      "product": "isp",
      "ip": "73.162.18.204",
      "httpPort": 8412,
      "socksPort": 9412,
      "username": "nrk2m8pq",
      "password": "q7hx2mfa9c4e",
      "country": "us",
      "city": "Нью-Йорк",
      "udp": true,
      "tags": [
        "fb-farm"
      ],
      "autoRenew": false,
      "status": "active",
      "createdAt": "2026-10-01T08:00:00Z",
      "expiresAt": "2026-10-31T08:00:00Z"
    }
  ]
}

Строки подключения

GET/proxies/lines

Готовые строки в формате вашего софта — то же, что генератор в кабинете. Ответ — text/plain, одна строка на прокси.

Query-параметры

ПараметрТипОписание
sourceобязательноstringID пакета (pk_…) или isp / datacenter — все активные IP этого типа.
formatstringhpup — host:port:user:pass (по умолчанию), upah — user:pass@host:port, url — протокол://user:pass@host:port.
protocolstringhttp (по умолчанию) или socks5.
countintegerСколько строк для пакета, от 1 до 1000. Для IP игнорируется.
countrystringКод страны. Для пакетов.
citystringГород латиницей, например new_york. Для пакетов.
osstringwindows, macos, linux, android или ios. Для пакетов.
poolstringstandard (по умолчанию), performance или ultra. Для пакетов.
ttlintegerSticky-сессия в минутах, от 1 до 1440. Без ttl — новый IP на каждый запрос.
curl -X GET "https://api.norlyproxy.com/v1/proxies/lines?source=pk_8f2k1x9a&count=3&country=us&ttl=30" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200 · text/plain
gate.norly.io:7000:nr6vczyd-country-us-session-x8k2qa-ttl-30:ewyfuzngcy4t
gate.norly.io:7000:nr6vczyd-country-us-session-m4pz7d-ttl-30:ewyfuzngcy4t
gate.norly.io:7000:nr6vczyd-country-us-session-q2hn5c-ttl-30:ewyfuzngcy4t

Теги на IP

PATCH/proxies/ips/tags

Добавляет и снимает теги у выделенных IP. У одного IP до 10 тегов, каждый от 2 до 32 символов.

Тело запроса (JSON)

ПараметрТипОписание
idsобязательноstring[]ID адресов (ip_…).
addstring[]Какие теги добавить.
removestring[]Какие теги снять.
curl -X PATCH "https://api.norlyproxy.com/v1/proxies/ips/tags" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["ip_3m7qz2kd"], "add": ["client-a"], "remove": ["fb-farm"]}'
Ответ 200
{
  "ips": [
    {
      "id": "ip_3m7qz2kd",
      "product": "isp",
      "ip": "73.162.18.204",
      "httpPort": 8412,
      "socksPort": 9412,
      "username": "nrk2m8pq",
      "password": "q7hx2mfa9c4e",
      "country": "us",
      "city": "Нью-Йорк",
      "udp": true,
      "tags": [
        "client-a"
      ],
      "autoRenew": false,
      "status": "active",
      "createdAt": "2026-10-01T08:00:00Z",
      "expiresAt": "2026-10-31T08:00:00Z"
    }
  ]
}

Новый пароль пакета

POST/proxies/packages/{id}/password

Выпускает новый пароль для пакета трафика. Старые строки подключения перестают работать сразу.

Параметры пути

ПараметрТипОписание
idобязательноstringID пакета (pk_…).
curl -X POST "https://api.norlyproxy.com/v1/proxies/packages/pk_8f2k1x9a/password" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200
{
  "package": {
    "id": "pk_8f2k1x9a",
    "product": "residential",
    "mode": "package",
    "gbTotal": 50,
    "gbUsed": 38.4,
    "host": "gate.norly.io",
    "httpPort": 7000,
    "socksPort": 7001,
    "username": "nr6vczyd",
    "password": "k3v9xq2mh7ra",
    "autoRenew": true,
    "status": "active",
    "createdAt": "2026-09-30T10:12:00Z",
    "expiresAt": "2026-12-29T10:12:00Z"
  }
}

Проверка прокси

POST/proxies/check

Подключается через прокси и возвращает внешний IP, страну, город и задержку.

Тело запроса (JSON)

ПараметрТипОписание
hostобязательноstringХост прокси.
portобязательноintegerПорт.
usernamestringЛогин, если доступ не по IP.
passwordstringПароль.
curl -X POST "https://api.norlyproxy.com/v1/proxies/check" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"host": "gate.norly.io", "port": 7000, "username": "nr6vczyd-country-de", "password": "ewyfuzngcy4t"}'
Ответ 200
{
  "ok": true,
  "ip": "91.64.112.37",
  "country": "de",
  "city": "Франкфурт",
  "isp": "Deutsche Telekom",
  "latencyMs": 212
}

Продление

Продлить IP

POST/proxies/ips/renew

Продлевает выделенные IP на выбранный срок и списывает сумму с баланса. Скидка за количество считается по каждому типу отдельно.

Тело запроса (JSON)

ПараметрТипОписание
idsобязательноstring[]ID адресов (ip_…).
daysобязательноintegerСрок: 1, 7, 30, 60 или 90.
curl -X POST "https://api.norlyproxy.com/v1/proxies/ips/renew" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["ip_3m7qz2kd"], "days": 30}'
Ответ 200
{
  "ips": [
    {
      "id": "ip_3m7qz2kd",
      "product": "isp",
      "ip": "73.162.18.204",
      "httpPort": 8412,
      "socksPort": 9412,
      "username": "nrk2m8pq",
      "password": "q7hx2mfa9c4e",
      "country": "us",
      "city": "Нью-Йорк",
      "udp": true,
      "tags": [
        "fb-farm"
      ],
      "autoRenew": false,
      "status": "active",
      "createdAt": "2026-10-01T08:00:00Z",
      "expiresAt": "2026-11-30T08:00:00Z"
    }
  ],
  "total": 2.5,
  "balance": 246.1
}

Автопродление IP

PATCH/proxies/ips

Включает или выключает автопродление. Деньги спишутся с баланса в день окончания срока.

Тело запроса (JSON)

ПараметрТипОписание
idsобязательноstring[]ID адресов (ip_…).
autoRenewобязательноbooleantrue — включить, false — выключить.
curl -X PATCH "https://api.norlyproxy.com/v1/proxies/ips" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ids": ["ip_3m7qz2kd"], "autoRenew": true}'
Ответ 200
{
  "ips": [
    {
      "id": "ip_3m7qz2kd",
      "product": "isp",
      "ip": "73.162.18.204",
      "httpPort": 8412,
      "socksPort": 9412,
      "username": "nrk2m8pq",
      "password": "q7hx2mfa9c4e",
      "country": "us",
      "city": "Нью-Йорк",
      "udp": true,
      "tags": [
        "fb-farm"
      ],
      "autoRenew": true,
      "status": "active",
      "createdAt": "2026-10-01T08:00:00Z",
      "expiresAt": "2026-10-31T08:00:00Z"
    }
  ]
}

Автопродление пакета

PATCH/proxies/packages/{id}

Когда трафик пакета закончится, такой же пакет купится заново с баланса.

Параметры пути

ПараметрТипОписание
idобязательноstringID пакета (pk_…).

Тело запроса (JSON)

ПараметрТипОписание
autoRenewобязательноbooleantrue — включить, false — выключить.
curl -X PATCH "https://api.norlyproxy.com/v1/proxies/packages/pk_8f2k1x9a" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"autoRenew": false}'
Ответ 200
{
  "package": {
    "id": "pk_8f2k1x9a",
    "product": "residential",
    "mode": "package",
    "gbTotal": 50,
    "gbUsed": 38.4,
    "host": "gate.norly.io",
    "httpPort": 7000,
    "socksPort": 7001,
    "username": "nr6vczyd",
    "password": "ewyfuzngcy4t",
    "autoRenew": false,
    "status": "active",
    "createdAt": "2026-09-30T10:12:00Z",
    "expiresAt": "2026-12-29T10:12:00Z"
  }
}

Доступ по IP

Белый список

GET/whitelist

Адреса и подсети, с которых прокси работают без логина и пароля.

curl -X GET "https://api.norlyproxy.com/v1/whitelist" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200
{
  "entries": [
    {
      "id": "wl_7d2k",
      "ip": "91.203.12.44",
      "note": "Сервер парсинга",
      "createdAt": "2026-10-12T11:00:00Z"
    }
  ],
  "currentIp": "188.162.74.51",
  "limit": 20
}

Добавить адрес

POST/whitelist

Добавляет IPv4-адрес или подсеть в формате CIDR. Максимум 20 записей.

Тело запроса (JSON)

ПараметрТипОписание
ipобязательноstringАдрес или подсеть: 91.203.12.44 или 91.203.12.0/24.
notestringПодпись, до 40 символов.
curl -X POST "https://api.norlyproxy.com/v1/whitelist" \
  -H "Authorization: Bearer $NORLY_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"ip": "91.203.12.44", "note": "Сервер парсинга"}'
Ответ 201
{
  "entries": [
    {
      "id": "wl_7d2k",
      "ip": "91.203.12.44",
      "note": "Сервер парсинга",
      "createdAt": "2026-10-21T09:20:00Z"
    }
  ]
}

Удалить адрес

DELETE/whitelist/{id}

Убирает запись из белого списка. Подключения с этого адреса снова потребуют логин и пароль.

Параметры пути

ПараметрТипОписание
idобязательноstringID записи (wl_…).
curl -X DELETE "https://api.norlyproxy.com/v1/whitelist/wl_7d2k" \
  -H "Authorization: Bearer $NORLY_API_KEY"
Ответ 200
{
  "entries": []
}