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.
What this pack matches
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.missingvendor.taboola-s2s-bulk.param.account_id.emptyvendor.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.missingvendor.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.missingvendor.taboola-s2s-bulk.body.click-id.emptyvendor.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.missingvendor.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.missingvendor.taboola-s2s-bulk.body.name.emptyvendor.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.emptyvendor.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.emptyvendor.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.missingvendor.taboola-s2s-bulk.http.method.emptyvendor.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.missingvendor.taboola-s2s-bulk.http.content_type.emptyvendor.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.missingvendor.taboola-s2s-bulk.http.body_encoding.emptyvendor.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