Aller au contenu principal

Pixels de suivi

Ces quatre endpoints gèrent les pixels de suivi d'une boutique, la même liste que le marchand modifie sur la page Paramètres des pixels du dashboard (/dashboard/pixels). Une boutique accepte sept types de pixel : Meta (Facebook), TikTok, Snapchat, Pinterest, Google Analytics, Google Tag Manager et Google Ads. Ce dont chaque plateforme a besoin, et comment vérifier que ses événements arrivent, se trouve dans le guide des pixels.

Les vérifications sont purement syntaxiques. Un 201 veut dire que les identifiants sont bien formés, pas que la plateforme publicitaire les a acceptés. Le token d'accès des événements serveur est en écriture seule : aucun endpoint ne le renvoie, et has_token indique si un token est enregistré.

Avant de commencer​

  • GET demande pixels:read. POST, PATCH et DELETE demandent pixels:write et une Idempotency-Key (voir Idempotence). Les clés créées depuis le dashboard (Paramètres → API, /dashboard/api) ont les deux portées. Les portées sont figées à la création de la clé : une clé plus ancienne sans celle qu'il faut répond 403 forbidden. Créez une nouvelle clé depuis le dashboard.
  • Le plan fixe le nombre de pixels qu'une boutique peut avoir : aucun sur Free, un de chaque type sur Pro, sans limite sur Unlimited et Enterprise. Une clé personnelle ne fonctionne que sur une boutique avec un plan Enterprise actif. Une application installée peut aussi agir sur des boutiques en Free ou en Pro, où la limite s'applique.
  • Le marchand peut affecter un pixel à des produits, des catégories ou des landing pages depuis le dashboard. L'API ne lit ni ne modifie ces affectations.
PortéeDescription
pixels:readLire les pixels de suivi de la boutique. Les tokens d'accès ne sont jamais renvoyés.
pixels:writeAjouter, modifier et supprimer des pixels de suivi.

L'objet pixel​

ChampTypeNotes
idintL'id du pixel chez DZBuild, utilisé dans le chemin de PATCH et DELETE.
pixel_typestringL'un des sept types ci-dessous. Fixé à la création.
pixel_idstringL'identifiant de pixel, de balise ou de mesure fourni par la plateforme publicitaire. Fixé à la création.
pixel_namestring ou nullNom affiché.
has_tokenbooltrue quand un token d'accès pour les événements serveur est enregistré.
test_event_codestring ou nullLe code de test des événements saisi dans le dashboard. L'API ne peut pas le définir, et un PATCH qui écrit un champ l'efface.
ad_account_idstring ou nullL'identifiant du compte publicitaire Pinterest.
conversion_labelstring ou nullLe libellé de conversion Google Ads.
is_activeboolfalse garde le pixel et coupe ses événements navigateur et serveur.
is_defaultboolLe passer à true le retire des autres pixels du même type de la boutique. L'endroit où un pixel se charge n'en dépend pas.
created_at, updated_atstringYYYY-MM-DD HH:MM:SS, heure d'Alger.

Types de pixel​

pixel_typePlateformeÉvénements serveur
facebookMeta (Facebook)Oui, quand le pixel a un token d'accès.
tiktokTikTokOui, quand le pixel a un token d'accès.
snapchatSnapchatOui, quand le pixel a un token d'accès.
pinterestPinterestOui, quand le pixel a un token d'accès et un ad_account_id.
google_analyticsGoogle AnalyticsNon.
gtmGoogle Tag ManagerNon.
google_adsGoogle AdsNon. conversion_label n'est lu que pour ce type.

Un token envoyé pour un type sans événements serveur est enregistré mais jamais utilisé.

Où un pixel se charge​

Un pixel actif sans affectation se charge sur toutes les pages de la vitrine, landing pages incluses. Un pixel que le marchand a affecté à des produits, des catégories ou des landing pages ne se charge que sur les pages correspondantes, et ses événements serveur suivent la même règle. Un pixel créé par l'API démarre sans affectation.

Le token d'accès​

access_token est le token des événements serveur copié depuis le gestionnaire d'événements de la plateforme publicitaire. L'API retire les caractères invisibles ainsi que les espaces et les guillemets qui l'entourent, puis le refuse avec 422 invalid_access_token s'il contient encore <, une espace ou un saut de ligne, s'il est égal à pixel_id, ou si un token facebook fait moins de 40 caractères.

  • Aucun endpoint ne renvoie le token. L'historique des changements de la boutique garde le masque •••••••• à sa place.
  • Sur PATCH, une chaîne vide, null ou une valeur contenant ce masque garde le token enregistré. Un token peut être remplacé mais pas retiré par l'API : pour l'enlever, supprimez le pixel et ajoutez-le de nouveau sans token, ce qui supprime aussi ses affectations.

GET /v1/pixels​

Les pixels de la boutique, du plus récent au plus ancien, avec l'allocation du plan dans limits.

Auth : clé plateforme avec pixels:read.

Paramètres de requête​

ParamTypeDéfautNotes
pixel_typestringaucunSeulement les pixels de ce type. Un type inconnu renvoie une liste vide.
limitint50De 1 à 200.
cursorstringaucunLe next_cursor de la page précédente. Voir Pagination.

Requête​

curl 'https://api.dzbuild.app/v1/pixels?pixel_type=facebook' \
-H "Authorization: Bearer $DZ_KEY"

Réponse 200​

{
"data": {
"items": [
{
"id": 12,
"pixel_type": "facebook",
"pixel_id": "123456789012345",
"pixel_name": "Main ad account",
"has_token": true,
"test_event_code": null,
"ad_account_id": null,
"conversion_label": null,
"is_active": true,
"is_default": false,
"created_at": "2026-10-01 14:20:05",
"updated_at": "2026-10-01 14:20:05"
}
],
"next_cursor": null,
"has_more": false,
"limits": {
"plan": "enterprise",
"can_add": true,
"per_type_limit": null,
"total_limit": null,
"counts": {
"facebook": 1,
"tiktok": 1,
"snapchat": 0,
"pinterest": 0,
"google_analytics": 1,
"gtm": 0,
"google_ads": 0
},
"total": 3
}
}
}

limits​

limits accompagne chaque page et décrit toute la boutique, quel que soit le pixel_type filtré.

ChampSignification
planLe plan de la boutique dont vient l'allocation.
can_addfalse quand le plan n'autorise aucun pixel. Il ignore les compteurs : comparez counts à per_type_limit avant d'ajouter un pixel.
per_type_limitPixels autorisés par type, null pour aucune limite.
total_limitPixels autorisés au total, null pour aucune limite.
countsPixels par type, avec une clé pour chacun des sept types.
totalTous les pixels de la boutique, actifs ou non.

POST /v1/pixels​

Ajoute un pixel et répond 201 avec celui-ci.

Auth : clé plateforme avec pixels:write. Nécessite Idempotency-Key.

Corps​

ChampTypeRequisNotes
pixel_typestringouiL'un des sept types, en majuscules ou en minuscules. type est accepté aussi.
pixel_idstringouiDe 1 à 100 lettres, chiffres, - ou _. Un id facebook compte 15 à 17 chiffres, copiés depuis Events Manager.
pixel_namestringnonCoupé à 100 caractères. name est accepté aussi.
access_tokenstringnonSuit les règles du token d'accès ci-dessus. Omettez-le ou envoyez "" pour un pixel sans événements serveur.
ad_account_idstringnonCoupé à 64 caractères.
conversion_labelstringnonCoupé à 64 caractères.
is_activeboolnontrue par défaut.
is_defaultboolnonfalse par défaut.

Ce que vérifie l'appel​

Les vérifications se font dans cet ordre, et la première qui échoue donne l'erreur. Un refus est enregistré avec sa Idempotency-Key pendant 24 heures : une fois la cause corrigée, renvoyez l'appel avec une nouvelle Idempotency-Key.

  1. pixel_type est l'un des sept types, sinon 422 invalid_pixel_type.
  2. pixel_id a le bon format, sinon 422 invalid_pixel_id.
  3. Le plan autorise un autre pixel de ce type, sinon 409 limit_reached.
  4. La boutique n'a pas de pixel du même type avec le même pixel_id, sinon 409 pixel_exists.
  5. access_token, s'il est envoyé, suit les règles du token d'accès, sinon 422 invalid_access_token.

Requête​

curl -X POST 'https://api.dzbuild.app/v1/pixels' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pixel-meta-main-1" \
-d '{"pixel_type": "facebook", "pixel_id": "123456789012345", "pixel_name": "Main ad account", "access_token": "EAAGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}'

Réponse 201​

{
"data": {
"id": 12,
"pixel_type": "facebook",
"pixel_id": "123456789012345",
"pixel_name": "Main ad account",
"has_token": true,
"test_event_code": null,
"ad_account_id": null,
"conversion_label": null,
"is_active": true,
"is_default": false,
"created_at": "2026-10-01 14:20:05",
"updated_at": "2026-10-01 14:20:05"
}
}

PATCH /v1/pixels/{id}​

Ne modifie que les champs envoyés et répond 200 avec le pixel. Un corps vide ne change rien.

Auth : clé plateforme avec pixels:write. Nécessite Idempotency-Key.

Corps​

ChampTypeNotes
pixel_namestring ou nullCoupé à 100 caractères. null ou "" l'efface.
access_tokenstringUn nouveau token remplace celui enregistré. Une chaîne vide, null ou le masque le garde.
ad_account_idstring ou nullCoupé à 64 caractères. null ou "" l'efface.
conversion_labelstring ou nullCoupé à 64 caractères. null ou "" l'efface.
is_activeboolfalse met le pixel en pause et le garde.
is_defaultbooltrue le retire des autres pixels du même type de la boutique.

pixel_type, type et pixel_id ne peuvent pas être envoyés, même avec leur valeur actuelle : l'appel répond 422 immutable_field. Pour les changer, supprimez le pixel et ajoutez-en un nouveau.

Requête​

curl -X PATCH 'https://api.dzbuild.app/v1/pixels/12' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: pixel-12-pause-1" \
-d '{"is_active": false}'

Réponse 200​

{
"data": {
"id": 12,
"pixel_type": "facebook",
"pixel_id": "123456789012345",
"pixel_name": "Main ad account",
"has_token": true,
"test_event_code": null,
"ad_account_id": null,
"conversion_label": null,
"is_active": false,
"is_default": false,
"created_at": "2026-10-01 14:20:05",
"updated_at": "2026-10-02 09:05:41"
}
}

DELETE /v1/pixels/{id}​

Supprime le pixel et ses affectations aux produits, catégories et landing pages.

Auth : clé plateforme avec pixels:write. Nécessite Idempotency-Key.

Requête​

curl -X DELETE 'https://api.dzbuild.app/v1/pixels/12' \
-H "Authorization: Bearer $DZ_KEY" \
-H "Idempotency-Key: pixel-12-delete-1"

Réponse 200​

{
"data": {
"deleted": true,
"id": 12
}
}

Annulation​

Chaque écriture de pixel faite par l'API est enregistrée dans l'historique des changements de la boutique. La réponse d'écriture ne porte pas d'id de changement : retrouvez-le avec GET /v1/changes?entity=pixels, du plus récent au plus ancien, qui demande store:read. POST /v1/changes/{id}/undo annule un changement et demande pixels:write et une Idempotency-Key. Voir Changements et annulation.

  • Annuler une modification rétablit pixel_name, ad_account_id, conversion_label, is_active et is_default. Le token n'est pas dans l'historique : il reste tel qu'il est maintenant.
  • Annuler une suppression rajoute le pixel avec ses anciens champs, et avec son ancien id si cet id est encore libre, mais sans son token d'accès et sans ses affectations. La limite du plan et le contrôle des doublons s'appliquent toujours : cette annulation peut répondre 409 limit_reached ou 409 pixel_exists.
  • Un ajout de pixel ne s'annule pas : l'annulation répond 422 nothing_to_restore. Supprimez plutôt le pixel.
  • Annuler la modification d'un pixel supprimé depuis répond 422 restore_target_missing.
  • Les changements de pixels faits dans le dashboard ne sont pas enregistrés, on ne peut donc pas les annuler par l'API.
  • Le jeton d'une application installée ne peut ni lire ni annuler les changements : les deux répondent 403 forbidden.

Erreurs​

HTTPCodeCause
400bad_requestLe corps n'est pas un JSON valide, l'id du pixel dans le chemin n'est pas composé de chiffres, ou Idempotency-Key manque ou est mal formée sur POST, PATCH ou DELETE.
401unauthorizedClé absente ou invalide.
402quota_exceededLe quota mensuel de requêtes de la boutique est épuisé. Voir Limites de taux.
403forbiddenMissing scope: pixels:read ou Missing scope: pixels:write, ou API access requires an active Enterprise plan pour une clé personnelle dont la boutique n'a pas de plan Enterprise actif.
404not_foundAucun pixel avec cet id dans la boutique. Un pixel d'une autre boutique répond de la même façon.
409limit_reachedLe plan n'autorise plus de pixel de ce type.
409pixel_existsLa boutique a déjà un pixel de ce type avec ce pixel_id.
413payload_too_largeLe corps dépasse 1 Mo.
422invalid_pixel_typepixel_type manque ou n'est pas l'un des sept types.
422invalid_pixel_idpixel_id manque, dépasse 100 caractères, contient un caractère autre que lettres, chiffres, - et _, ou est un id facebook qui ne compte pas 15 à 17 chiffres.
422invalid_access_tokenLe token enfreint l'une des règles du token d'accès.
422immutable_fieldUn PATCH a envoyé pixel_type, type ou pixel_id.
422pixel_write_failedL'écriture a été refusée alors que les vérifications ci-dessus étaient passées. Le message donne la raison et peut être en arabe.
422idempotency_key_reuseLa même Idempotency-Key a servi avec une autre méthode, un autre chemin ou un autre corps.
429rate_limitedTrop de requêtes. Attendez la durée de Retry-After.
500server_errorLa requête a échoué. Réessayez avec la même Idempotency-Key.
Cette page pour les outils IAVoir en MarkdownOuvrir dans ChatGPTOuvrir dans Claude