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 push Online sync (this page) Offline sync (batch) Mechanism _taboola.push({eids})in the page tagSeparate HTTP pixel ( /umendpoint)S3 file upload on a schedule Delivery Part of the TRC request Separate browser call per user Bulk file transfer Volume Per-pageview (automatic) Per-pageview or per-session High volume, bulk data Update mode Immediate Immediate Incremental or full refresh Browser required Yes Yes (Taboola cookie must be present) No
Roles and responsibilities
| Taboola | Publisher (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
- Taboola assigns a partner name and configures the sync endpoint during onboarding.
- On your web pages, you fire a sync pixel (HTTP GET) that includes your user identifier as a query parameter.
- Taboola reads its own cookie from the browser, resolving the Taboola user ID.
- If both IDs are valid, Taboola writes the pair to the identity graph.
- Taboola responds with a 1x1 transparent pixel or a 302 redirect (configurable).
Companion client-side stepThe 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 type | Parameter example | Description |
|---|---|---|
| Hashed email (HEM) | hem | SHA-256 hash of the user's trimmed, lowercased email. |
| Device ID | did | Mobile advertising ID: GAID (Android) or IDFA (iOS). |
| Publisher ID | ppid or custom | A publisher-generated persistent user identifier. |
| RampID | ramp_id | LiveRamp 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:
| Parameter | Description | Example |
|---|---|---|
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 mode | Whether you send IDs pre-hashed or raw (Taboola hashes on receipt). | SHA-256 pre-hashed (recommended) |
| Initiation mode | Who 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>¶mB=<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 callExactly 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 style | How it works |
|---|---|
| Static redirect | Taboola responds with HTTP 302 to a pre-configured URL, appending the Taboola user ID as a query parameter. |
| Dynamic redirect | You 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%3EHTTP 302 --> https://publisher.com/cb?uid=<real_taboola_id>
Redirect domain whitelistingRedirect 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:
- Trim leading and trailing whitespace.
- Convert to lowercase.
- Hash with SHA-256.
- 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:
| # | Item | Details |
|---|---|---|
| 1 | ID parameter(s) | What parameter name(s) will be sent (e.g. did, hem, or custom)? Single or multiple IDs per call? |
| 2 | Hashing policy | Are IDs sent pre-hashed or raw? What is the exact format or regex of each ID? |
| 3 | Initiation mode | Partner-initiated, Taboola-initiated, or bi-directional? |
| 4 | Response type | Is a 1x1 pixel sufficient, or is a 302 redirect required? If redirecting, provide the destination domain and redirect style. |
| 5 | Sync trigger and volume | What triggers the sync call (every pageview, once per session)? What is the expected steady-state requests per second? |
| 6 | ID cardinality | Expected relationship between mapped IDs (1:1, 1:many, or many:many). 1:1 is preferred. |
| 7 | Sample URLs | Provide 3 to 5 representative sample sync URLs with realistic test IDs for pre-launch validation. |
Updated about 10 hours ago
