pixellint

Taboola bulk S2S conversions need click-id, timestamp, and name

The Account ID rides in the path. Each record needs click-id, timestamp as milliseconds since epoch, and the Realize Event Name. Single GET postbacks are vendor/taboola-s2s.

Bulk records need a millisecond timestamp

The GET postback has no timestamp field. Bulk submit requires timestamp as milliseconds since epoch on every record.

Rule: vendor.taboola-s2s-bulk.body.timestamp.missing

What this pack matches

Hosts
trc.taboola.com
Paths
…/bulk-s2s-action…
Vendor docs
developers.taboola.com/pixel/docs/bulk-submit-s2s-conversions

Rules

Codes are stable. A finding in CI, MCP, or the playground lands on the same id.

Field Required What it checks Rule ids Source
account_id required It is the numeric Taboola Account ID in the path as `/{account-id}/log/3/bulk-s2s-action`. Maximum numeric value: 9223372036854776000. Fix: Put the Realize Account ID in the path, such as `/123456/log/3/bulk-s2s-action`. vendor.taboola-s2s-bulk.param.account_id.missing
vendor.taboola-s2s-bulk.param.account_id.empty
vendor.taboola-s2s-bulk.param.account_id.invalid
docs
root optional Taboola bulk accepts a JSON object. Native JSON type: object. Maximum object properties: 1. vendor.taboola-s2s-bulk.body.root.invalid docs
actions required Taboola requires an array with at most 1000 conversion objects. Native JSON type: array. Maximum array items: 1000. vendor.taboola-s2s-bulk.body.actions.missing
vendor.taboola-s2s-bulk.body.actions.invalid
docs
actions[] optional Every Taboola bulk action is an object. Native JSON type: object. vendor.taboola-s2s-bulk.body.actions[].invalid docs
click-id required It is the Taboola Click ID from the landing page. Taboola documents `click-id` as required on every bulk record. Body scope: actions[]. Native JSON type: string. Fix: Send `click-id` with the Click ID Taboola appended to the landing page. vendor.taboola-s2s-bulk.body.click-id.missing
vendor.taboola-s2s-bulk.body.click-id.empty
vendor.taboola-s2s-bulk.body.click-id.invalid
docs
timestamp required It is milliseconds since Unix epoch. Taboola documents `timestamp` as required on bulk records. Body scope: actions[]. Native JSON type: integer. Minimum numeric value: -9223372036854776000. Maximum numeric value: 9223372036854776000. Fix: Send milliseconds since epoch, such as `1620723457405`. vendor.taboola-s2s-bulk.body.timestamp.missing
vendor.taboola-s2s-bulk.body.timestamp.invalid
docs
name required It is the event name as defined in Realize Conversion settings, not the Conversion Name. Body scope: actions[]. Native JSON type: string. Fix: Set `name` to the Event Name from Realize, such as `LEAD`. vendor.taboola-s2s-bulk.body.name.missing
vendor.taboola-s2s-bulk.body.name.empty
vendor.taboola-s2s-bulk.body.name.invalid
docs
revenue optional It is the conversion value. Taboola documents a float such as `10` or `9.99`. Body scope: actions[]. Native JSON type: number. Fix: Send a number, such as `9.99`. vendor.taboola-s2s-bulk.body.revenue.invalid docs
currency optional It is the revenue currency. Taboola documents a fixed list of three-letter codes, case-sensitive. Omit it to use the account default. Body scope: actions[]. Native JSON type: string. Fix: Use a documented code such as `USD`. vendor.taboola-s2s-bulk.body.currency.empty
vendor.taboola-s2s-bulk.body.currency.invalid
docs
quantity optional It is the item quantity for the order. Taboola documents an integer. Body scope: actions[]. Native JSON type: integer. Fix: Send an integer quantity, such as `3`. vendor.taboola-s2s-bulk.body.quantity.invalid docs
orderid optional It is an order ID from the advertiser CRM. Taboola documents it as optional. Body scope: actions[]. Native JSON type: string. vendor.taboola-s2s-bulk.body.orderid.empty
vendor.taboola-s2s-bulk.body.orderid.invalid
docs
method required The published endpoint accepts an HTTP POST request. Complete HTTP capture contract. vendor.taboola-s2s-bulk.http.method.missing
vendor.taboola-s2s-bulk.http.method.empty
vendor.taboola-s2s-bulk.http.method.invalid
docs
content_type required The request Content-Type is application/json; MIME parameters do not change its media type. Complete HTTP capture contract. vendor.taboola-s2s-bulk.http.content_type.missing
vendor.taboola-s2s-bulk.http.content_type.empty
vendor.taboola-s2s-bulk.http.content_type.invalid
docs
body_encoding required The published request carries a JSON entity. Once application/json is known, an absent body is invalid. Opaque compressed captures and unresolved MIME macros are left unverified. Complete HTTP capture contract. Applies when {"kind":"all","conditions":[{"kind":"not","condition":{"kind":"value_in","param":"body_encoding","values":["unsupported"]}},{"kind":"any","conditions":[{"kind":"value_in","param":"body_encoding","values":["none"]},{"kind":"value_in","param":"content_type","values":["application/json"]}]}]}. vendor.taboola-s2s-bulk.http.body_encoding.missing
vendor.taboola-s2s-bulk.http.body_encoding.empty
vendor.taboola-s2s-bulk.http.body_encoding.invalid
docs

Validate a payload

pixellint validate json @payload.json --rulepack vendor/taboola-s2s-bulk

Try this failing payload in the playground. Taboola bulk S2S conversion missing click-id.

{"actions":[{"timestamp":1620723457405,"name":"LEAD"}]}

cargo install pixellint · npm install pixellint