Пиксели и теги
Методы для пикселей 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 получают тот же пиксель и тег, что и оригинал.