Skip to content

Справочники ​

Методы, которые только читают: откуда взять team_id, cloudflare_id, filter_account_id и filter_stream_id для создания PWA, сплитов и доменов. Проверить сам ключ и узнать, чей он, можно запросом профиля - см. «Введение в API».

МетодАдресЧто делает
GET/teamsВаши команды
GET/cloudflaresАккаунты Cloudflare
GET/filter_accountsАккаунты фильтрации
GET/filter_accounts/{id}/streamsПотоки в аккаунте Adspect

Замените ВАШ_КЛЮЧ и panel.example.com на свои.

Команды ​

GET/teams

Команды, в которых вы состоите, по алфавиту. admin видит все команды панели.

ПараметрЧто фильтрует
searchЧасть названия
page, per_pageСтраница и её размер (по умолчанию 100)
bash
curl https://panel.example.com/api/teams \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Accept: application/json"
php
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$api = new GuzzleHttp\Client([
    'base_uri' => 'https://panel.example.com/api/',
    'headers' => ['Authorization' => 'Bearer ВАШ_КЛЮЧ', 'Accept' => 'application/json'],
    'timeout' => 30,
]);

$teams = json_decode($api->get('teams')->getBody(), true)['data']['teams'];

foreach ($teams as $team) {
    echo "{$team['id']} {$team['name']}" . PHP_EOL;
}
python
# pip install requests
import requests

API = "https://panel.example.com/api"
HEADERS = {"Authorization": "Bearer ВАШ_КЛЮЧ", "Accept": "application/json"}

teams = requests.get(f"{API}/teams", headers=HEADERS, timeout=30).json()["data"]["teams"]

for team in teams:
    print(team["id"], team["name"])
js
// Node.js 18+, без зависимостей; сохраните как script.mjs
const API = 'https://panel.example.com/api';
const headers = { Authorization: 'Bearer ВАШ_КЛЮЧ', Accept: 'application/json', 'Content-Type': 'application/json' };

const response = await fetch(`${API}/teams`, {
  method: 'GET',
  headers,
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

for (const team of data.teams) {
  console.log(team.id, team.name);
}
Ответ
json
{
  "data": {
    "meta": { "current_page": 1, "per_page": 100, "last_page": 1, "total": 1 },
    "teams": [
      { "id": "WQby", "name": "Team A", "users_count": 4, "created_at": "05 Oct 2026 14:23", "updated_at": "05 Oct 2026 14:23" }
    ]
  }
}

Ошибки - только общие, см. «Введение в API».

Аккаунты Cloudflare ​

GET/cloudflares

Аккаунты Cloudflare панели, основной (Primary) первым. Архивные не показываются. Сами аккаунты заводит администратор в панели.

ПараметрЧто фильтрует
searchЧасть email аккаунта
healthok - только рабочие, error - только с ошибкой
page, per_pageСтраница и её размер (по умолчанию 100)
bash
curl "https://panel.example.com/api/cloudflares?health=ok" \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Accept: application/json"
php
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$api = new GuzzleHttp\Client([
    'base_uri' => 'https://panel.example.com/api/',
    'headers' => ['Authorization' => 'Bearer ВАШ_КЛЮЧ', 'Accept' => 'application/json'],
    'timeout' => 30,
]);

$response = $api->get('cloudflares', ['query' => ['health' => 'ok']]);
$accounts = json_decode($response->getBody(), true)['data']['cloudflares'];

foreach ($accounts as $account) {
    echo "{$account['id']} {$account['email']}" . ($account['is_primary'] ? ' (основной)' : '') . PHP_EOL;
}
python
# pip install requests
import requests

API = "https://panel.example.com/api"
HEADERS = {"Authorization": "Bearer ВАШ_КЛЮЧ", "Accept": "application/json"}

response = requests.get(f"{API}/cloudflares", headers=HEADERS, params={"health": "ok"}, timeout=30)
accounts = response.json()["data"]["cloudflares"]

for account in accounts:
    print(account["id"], account["email"], "(основной)" if account["is_primary"] else "")
js
// Node.js 18+, без зависимостей; сохраните как script.mjs
const API = 'https://panel.example.com/api';
const headers = { Authorization: 'Bearer ВАШ_КЛЮЧ', Accept: 'application/json', 'Content-Type': 'application/json' };

const params = new URLSearchParams({ health: 'ok' });
const response = await fetch(`${API}/cloudflares?${params}`, {
  method: 'GET',
  headers,
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

for (const account of data.cloudflares) {
  console.log(account.id, account.email, account.is_primary ? '(основной)' : '');
}
Ответ
json
{
  "data": {
    "meta": { "current_page": 1, "per_page": 100, "last_page": 1, "total": 1 },
    "cloudflares": [
      {
        "id": "Lm3T",
        "email": "[email protected]",
        "is_primary": true,
        "archived": false,
        "status_error": null,
        "status_checked_at": "05 Oct 2026 14:00",
        "domains_count": 12
      }
    ]
  }
}

status_error - последняя ошибка проверки аккаунта, null - аккаунт в порядке. domains_count - сколько доменов в нём.

Ошибки - только общие, см. «Введение в API».

Аккаунты фильтрации ​

GET/filter_accounts

Аккаунты фильтрации трафика, основной первым. Архивные не показываются.

ПараметрЧто фильтрует
searchЧасть названия
typeСервис: adspect, fraudfilter или trafficarmor
page, per_pageСтраница и её размер (по умолчанию 100)
bash
curl "https://panel.example.com/api/filter_accounts?type=adspect" \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Accept: application/json"
php
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$api = new GuzzleHttp\Client([
    'base_uri' => 'https://panel.example.com/api/',
    'headers' => ['Authorization' => 'Bearer ВАШ_КЛЮЧ', 'Accept' => 'application/json'],
    'timeout' => 30,
]);

$response = $api->get('filter_accounts', ['query' => ['type' => 'adspect']]);
$accounts = json_decode($response->getBody(), true)['data']['filter_accounts'];

foreach ($accounts as $account) {
    echo "{$account['id']} {$account['name']}" . PHP_EOL;
}
python
# pip install requests
import requests

API = "https://panel.example.com/api"
HEADERS = {"Authorization": "Bearer ВАШ_КЛЮЧ", "Accept": "application/json"}

response = requests.get(f"{API}/filter_accounts", headers=HEADERS, params={"type": "adspect"}, timeout=30)
accounts = response.json()["data"]["filter_accounts"]

for account in accounts:
    print(account["id"], account["name"])
js
// Node.js 18+, без зависимостей; сохраните как script.mjs
const API = 'https://panel.example.com/api';
const headers = { Authorization: 'Bearer ВАШ_КЛЮЧ', Accept: 'application/json', 'Content-Type': 'application/json' };

const params = new URLSearchParams({ type: 'adspect' });
const response = await fetch(`${API}/filter_accounts?${params}`, {
  method: 'GET',
  headers,
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

for (const account of data.filter_accounts) {
  console.log(account.id, account.name);
}
Ответ
json
{
  "data": {
    "meta": { "current_page": 1, "per_page": 100, "last_page": 1, "total": 1 },
    "filter_accounts": [
      { "id": "Rt7Q", "name": "Adspect main", "type": "adspect", "is_primary": true, "archived": false }
    ]
  }
}

Ошибки - только общие, см. «Введение в API».

Потоки Adspect ​

GET/filter_accounts/{id}/streams

Потоки в аккаунте Adspect. stream_id из ответа - это filter_stream_id для PWA и сплитов.

ПараметрЧто это
searchЧасть названия потока
streamstream_id потока - вернуть его в поле selected, даже если он не попал в поиск
refresh1 - запросить список у Adspect заново, минуя кэш

Для fraudfilter и trafficarmor список всегда пустой: у этих сервисов нет API потоков, идентификатор потока берите в их кабинете.

bash
curl "https://panel.example.com/api/filter_accounts/Rt7Q/streams?search=Promo" \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Accept: application/json"
php
<?php
// composer require guzzlehttp/guzzle
require 'vendor/autoload.php';

$api = new GuzzleHttp\Client([
    'base_uri' => 'https://panel.example.com/api/',
    'headers' => ['Authorization' => 'Bearer ВАШ_КЛЮЧ', 'Accept' => 'application/json'],
    'timeout' => 30,
]);

$response = $api->get('filter_accounts/Rt7Q/streams', ['query' => ['search' => 'Promo']]);
$streams = json_decode($response->getBody(), true)['data']['streams'];

foreach ($streams as $stream) {
    echo "{$stream['stream_id']} {$stream['name']}" . PHP_EOL;
}
python
# pip install requests
import requests

API = "https://panel.example.com/api"
HEADERS = {"Authorization": "Bearer ВАШ_КЛЮЧ", "Accept": "application/json"}

response = requests.get(f"{API}/filter_accounts/Rt7Q/streams", headers=HEADERS, params={"search": "Promo"}, timeout=30)
streams = response.json()["data"]["streams"]

for stream in streams:
    print(stream["stream_id"], stream["name"])
js
// Node.js 18+, без зависимостей; сохраните как script.mjs
const API = 'https://panel.example.com/api';
const headers = { Authorization: 'Bearer ВАШ_КЛЮЧ', Accept: 'application/json', 'Content-Type': 'application/json' };

const params = new URLSearchParams({ search: 'Promo' });
const response = await fetch(`${API}/filter_accounts/Rt7Q/streams?${params}`, {
  method: 'GET',
  headers,
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

for (const stream of data.streams) {
  console.log(stream.stream_id, stream.name);
}
Ответ
json
{
  "data": {
    "streams": [
      { "stream_id": "a1b2c3", "name": "Promo EN", "mode": "Filter" },
      { "stream_id": "d4e5f6", "name": "Promo DE", "mode": "Filter" }
    ],
    "selected": null
  }
}

Приходит не больше 100 потоков - если нужного нет, уточните search.

Ошибки
КодmessageКогда
404Not foundТакого аккаунта нет
422Filter account not foundАккаунт в архиве
422Adspect account has no API keyУ аккаунта Adspect не задан API-ключ
422текст ошибки от Adspect, например Invalid API keyAdspect отклонил ключ аккаунта
502Adspect request failedAdspect не ответил

Не добавляйте refresh=1 в циклы

Список потоков кэшируется на 5 минут. С refresh=1 каждый запрос уходит в Adspect - в цикле это быстро упрётся в лимиты самого Adspect. Используйте его один раз, если только что создали поток в кабинете Adspect и не видите его в списке.