Skip to content

Пікселі й теги ​

Методи для пікселів Facebook і тегів Google: завести новий, змінити токен або мітки конверсій, прибрати в архів і повернути, прив'язати до PWA. Що роблять пікселі й теги, див. розділ «Метрики: пікселі й теги» в довіднику.

МетодАдресаЩо робить
GET/fb_pixelsСписок пікселів Facebook
GET/fb_pixels/{id}Один піксель
POST/fb_pixelsДодати піксель
PUT/fb_pixels/{id}Змінити піксель або повернути з архіву
DELETE/fb_pixels/{id}Прибрати піксель в архів
GET/google_tagsСписок тегів Google
GET/google_tags/{id}Один тег
POST/google_tagsДодати тег
PUT/google_tags/{id}Змінити тег або повернути з архіву
DELETE/google_tags/{id}Прибрати тег в архів

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

Список ​

GET/fb_pixels

GET/google_tags

Пікселі й теги, доступні вам, нещодавно змінені зверху. Архівні не показуються.

ПараметрЩо фільтрує
searchЧастина номера пікселя або тегу
archived1 - показати й архівні
team_idКоманда
page, per_pageСторінка та її розмір (за замовчуванням 100)
bash
curl "https://panel.example.com/api/fb_pixels?search=1234" \
  -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('fb_pixels', ['query' => ['search' => '1234']]);
$pixels = json_decode($response->getBody(), true)['data']['fb_pixels'];

foreach ($pixels as $pixel) {
    echo "{$pixel['id']}: піксель {$pixel['pixel_id']}" . 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}/fb_pixels", headers=HEADERS, params={"search": "1234"}, timeout=30)
pixels = response.json()["data"]["fb_pixels"]

for pixel in pixels:
    print(pixel["id"], "піксель", pixel["pixel_id"])
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: '1234' });
const response = await fetch(`${API}/fb_pixels?${params}`, {
  method: 'GET',
  headers,
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

for (const pixel of data.fb_pixels) {
  console.log(pixel.id, 'піксель', pixel.pixel_id);
}
Відповідь
json
{
  "data": {
    "meta": { "current_page": 1, "per_page": 100, "last_page": 1, "total": 1 },
    "fb_pixels": [
      {
        "id": "WZAX",
        "pixel_id": "1234567890123456",
        "access_token": "EAAB...",
        "archived": false,
        "team": { "id": "WQby", "name": "Team A" },
        "groups": [],
        "created_at": "05 Oct 2026 14:23",
        "updated_at": "05 Oct 2026 14:23"
      }
    ]
  }
}

Список тегів приходить так само, але під ключем google_tags, і в кожного тегу замість pixel_id і access_token - tag_id, install_label, registration_label і deposit_label.

Помилки - лише загальні, див. «Вступ до API».

У відповідях є токен пікселя

access_token повертається в кожній відповіді щодо пікселя. Не пишіть ці відповіді в спільні логи й не пересилайте їх - це такий самий секрет, як ключ API.

Один піксель або тег ​

GET/fb_pixels/{id}

GET/google_tags/{id}

Відповідь у data.fb_pixel або data.google_tag, поля ті самі, що в списку.

bash
curl https://panel.example.com/api/google_tags/Lm3T \
  -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,
]);

$tag = json_decode($api->get('google_tags/Lm3T')->getBody(), true)['data']['google_tag'];

echo "{$tag['id']}: тег {$tag['tag_id']}" . PHP_EOL;
python
# pip install requests
import requests

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

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

print(tag["id"], "тег", tag["tag_id"])
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}/google_tags/Lm3T`, {
  method: 'GET',
  headers,
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

console.log(data.google_tag.id, 'тег', data.google_tag.tag_id);
Помилки
КодmessageКоли
403This action is unauthorized.Піксель або тег іншої команди
404Not foundТакого ідентифікатора немає (у тегів - GoogleTag)

Додавання пікселя ​

POST/fb_pixels

ПолеОбов'язковоЩо це
pixel_idтакНомер пікселя з Facebook, від 5 до 20 цифр. В одній команді не повторюється
access_tokenніТокен Conversions API. Без нього конверсії у Facebook із сервера не надсилаються
team_idдля team_lead і adminКоманда; у customer підставляється сама
bash
curl -X POST https://panel.example.com/api/fb_pixels \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"pixel_id": "1234567890123456", "access_token": "EAAB...", "team_id": "WQby"}'
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->post('fb_pixels', ['json' => [
    'pixel_id' => '1234567890123456',
    'access_token' => 'EAAB...',
    'team_id' => 'WQby',
]]);
$pixelId = json_decode($response->getBody(), true)['data']['fb_pixel']['id'];

echo "Піксель додано, id для PWA: {$pixelId}" . PHP_EOL;
python
# pip install requests
import requests

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

response = requests.post(f"{API}/fb_pixels", headers=HEADERS, json={
    "pixel_id": "1234567890123456",
    "access_token": "EAAB...",
    "team_id": "WQby",
}, timeout=30)
pixel_id = response.json()["data"]["fb_pixel"]["id"]

print("Піксель додано, id для PWA:", pixel_id)
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}/fb_pixels`, {
  method: 'POST',
  headers,
  body: JSON.stringify({
    pixel_id: '1234567890123456',
    access_token: 'EAAB...',
    team_id: 'WQby',
  }),
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

console.log('Піксель додано, id для PWA:', data.fb_pixel.id);

Відповідь - створений піксель у data.fb_pixel. Запам'ятайте його id (WZAX) - за ним піксель прив'язується до PWA, номер пікселя для цього не підходить.

Помилки
КодmessageКоли
422The pixel id field format is invalid.pixel_id - не 5-20 цифр
422The pixel id has already been taken.Такий піксель у команді вже є (зокрема в архіві)
422The team id field is required.team_lead або admin не передав team_id
422You do not have access to this teamteam_id чужої команди
422The access token field must not be greater than 512 characters.Токен довший за 512 символів

Додавання тегу ​

POST/google_tags

ПолеОбов'язковоЩо це
tag_idтакІдентифікатор: AW-… (Google Ads), G-… (Analytics) або GTM-… (Tag Manager). В одній команді не повторюється
install_label, registration_label, deposit_labelніМітки конверсій Google Ads для встановлення, реєстрації та депозиту
team_idдля team_lead і adminКоманда; у customer підставляється сама
bash
curl -X POST https://panel.example.com/api/google_tags \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"tag_id": "AW-123456789", "install_label": "AbC-install", "team_id": "WQby"}'
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->post('google_tags', ['json' => [
    'tag_id' => 'AW-123456789',
    'install_label' => 'AbC-install',
    'team_id' => 'WQby',
]]);
$tagId = json_decode($response->getBody(), true)['data']['google_tag']['id'];

echo "Тег додано, id для PWA: {$tagId}" . PHP_EOL;
python
# pip install requests
import requests

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

response = requests.post(f"{API}/google_tags", headers=HEADERS, json={
    "tag_id": "AW-123456789",
    "install_label": "AbC-install",
    "team_id": "WQby",
}, timeout=30)
tag_id = response.json()["data"]["google_tag"]["id"]

print("Тег додано, id для PWA:", tag_id)
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}/google_tags`, {
  method: 'POST',
  headers,
  body: JSON.stringify({
    tag_id: 'AW-123456789',
    install_label: 'AbC-install',
    team_id: 'WQby',
  }),
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

console.log('Тег додано, id для PWA:', data.google_tag.id);

Відповідь - створений тег у data.google_tag.

Помилки
КодmessageКоли
422The tag id field format is invalid.tag_id не схожий на AW-…, G-… або GTM-…
422The tag id has already been taken.Такий тег у команді вже є (зокрема в архіві)
422The team id field is required.team_lead або admin не передав team_id

Зміна ​

PUT/fb_pixels/{id}

PUT/google_tags/{id}

Змінюють лише передані поля, приймають ті самі поля, що й додавання. Зміни починають діяти одразу в усіх PWA з цим пікселем або тегом - самі PWA перезберігати не потрібно.

bash
curl -X PUT https://panel.example.com/api/fb_pixels/WZAX \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" \
  -H "Accept: application/json" \
  -H "Content-Type: application/json" \
  -d '{"access_token": "EAAB-новий"}'
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->put('fb_pixels/WZAX', ['json' => ['access_token' => 'EAAB-новий']]);
$pixel = json_decode($response->getBody(), true)['data']['fb_pixel'];

echo "Токен пікселя {$pixel['pixel_id']} оновлено" . PHP_EOL;
python
# pip install requests
import requests

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

response = requests.put(f"{API}/fb_pixels/WZAX", headers=HEADERS, json={"access_token": "EAAB-новий"}, timeout=30)
pixel = response.json()["data"]["fb_pixel"]

print("Токен пікселя", pixel["pixel_id"], "оновлено")
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}/fb_pixels/WZAX`, {
  method: 'PUT',
  headers,
  body: JSON.stringify({ access_token: 'EAAB-новий' }),
  signal: AbortSignal.timeout(30000),
});
const { data } = await response.json();

console.log('Токен пікселя', data.fb_pixel.pixel_id, 'оновлено');

Відповідь - піксель або тег після зміни.

Помилки
КодmessageКоли
403This action is unauthorized.Піксель або тег іншої команди
422The pixel id field format is invalid.Ті самі перевірки полів, що під час додавання

Архів ​

DELETE/fb_pixels/{id}

DELETE/google_tags/{id}

Прибирають в архів, а не видаляють. PWA продовжують на нього посилатися, але події в архівний піксель або тег не надходять. Повернути - PUT з "archived": false: PWA знову почнуть його використовувати без переналаштування.

bash
# В архів
curl -X DELETE https://panel.example.com/api/fb_pixels/WZAX \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" -H "Accept: application/json"

# Повернути з архіву
curl -X PUT https://panel.example.com/api/fb_pixels/WZAX \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" -H "Accept: application/json" \
  -H "Content-Type: application/json" -d '{"archived": false}'
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,
]);

// Прибрати в архів
$archived = json_decode($api->delete('fb_pixels/WZAX')->getBody(), true)['data']['fb_pixel'];
echo 'В архіве: ' . var_export($archived['archived'], true) . PHP_EOL;

// Повернути з архіву
$restored = json_decode($api->put('fb_pixels/WZAX', ['json' => ['archived' => false]])->getBody(), true)['data']['fb_pixel'];
echo 'В архіве: ' . var_export($restored['archived'], true) . PHP_EOL;
python
# pip install requests
import requests

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

# Прибрати в архів
archived = requests.delete(f"{API}/fb_pixels/WZAX", headers=HEADERS, timeout=30).json()["data"]["fb_pixel"]
print("В архіве:", archived["archived"])

# Повернути з архіву
restored = requests.put(f"{API}/fb_pixels/WZAX", headers=HEADERS, json={"archived": False}, timeout=30).json()["data"]["fb_pixel"]
print("В архіве:", restored["archived"])
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 archiveResponse = await fetch(`${API}/fb_pixels/WZAX`, {
  method: 'DELETE',
  headers,
  signal: AbortSignal.timeout(30000),
});
const archived = (await archiveResponse.json()).data.fb_pixel;
console.log('В архіве:', archived.archived);

// Повернути з архіву
const restoreResponse = await fetch(`${API}/fb_pixels/WZAX`, {
  method: 'PUT',
  headers,
  body: JSON.stringify({ archived: false }),
  signal: AbortSignal.timeout(30000),
});
const restored = (await restoreResponse.json()).data.fb_pixel;
console.log('В архіве:', restored.archived);

Відповідь - піксель або тег з archived: true (після DELETE) або false (після повернення). Відповідь на DELETE приходить без team і groups.

Помилки
КодmessageКоли
403This action is unauthorized.Піксель або тег іншої команди

Прив'язка до PWA ​

У PWA один піксель Facebook і один тег Google. Вони задаються в config.metrics під час зміни PWA (див. розділ API «PWA»):

ПолеЩо це
facebook.pixelIdid пікселя з відповіді API (WZAX), а не номер пікселя
facebook.eventsЯку подію Facebook надсилати на install, registration і deposit: Lead, CompleteRegistration, Purchase, Subscribe, StartTrial, PageView та інші стандартні події
google.tagIdid тегу з відповіді API

Піксель і тег мають бути з тієї самої команди, що й PWA.

config замінюється повністю

Як і під час будь-якої зміни config, спершу отримайте поточний config PWA, змініть у ньому metrics і надішліть назад повністю - див. розділ API «PWA».

bash
curl https://panel.example.com/api/pwas/WZAX \
  -H "Authorization: Bearer ВАШ_КЛЮЧ" -H "Accept: application/json" > pwa.json

jq '{team_id: .data.pwa.team.id, config: (.data.pwa.config
     | .metrics.facebook.pixelId = "WZAX"
     | .metrics.facebook.events = {"install": "Lead", "registration": "CompleteRegistration", "deposit": "Purchase"}
     | .metrics.google.tagId = "Lm3T")}' pwa.json \
| curl -X PUT https://panel.example.com/api/pwas/WZAX \
    -H "Authorization: Bearer ВАШ_КЛЮЧ" -H "Accept: application/json" \
    -H "Content-Type: application/json" -d @-
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,
]);

$pwa = json_decode($api->get('pwas/WZAX')->getBody(), true)['data']['pwa'];

$config = $pwa['config'];
$config['metrics']['facebook']['pixelId'] = 'WZAX';
$config['metrics']['facebook']['events'] = [
    'install' => 'Lead',
    'registration' => 'CompleteRegistration',
    'deposit' => 'Purchase',
];
$config['metrics']['google']['tagId'] = 'Lm3T';

$api->put('pwas/WZAX', ['json' => ['team_id' => $pwa['team']['id'], 'config' => $config]]);

echo "Піксель і тег прив’язано до {$pwa['name']}" . PHP_EOL;
python
# pip install requests
import requests

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

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

config = pwa["config"]
config["metrics"]["facebook"]["pixelId"] = "WZAX"
config["metrics"]["facebook"]["events"] = {
    "install": "Lead",
    "registration": "CompleteRegistration",
    "deposit": "Purchase",
}
config["metrics"]["google"]["tagId"] = "Lm3T"

requests.put(f"{API}/pwas/WZAX", headers=HEADERS, json={"team_id": pwa["team"]["id"], "config": config}, timeout=30)

print("Піксель і тег прив’язано до", pwa["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 getResponse = await fetch(`${API}/pwas/WZAX`, {
  method: 'GET',
  headers,
  signal: AbortSignal.timeout(30000),
});
const pwa = (await getResponse.json()).data.pwa;

const config = pwa.config;
config.metrics.facebook.pixelId = 'WZAX';
config.metrics.facebook.events = {
  install: 'Lead',
  registration: 'CompleteRegistration',
  deposit: 'Purchase',
};
config.metrics.google.tagId = 'Lm3T';

await fetch(`${API}/pwas/WZAX`, {
  method: 'PUT',
  headers,
  body: JSON.stringify({ team_id: pwa.team.id, config }),
  signal: AbortSignal.timeout(30000),
});

console.log('Піксель і тег прив’язано до', pwa.name);
Помилки
КодmessageКоли
422The selected resource does not existТакого id немає - наприклад, передано номер пікселя замість id
422You do not have access to this resourceПіксель або тег команди, до якої у вас немає доступу
422The selected install is invalid.Невідома подія Facebook в events (так само для registration і deposit)

Клони PWA отримують той самий піксель і тег, що й оригінал.