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