Пікселі й теги
Методи для пікселів 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 | Частина номера пікселя або тегу |
archived | 1 - показати й архівні |
team_id | Команда |
page, per_page | Сторінка та її розмір (за замовчуванням 100) |
curl "https://panel.example.com/api/fb_pixels?search=1234" \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Accept: application/json"<?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;
}# 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"])// 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);
}Відповідь
{
"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, поля ті самі, що в списку.
curl https://panel.example.com/api/google_tags/Lm3T \
-H "Authorization: Bearer ВАШ_КЛЮЧ" \
-H "Accept: application/json"<?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;# 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"])// 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 | Коли |
|---|---|---|
403 | This action is unauthorized. | Піксель або тег іншої команди |
404 | Not found | Такого ідентифікатора немає (у тегів - GoogleTag) |
Додавання пікселя
POST/fb_pixels
| Поле | Обов'язково | Що це |
|---|---|---|
pixel_id | так | Номер пікселя з Facebook, від 5 до 20 цифр. В одній команді не повторюється |
access_token | ні | Токен Conversions API. Без нього конверсії у Facebook із сервера не надсилаються |
team_id | для team_lead і admin | Команда; у customer підставляється сама |
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
// 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;# 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)// 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 | Коли |
|---|---|---|
422 | The pixel id field format is invalid. | pixel_id - не 5-20 цифр |
422 | The pixel id has already been taken. | Такий піксель у команді вже є (зокрема в архіві) |
422 | The team id field is required. | team_lead або admin не передав team_id |
422 | You do not have access to this team | team_id чужої команди |
422 | The 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 підставляється сама |
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
// 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;# 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)// 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 | Коли |
|---|---|---|
422 | The tag id field format is invalid. | tag_id не схожий на AW-…, G-… або GTM-… |
422 | The tag id has already been taken. | Такий тег у команді вже є (зокрема в архіві) |
422 | The team id field is required. | team_lead або admin не передав team_id |
Зміна
PUT/fb_pixels/{id}
PUT/google_tags/{id}
Змінюють лише передані поля, приймають ті самі поля, що й додавання. Зміни починають діяти одразу в усіх PWA з цим пікселем або тегом - самі PWA перезберігати не потрібно.
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
// 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;# 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"], "оновлено")// 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 | Коли |
|---|---|---|
403 | This action is unauthorized. | Піксель або тег іншої команди |
422 | The pixel id field format is invalid. | Ті самі перевірки полів, що під час додавання |
Архів
DELETE/fb_pixels/{id}
DELETE/google_tags/{id}
Прибирають в архів, а не видаляють. PWA продовжують на нього посилатися, але події в архівний піксель або тег не надходять. Повернути - PUT з "archived": false: PWA знову почнуть його використовувати без переналаштування.
# В архів
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
// 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;# 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"])// 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 | Коли |
|---|---|---|
403 | This action is unauthorized. | Піксель або тег іншої команди |
Прив'язка до PWA
У PWA один піксель Facebook і один тег Google. Вони задаються в config.metrics під час зміни PWA (див. розділ API «PWA»):
| Поле | Що це |
|---|---|
facebook.pixelId | id пікселя з відповіді API (WZAX), а не номер пікселя |
facebook.events | Яку подію Facebook надсилати на install, registration і deposit: Lead, CompleteRegistration, Purchase, Subscribe, StartTrial, PageView та інші стандартні події |
google.tagId | id тегу з відповіді API |
Піксель і тег мають бути з тієї самої команди, що й PWA.
config замінюється повністю
Як і під час будь-якої зміни config, спершу отримайте поточний config PWA, змініть у ньому metrics і надішліть назад повністю - див. розділ API «PWA».
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
// 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;# 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"])// 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 | Коли |
|---|---|---|
422 | The selected resource does not exist | Такого id немає - наприклад, передано номер пікселя замість id |
422 | You do not have access to this resource | Піксель або тег команди, до якої у вас немає доступу |
422 | The selected install is invalid. | Невідома подія Facebook в events (так само для registration і deposit) |
Клони PWA отримують той самий піксель і тег, що й оригінал.