Tatari is a TV advertising measurement and media-buying platform that helps brands plan, buy, and measure linear and streaming television campaigns. It brings together audience data, spot-level TV airings, and web conversion signals to connect advertising exposure to downstream outcomes. Through its Vault for Brands offering, Tatari ingests web and marketing events so advertisers can tie on-site activity back to their TV and streaming media. This supports return-on-ad-spend reporting and cross-device attribution across a brand's media investment.
Product Type: Advertising
Integration Type: Starter Kit
Event Source Type: Web
Event Scope: Full-Funnel Events
- Sends server-side web and conversion events directly to Tatari's Vault for Brands Events API.
- Supports full-funnel events across browsing, cart, checkout, and order lifecycle actions.
- Batches events for efficient server-to-server delivery.
- Sends hashed email and IP identifiers to support cross-device attribution.
- Maps order and revenue fields required for return-on-ad-spend reporting.
- Event
properties pass through to the args object. Tatari forbids PII in args, url, and referrer_url, so event properties must be kept free of personal data. Send raw email only through the hashed hem_* fields, and keep user_id an opaque, non-PII identifier.
- For Order Completed, return-on-ad-spend reporting relies on the reserved keys
args.order_id and args.order_total. The starter kit maps these explicitly, with order total sourced from properties.total.
distinct_id (mapped from messageId) enables deduplication of retried events within a single UTC calendar day, where the most recently received event wins.
- At least one valid IP address (
ipv4 or ipv6) is required per event, or the event is rejected. Tatari prefers IPv4 and monitors IPv4 coverage (targeting 95%+ on conversion events) for cross-device matching.
session_id is populated from MetaRouter's anonymousId, a stable per-browser identifier. Tatari re-sessionizes server-side using event timestamps and prefers that clients do not apply their own session timeout.
- Batch delivery is capped at 3 MB per request. The starter kit sends batches of 500 events, which typically stays within this limit.
- The API enforces rate limits per API key and returns
429 Too Many Requests when those limits are exceeded, at which point the HTTP forwarder retries the request with backoff. The /v1/batch endpoint is subject to lower per-second limits than the single-event endpoint.
- Rate and volume limits are tied to your API key tier; increases are arranged directly with Tatari.
- Ask vendor representatives for the following credentials:
- From the integration library, add a Tatari integration. Then, fill out the Connection Parameters:
| Connection Parameter | Description |
|---|
BASE_URL | Base API endpoint. Preconfigured to https://api.vaultdcr.com/webevents and not expected to change unless advised by your Tatari representative. |
API_KEY | API key sent in the x-api-key header to authenticate requests. |
- MetaRouter provides all of the event mappings that Tatari integrations typically require. You may add custom events, parameters, or mappings in accordance with Tatari's API documentation.
- In the Pipelines tab, add your Tatari integration.
- Select the correct integration revision.
- Click Add Integration to finalize deployment.
Global mappings will be applied to all events. If your parameter names do not match the Expected Inputs provided, you will need to overwrite the Inputs provided with your own.
| Output Key | Description | Expected Input |
|---|
event_dt Required | String: Event timestamp in RFC 3339 format with a required timezone. | timestamp |
session_id Required | String: Stable per-browser session identifier. | anonymousId |
user_agent Required | String: User-agent string for the request. | context.userAgent |
url Required | String: Page URL where the event occurred; must start with http:// or https://. | context.page.url |
ipv4 * Required | String: User IPv4 address. At least one of ipv4 or ipv6 is required. | context.ipv4 |
ipv6 * Required | String: User IPv6 address. At least one of ipv4 or ipv6 is required. | context.ipv6 |
referrer_url | String: Referrer URL of the page. | context.page.referrer |
user_id | String: Opaque ID for a logged-in user; matches events across devices. Must not contain unhashed PII. | userId |
distinct_id | String: Unique event ID used for deduplication. | messageId |
hem_sha256 | String: SHA-256 hex digest of the normalized email. | Expression – hashes traits.email after lowercasing and trimming |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'page' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'products_searched' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'product_list_viewed' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'product_clicked' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'product_viewed' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'product_added' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'product_removed' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'cart_viewed' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'checkout_started' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'payment_info_entered' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'order_completed' |
args.order_id | String: Order identifier; reserved ROAS key. | properties.order_id |
args.order_total | Number: Order total; reserved ROAS key. | properties.total |
args.revenue | Number: Order revenue amount. | properties.revenue |
args.currency | String: ISO 4217 currency code. | properties.currency (uppercased) |
args.affiliation | String: Store or affiliation name. | properties.affiliation |
args.checkout_id | String: Checkout identifier. | properties.checkout_id |
args.coupon | String: Coupon code applied to the order. | properties.coupon |
args.discount | Number: Discount amount applied to the order. | properties.discount |
args.shipping | Number: Shipping charge amount. | properties.shipping |
args.tax | Number: Tax amount on the order. | properties.tax |
args.products | Array: Products included in the order. | properties.products |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'promotion_clicked' |
args | Object: Event metadata passed through from event properties. | properties |
| Output Key | Description | Expected Input |
|---|
event Required | String: Event name identifying the activity. | Enrichment – 'promotion_viewed' |
args | Object: Event metadata passed through from event properties. | properties |
These identifiers must be mapped to Tatari in order for successful user matching to occur. Without these IDs, any events sent to Tatari may not be accurately reflected in reporting.
| Attribute | Example | Sync Injector Required? |
|---|
session_id Required | b171a9b06ce011ecafcd1b209be8601b | No |
ipv4 *Required | 203.0.113.1 | No |
ipv6 *Required | 2001:0db8:85a3:0000:0000:8a2e:0370:7334 | |
hem_sha256 Recommended | 31c5543c1734d25c7206f5fd591525d0295bec6fe84ff82f946a34fe970a1e66 | No |
user_id Recommended | user-abc | No |
distinct_id Recommended | d29f8a3b-7c21-4e8a-9f12-6d5e8a3b7c21 | No |
*At least one of ipv4 or ipv6 is required per event. IPv4 is preferred for cross-device matching.
To confirm that your data is being received and processed as expected, coordinate with your Tatari representative to review event delivery and validate results on Tatari's side.
Under the ACCEPT_ANY_VALID batch policy, a mixed batch returns a 207 (a 2xx) with rejected events listed only in errors_by_index. Because delivery is classified by status code, individually rejected events in a partial accept are not retried or surfaced as errors. Periodically confirm received event counts with your Tatari contact until response-body error classification is available.