Zernio
APIFor you
Zernio
APIFor you
API Reference

Pixels & Tracking Tags

Tags

List tracking tagsGETCreate a tracking tagPOSTGet a tracking tagGETUpdate a tracking tagPATCHGet aggregated event statsGETGet tag diagnosticsGET

Conversion Events

List conversion eventsGETCreate a conversion eventPOSTUpdate a conversion eventPATCHDelete a conversion eventDELETE

Sharing

List accounts it is shared withGETShare with an ad accountPOSTStop sharing with an accountDELETE

Users and Partners

List tag usersGETAssign a user to a tagPOSTRemove a user from a tagDELETEList partner businesses of a tagGET

Store Install

Install on a Shopify, WordPress, Wix or Webflow sitePOSTGet store install statusGETRemove from a Shopify, WordPress, Wix or Webflow siteDELETE

Ad URL Tracking Tags

Get ad tracking tagsGETSet ad tracking tagsPATCH
Dashboard
OverviewPlatformsAPI ReferenceResources
Pixels & Tracking Tags

Create a tracking tag

Creates a measurement pixel on an ad account and returns the snippet to install on your site.

Meta: creates a Meta Pixel on the given ad account (POST /act_{id}/adspixels, where name is the only input). Returns the created tag including its install code. The pixel is owned by the Business Manager that owns the ad account; a pixel created on a personal (non-BM) ad account ends up with ownerBusinessId: null and can't be shared with other ad accounts.

Creating a Meta pixel does NOT install it. Install the returned code snippet on the site, or send events server-side via POST /v1/ads/conversions. The check installed is derived from lastFiredTime.

OpenAI Ads: creates an OpenAI pixel AND provisions a Conversions API key for it in the same call (adAccountId is required by this endpoint but ignored: one API key maps to exactly one ad account, so there's nothing to select). Returns 422 (FEATURE_NOT_AVAILABLE) if the ad account isn't enabled for pixel management; contact your OpenAI partner representative to enable it. There is no delete API for OpenAI pixels. If the pixel is created but the Conversions API key provisioning then fails, the pixel is left live on OpenAI (it cannot be cleaned up) and the error message names the surviving pixel id and warns against retrying, since a retry would create a second, orphaned pixel.

NOT idempotent on either platform: each call creates a new pixel (and, for OpenAI, a new Conversions API key plus, with defaultEventType, a new conversion event setting). Do not retry blindly on timeout. Meta (platform metaads) and OpenAI Ads (platform openaiads); other platforms return 501.

LinkedIn (linkedinads): creates the ad account's Insight Tag (POST /rest/insightTags). Idempotent: an ad account holds at most one Insight Tag, so when it already has one that tag is returned and nothing is created. name is ignored (LinkedIn tags have no name) and there is no API to delete an Insight Tag.

Pinterest (platform pinterestads): creates a Pinterest tag on the numeric ad account adAccountId (POST /v5/ad_accounts/{id}/conversion_tags). Returns the tag with Pinterest's code snippet. automaticMatchingFields switches on automatic enhanced match for those fields. NOT idempotent and Pinterest has no dry-run and no delete for tags (DELETE on conversion_tags/{id} answers 405), so never retry blindly: list first.

Google Ads (googleads): every Google Ads account has exactly one Google tag (AW-...), so this is idempotent. adAccountId is the 10-digit customer id. When the account already tracks conversions the existing tag is returned (201) and nothing is created. Otherwise a first WEBPAGE conversion action named name (category DEFAULT) is created, which is what switches Google's conversion tracking on, and the tag is returned with it as its first event.

TikTok: POST /pixel/create/ on the advertiser in adAccountId (numeric). Names are at most 40 characters with no emoji and must be unique; TikTok refuses a duplicate name (400), which is its only retry guard. TikTok has no pixel delete API.

Pinterest's code snippet. NOT idempotent and Pinterest has no dry-run and no delete for tags, so never retry blindly: list first.

X Ads (platform xads): creates the ad account's X Pixel (its UNIVERSAL website tag) with first-party cookies on. adAccountId is the X ad account id; name is not stored (X pixels have no name). X allows one pixel per ad account and cannot delete one, so an account that already has a pixel answers 409 without writing anything.


PlatformsMetaGoogleTikTokLinkedInPinterestXOpenAI
POST
/v1/accounts/{accountId}/tracking-tags

Authorization

bearerAuth
AuthorizationBearer <token>

API key authentication: send your Zernio API key in the Authorization header, prefixed with Bearer.

In: header

Path Parameters

accountId*string

Ads SocialAccount id (platform metaads or openaiads).

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

import Zernio from '@zernio/node';const zernio = new Zernio({ apiKey: process.env.ZERNIO_API_KEY });const { data } = await zernio.trackingtags.createTrackingTag({  path: {    accountId: 'account_abc123',  },  body: {    adAccountId: 'adaccount_abc123',    name: 'Example',  },});console.log(data);
{  "platform": "metaads",  "tag": {    "id": "string",    "siteTagId": "string",    "events": [      {        "id": "string",        "name": "string",        "type": "string",        "siteEvent": "page_view",        "siteEventId": "string",        "status": "string",        "defaultValue": 0,        "currency": "string",        "clickWindowDays": 0,        "viewWindowDays": 0,        "urlContains": "string",        "alwaysUseDefaultValue": true,        "primary": true,        "countingType": "one"      }    ],    "name": "string",    "platform": "metaads",    "kind": "pixel",    "status": "active",    "code": "string",    "lastFiredTime": 0,    "isUnavailable": true,    "installed": true,    "creationTime": 0,    "automaticMatchingFields": [      "em"    ],    "ownerBusinessId": "string",    "ownerAdAccountId": "string",    "autoTagging": true  }}
Was this page helpful?

List tracking tags

Lists the pixels and other measurement tags an ads account can see, so you can inspect or install them. Returns the tracking tags (Meta Pixels, or OpenAI Ads pixels) the connected ads account can see. Pass `?adAccountId=act_...` (Meta only) to scope the list to a single ad account; omit it to list every pixel reachable by the token (the name is then suffixed with the ad account it was discovered on, for disambiguation). The list view omits `code`. Call `getTrackingTag` for the install snippet and full detail. Meta (platform `metaads`) and OpenAI Ads (platform `openaiads`); other platforms return 501. The `accountId` must be the ads SocialAccount created by the Ads add-on connect flow (Meta) or the OpenAI Ads connect flow, not a Facebook/Instagram posting account. Get your Meta `act_...` ids from `GET /v1/ads/accounts`; `adAccountId` is ignored for OpenAI Ads (one API key maps to exactly one ad account). LinkedIn (`linkedinads`): lists the Insight Tag of each ad account (LinkedIn allows one per ad account; a tag shared with several accounts appears once). `adAccountId` is the numeric ad account id or `urn:li:sponsoredAccount:{id}`; omit it to scan every active ad account the connection can see. The tag `id` IS the partner id the site embeds, so `siteTagId` equals `id`. LinkedIn tags have no name; it is shown as `Insight Tag {id}`. Pinterest (platform `pinterestads`): lists Pinterest tags (conversion tags). `adAccountId` is the numeric Pinterest ad account id (no prefix); omit it to walk every ad account the connection can read (an ad account the user has no Business Access role on is skipped). `id` equals `siteTagId`, the id the site loads with `pintrk('load', id)`. TikTok (platform `tiktokads`): TikTok Pixels across the connection's advertisers, or one advertiser with `?adAccountId=<numeric advertiser_id>`. `id` is the numeric `pixel_id`, `siteTagId` the alphanumeric `pixel_code` from Events Manager. Connections authorized before the Pixel Management permission (about 2026-05-28) answer 403 until reconnected. X Ads (platform `xads`): one X Pixel per X ad account, so `TrackingTag.id` is the ad account id (base36, e.g. `18ce54d4x5t`) and `siteTagId` is the pixel id the site embeds. Ad accounts without a pixel are left out. `adAccountId` scopes the list to one ad account.

Get a tracking tag

Shows one pixel or measurement tag in full, including its install snippet, when it last fired and its conversion events. Returns the full tag record including the base-code `code` snippet, `lastFiredTime`, `ownerBusinessId`, `isUnavailable`, etc. Meta only (platform `metaads`); other platforms return 501. OpenAI Ads (`openaiads`): `tagId` is the pixel's API id (`cds_...`) or its `pixel_id`. OpenAI documents no single-pixel read, so the tag is resolved from the pixel list; the response adds `code` (the official `oaiq` base code plus `page_viewed`) and `events` (the conversion event settings whose source is this pixel). `siteTagId` is the `pixel_id` the site and the Conversions API send; `id` is what event settings reference. LinkedIn (`linkedinads`): `code` is LinkedIn's base code, `lastFiredTime` is the most recent callback across the tag's domains (unix seconds, null when it never fired) and `events` lists the ad account's conversion rules. `siteEvent` and `siteEventId` are set only on rules a page can fire (event-specific Insight Tag rules: not Conversions API rules, no URL match rules). `adAccountId` picks which ad account's rules to read; it defaults to the account that created the tag. Pinterest (platform `pinterestads`): returns the tag with Pinterest's own `code` snippet and `lastFiredTime`. Without `adAccountId` Zernio finds the ad account that owns the tag (404 when no readable ad account holds it). TikTok: read from `/pixel/list/?pixel_id=`; `code` is TikTok's `pixel_script`, `events` the pixel events. `lastFiredTime` is not available on TikTok. Without `adAccountId` the connection's advertisers are searched. X Ads (platform `xads`): `tagId` is the X ad account id. Returns the pixel id as `siteTagId`, the X Pixel base code as `code`, and the conversion events the site can fire in `events` (each with `siteEventId` = `tw-<pixel>-<event>`, also the `event_id` of the X Conversions API). An ad account without a pixel answers 400.

adAccountId*string

Meta ad account id, e.g. act_123456789. Required by this endpoint but ignored for OpenAI Ads.

name*string
Length1 <= length <= 200
defaultEventType?string

OpenAI Ads only (ignored by Meta). When set, also provisions a standard conversion event setting wired to the new pixel, so goal: conversions ad creates on POST /v1/ads/create have an event to reference immediately.

Value in

  • "order_created"
  • "lead_created"
  • "items_added"
  • "contents_viewed"
  • "checkout_started"
  • "registration_completed"
  • "subscription_created"
  • "trial_started"
  • "appointment_scheduled"
  • "page_viewed"
  • "app_installed"
  • "app_opened"
automaticMatchingFields?array<>

Pinterest only (400 elsewhere). Customer data the new tag matches automatically (automatic enhanced match): em email, ph phone, fn/ln name, ge gender, db date of birth, ct/st/zp/country location, external_id. Pinterest has one switch for the name and one for the location, so fn turns on ln too and any location code turns on all four.