Server-to-server identity sync - online (real-time)

Map publisher identifiers to Taboola in real time via browser-based sync pixels

Real-time identity sync maps your user identifiers to Taboola's identity graph through browser-based HTTP calls (sync pixels). When the call fires, Taboola reads its own cookie from the browser, pairs it with your identifier from the query string, and writes the mapping immediately.

For the batch file upload alternative (recommended for high-volume integrations), see Server-to-server identity sync - offline (batch).

๐Ÿ“˜

Guidelines

  • The sync call must fire from a page where the Taboola tag is loaded, so that the Taboola cookie is present in the browser.
  • Best suited for per-pageview or per-session sync where identifiers are available in real time.
  • All PII-derived identifiers (e.g. email) must be SHA-256 hashed before sending. Never send raw PII.
  • Contact your Taboola account manager to begin onboarding.
๐Ÿ“˜

Three ways to send identity data

Eids pushOnline sync (this page)Offline sync (batch)
Mechanism_taboola.push({eids}) in the page tagSeparate HTTP pixel (/um endpoint)S3 file upload on a schedule
DeliveryPart of the TRC requestSeparate browser call per userBulk file transfer
VolumePer-pageview (automatic)Per-pageview or per-sessionHigh volume, bulk data
Update modeImmediateImmediateIncremental or full refresh
Browser requiredYesYes (Taboola cookie must be present)No

Roles and responsibilities

TaboolaPublisher (you)
Assign partner name, endpoint, and ID parameter name(s) at onboarding.Share your identifier format(s) with Taboola before implementation.
Real-time validation, deduplication, and identity-graph ingestion.Trigger client-side sync calls in the browser per agreed triggers.
Whitelist redirect host(s) if a callback is required.Confirm target call volume and cardinality for capacity planning.

How it works

  1. Taboola assigns a partner name and configures the sync endpoint during onboarding.
  2. On your web pages, you fire a sync pixel (HTTP GET) that includes your user identifier as a query parameter.
  3. Taboola reads its own cookie from the browser, resolving the Taboola user ID.
  4. If both IDs are valid, Taboola writes the pair to the identity graph.
  5. Taboola responds with a 1x1 transparent pixel or a 302 redirect (configurable).
๐Ÿ“˜

Companion client-side step

The real-time sync pixel provides a mapping path alongside the eids push. Use both when you need to map identifier types that are not included in the eids push, or when syncing from pages where the eids push is not implemented.

Supported identifier types

The following identifier types can be passed as query parameters in the sync call:

Identifier typeParameter exampleDescription
Hashed email (HEM)hemSHA-256 hash of the user's trimmed, lowercased email.
Device IDdidMobile advertising ID: GAID (Android) or IDFA (iOS).
Publisher IDppid or customA publisher-generated persistent user identifier.
RampIDramp_idLiveRamp RampID, if available.

The exact parameter name(s) are agreed during onboarding. You can send multiple identifier types in a single call.

Onboarding setup

Taboola configures the following during onboarding:

ParameterDescriptionExample
Partner name ($PARTNER)A unique name assigned by Taboola for the URL path.acme_news
ID parameter(s) ($PARAM)The query parameter key(s) carrying your identifiers.hem, did, ppid
Hashing modeWhether you send IDs pre-hashed or raw (Taboola hashes on receipt).SHA-256 pre-hashed (recommended)
Initiation modeWho fires the sync call: partner-initiated, Taboola-initiated, or bi-directional.Partner-initiated (default)
Redirect host (optional)The destination domain for post-sync redirect callbacks, if required.https://publisher.com

Request format

Single-partner sync

GET https://trc.taboola.com/sg/$PARTNER/1/um/?$PARAM=<your_user_id>

Multi-parameter sync

Send multiple identifier types in a single call:

GET https://trc.taboola.com/sg/$PARTNER/1/um/?hem=<hashed_email>&did=<device_id>

Multi-partner sync (chained)

Chain multiple partner syncs in one call using -- as a separator:

GET https://trc.taboola.com/sg/$PARTNER_A--$PARTNER_B/1/um/?paramA=<id_a>&paramB=<id_b>

If one parameter is missing in a chained call, the missing sub-partner is skipped while the present sub-partner is processed normally.

Validation rules

  • Every call must resolve at least 2 distinct IDs: the Taboola cookie ID (resolved automatically from the browser) plus at least 1 partner ID from the query string. Calls that resolve only 1 ID are discarded.
  • If hashing is enabled, values must be trimmed, lowercased (for email-derived IDs), and converted to a 64-character lowercase hex SHA-256 string.
  • Query parameters must be URL-encoded exactly once. Double-encoded or unencoded reserved characters cause silent drops.
๐Ÿšง

One cookie touch per call

Exactly one Taboola cookie read occurs per HTTP call, regardless of how many sub-partners or ID parameters are chained in that call.

Initiation modes

Partner-initiated (default)

You fire Taboola's sync pixel on your pages. Taboola resolves the IDs and returns either a 1x1 transparent pixel or a 302 redirect containing the Taboola user ID.

Your page  -->  Taboola endpoint  -->  [identity graph write]  -->  1x1 pixel or 302 redirect

Taboola-initiated

You provide a match URL template. Taboola fires this call when encountering new or unmatched users across its publisher network, replacing <TUID> with the real Taboola user ID:

GET https://publisher.com/match?uuid=<TUID>

Bi-directional

Both modes run concurrently. Recommended only after partner-initiated match rates are verified, as this doubles sync traffic.

Response handling

By default, partner-initiated calls return a 1x1 transparent GIF. If a callback is required, Taboola supports 302 redirect responses:

Redirect styleHow it works
Static redirectTaboola responds with HTTP 302 to a pre-configured URL, appending the Taboola user ID as a query parameter.
Dynamic redirectYou include a redir parameter in the request with <TUID> as a placeholder. Taboola replaces it with the real user ID and redirects.

Static redirect example:

Response: HTTP 302 --> https://publisher.com/match?partner_uid=<taboola_user_id>

Dynamic redirect example:

GET https://trc.taboola.com/sg/$PARTNER/1/um/?hem=<hashed_email>&redir=https%3A%2F%2Fpublisher.com%2Fcb%3Fuid%3D%3CTUID%3E
HTTP 302 --> https://publisher.com/cb?uid=<real_taboola_id>
๐Ÿšง

Redirect domain whitelisting

Redirect destination domains must be pre-whitelisted during onboarding. Calls with non-whitelisted redirect hosts silently fall back to returning the standard 1x1 pixel without an error.

Hashing requirements

For any PII-derived identifier (e.g. email), apply SHA-256 hashing before sending:

  1. Trim leading and trailing whitespace.
  2. Convert to lowercase.
  3. Hash with SHA-256.
  4. The result must be a 64-character lowercase hexadecimal string.

Do not strip dots or + tags from email addresses before hashing.

For code examples, see the hashing section in the client-side integration guide.

Consent and privacy

Because the sync call fires from the browser, Taboola validates consent signals (GDPR/TCF, CCPA/GPP) on every call. If consent is missing or the user has opted out, Taboola will not process the mapping. You are also responsible for ensuring that you only fire the sync pixel for users who have given consent.

Onboarding checklist

Review and confirm the following with your Taboola account manager before setup:

#ItemDetails
1ID parameter(s)What parameter name(s) will be sent (e.g. did, hem, or custom)? Single or multiple IDs per call?
2Hashing policyAre IDs sent pre-hashed or raw? What is the exact format or regex of each ID?
3Initiation modePartner-initiated, Taboola-initiated, or bi-directional?
4Response typeIs a 1x1 pixel sufficient, or is a 302 redirect required? If redirecting, provide the destination domain and redirect style.
5Sync trigger and volumeWhat triggers the sync call (every pageview, once per session)? What is the expected steady-state requests per second?
6ID cardinalityExpected relationship between mapped IDs (1:1, 1:many, or many:many). 1:1 is preferred.
7Sample URLsProvide 3 to 5 representative sample sync URLs with realistic test IDs for pre-launch validation.