The Trade Desk conversion batches link HTTP transport to event contracts.
Real-time conversion batches use data records with published advertiser, pixel and identity alternatives. Native JSON checks also cover commerce items, privacy records and processing options.
A complete HTTP capture adds method and content-type checks to the event body. Account mapping and regional policy applicability remain external.
Apply the contracts within their published source scope.
A complete HTTP capture adds method and content-type checks to the event body. Account mapping and regional policy applicability remain external.
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 |
|---|---|---|---|---|
https_required |
required | The Real-Time Conversion Events API requires HTTPS. | vendor.the-trade-desk-conversions.https_required |
docs |
|
required | Native JSON type: object. | vendor.the-trade-desk-conversions.body..missingvendor.the-trade-desk-conversions.body..invalid |
docs |
data |
required | Native JSON type: array. | vendor.the-trade-desk-conversions.body.data.missingvendor.the-trade-desk-conversions.body.data.invalid |
docs |
body_size_advisory |
recommended | Request exceeds a conservative binary interpretation of the published 28.6 MB size ceiling. | vendor.the-trade-desk-conversions.body_size_advisory |
docs |
|
required | Body scope: data[]. Native JSON type: object. | vendor.the-trade-desk-conversions.body..missingvendor.the-trade-desk-conversions.body..invalid |
docs |
adv |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.adv.invalid |
docs |
merchant_id |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.merchant_id.invalid |
docs |
pixel_id |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.pixel_id.invalid |
docs |
pixel_ids |
optional | Body scope: data[]. Native JSON type: array. Minimum array items: 1. | vendor.the-trade-desk-conversions.body.pixel_ids.invalid |
docs |
pixel_ids[] |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.pixel_ids[].invalid |
docs |
tracker_id |
deprecated | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.tracker_id.deprecatedvendor.the-trade-desk-conversions.body.tracker_id.invalid |
docs |
upixel_id |
deprecated | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.upixel_id.deprecatedvendor.the-trade-desk-conversions.body.upixel_id.invalid |
docs |
value |
optional | Body scope: data[]. Native JSON type: number. | vendor.the-trade-desk-conversions.body.value.invalid |
docs |
currency |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.currency.emptyvendor.the-trade-desk-conversions.body.currency.invalid |
docs |
event_name |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.event_name.invalid |
docs |
client_ip |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.client_ip.emptyvendor.the-trade-desk-conversions.body.client_ip.invalid |
docs |
referrer_url |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.referrer_url.invalid |
docs |
adid |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.adid.invalid |
docs |
adid_type |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.adid_type.emptyvendor.the-trade-desk-conversions.body.adid_type.invalid |
docs |
uid2_token |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.uid2_token.invalid |
docs |
euid_token |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.euid_token.invalid |
docs |
idl |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.idl.emptyvendor.the-trade-desk-conversions.body.idl.invalid |
docs |
imp |
optional | Body scope: data[]. Native JSON type: string. Minimum decoded characters: 36. Maximum decoded characters: 36. | vendor.the-trade-desk-conversions.body.imp.invalid |
docs |
country |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.country.invalid |
docs |
region |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.region.invalid |
docs |
NielsenDMA |
optional | Body scope: data[]. Native JSON type: integer or string. | vendor.the-trade-desk-conversions.body.NielsenDMA.emptyvendor.the-trade-desk-conversions.body.NielsenDMA.invalid |
docs |
city |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.city.invalid |
docs |
zip |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.zip.invalid |
docs |
order_id |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.order_id.invalid |
docs |
items |
optional | Body scope: data[]. Native JSON type: array. Minimum array items: 1. | vendor.the-trade-desk-conversions.body.items.invalid |
docs |
privacy_settings |
optional | Body scope: data[]. Native JSON type: array. | vendor.the-trade-desk-conversions.body.privacy_settings.invalid |
docs |
data_processing_option |
optional | Body scope: data[]. Native JSON type: object. | vendor.the-trade-desk-conversions.body.data_processing_option.invalid |
docs |
tdid |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.tdid.emptyvendor.the-trade-desk-conversions.body.tdid.invalid |
docs |
daid |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.daid.emptyvendor.the-trade-desk-conversions.body.daid.invalid |
docs |
idfa |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.idfa.emptyvendor.the-trade-desk-conversions.body.idfa.invalid |
docs |
aaid |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.aaid.emptyvendor.the-trade-desk-conversions.body.aaid.invalid |
docs |
naid |
optional | Body scope: data[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.naid.emptyvendor.the-trade-desk-conversions.body.naid.invalid |
docs |
td_values… |
optional | Body scope: data[]. Native JSON type: string. Maximum decoded characters: 150. | vendor.the-trade-desk-conversions.body.td_values.invalid |
docs |
owner_missing |
required | Provide the advertiser or merchant identifier. Body scope: data[]. | vendor.the-trade-desk-conversions.owner_missing |
docs |
pixel_missing |
required | Provide a current pixel identifier or a documented deprecated identifier. Body scope: data[]. | vendor.the-trade-desk-conversions.pixel_missing |
docs |
purchase_value_missing |
required | Purchase events require a revenue value. Body scope: data[]. | vendor.the-trade-desk-conversions.purchase_value_missing |
docs |
adid_type_missing |
required | Provided advertising IDs require an ID type. Body scope: data[]. | vendor.the-trade-desk-conversions.adid_type_missing |
docs |
us_region_missing |
required | Events in United States require a region. Body scope: data[]. | vendor.the-trade-desk-conversions.us_region_missing |
docs |
adid_tdid_invalid |
recommended | The documented device ID family uses a 36-character GUID. Body scope: data[]. | vendor.the-trade-desk-conversions.adid_tdid_invalid |
docs |
adid_idfa_invalid |
recommended | The documented device ID family uses a 36-character GUID. Body scope: data[]. | vendor.the-trade-desk-conversions.adid_idfa_invalid |
docs |
adid_aaid_invalid |
recommended | The documented device ID family uses a 36-character GUID. Body scope: data[]. | vendor.the-trade-desk-conversions.adid_aaid_invalid |
docs |
adid_daid_invalid |
recommended | The documented device ID family uses a 36-character GUID. Body scope: data[]. | vendor.the-trade-desk-conversions.adid_daid_invalid |
docs |
adid_naid_invalid |
recommended | The documented device ID family uses a 36-character GUID. Body scope: data[]. | vendor.the-trade-desk-conversions.adid_naid_invalid |
docs |
adid_idl_invalid |
recommended | The documented RampID lengths are 49 and 70 characters. Body scope: data[]. | vendor.the-trade-desk-conversions.adid_idl_invalid |
docs |
privacy_type_duplicate |
required | Only one privacy record per regulation type is permitted in an event. Body scope: data[]. | vendor.the-trade-desk-conversions.privacy_type_duplicate |
docs |
|
required | Body scope: data[].items[]. Native JSON type: object. | vendor.the-trade-desk-conversions.body..missingvendor.the-trade-desk-conversions.body..invalid |
docs |
item_code |
required | Body scope: data[].items[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.item_code.missingvendor.the-trade-desk-conversions.body.item_code.invalid |
docs |
name |
optional | Body scope: data[].items[]. Native JSON type: string. Maximum decoded characters: 150. | vendor.the-trade-desk-conversions.body.name.invalid |
docs |
qty |
optional | Body scope: data[].items[]. Native JSON type: integer. | vendor.the-trade-desk-conversions.body.qty.invalid |
docs |
price |
optional | Body scope: data[].items[]. Native JSON type: number. | vendor.the-trade-desk-conversions.body.price.invalid |
docs |
cat |
optional | Body scope: data[].items[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.cat.invalid |
docs |
item_brand |
optional | Body scope: data[].items[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.item_brand.invalid |
docs |
|
required | Body scope: data[].privacy_settings[]. Native JSON type: object. | vendor.the-trade-desk-conversions.body..missingvendor.the-trade-desk-conversions.body..invalid |
docs |
privacy_type |
required | Body scope: data[].privacy_settings[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.privacy_type.missingvendor.the-trade-desk-conversions.body.privacy_type.emptyvendor.the-trade-desk-conversions.body.privacy_type.invalid |
docs |
is_applicable |
required | Body scope: data[].privacy_settings[]. Native JSON type: boolean or integer. Minimum numeric value: 0. Maximum numeric value: 1. | vendor.the-trade-desk-conversions.body.is_applicable.missingvendor.the-trade-desk-conversions.body.is_applicable.invalid |
docs |
consent_string |
required | Body scope: data[].privacy_settings[]. Native JSON type: string. | vendor.the-trade-desk-conversions.body.consent_string.missingvendor.the-trade-desk-conversions.body.consent_string.invalid |
docs |
privacy_gdpr_invalid |
required | Applicable privacy settings require a structurally valid consent string. Body scope: data[].privacy_settings[]. | vendor.the-trade-desk-conversions.privacy_gdpr_invalid |
docs |
privacy_gpp_invalid |
required | Applicable privacy settings require a structurally valid consent string. Body scope: data[].privacy_settings[]. | vendor.the-trade-desk-conversions.privacy_gpp_invalid |
docs |
|
required | Body scope: data[].data_processing_option. Native JSON type: object. | vendor.the-trade-desk-conversions.body..missingvendor.the-trade-desk-conversions.body..invalid |
docs |
policies |
required | Body scope: data[].data_processing_option. Native JSON type: array. | vendor.the-trade-desk-conversions.body.policies.missingvendor.the-trade-desk-conversions.body.policies.invalid |
docs |
policies[] |
optional | Body scope: data[].data_processing_option. Native JSON type: string. | vendor.the-trade-desk-conversions.body.policies[].emptyvendor.the-trade-desk-conversions.body.policies[].invalid |
docs |
region |
required | Body scope: data[].data_processing_option. Native JSON type: string. | vendor.the-trade-desk-conversions.body.region.missingvendor.the-trade-desk-conversions.body.region.emptyvendor.the-trade-desk-conversions.body.region.invalid |
docs |
method |
required | Complete HTTP capture contract. | vendor.the-trade-desk-conversions.http.method.missingvendor.the-trade-desk-conversions.http.method.emptyvendor.the-trade-desk-conversions.http.method.invalid |
docs |
content_type |
required | Complete HTTP capture contract. | vendor.the-trade-desk-conversions.http.content_type.missingvendor.the-trade-desk-conversions.http.content_type.emptyvendor.the-trade-desk-conversions.http.content_type.invalid |
docs |
body |
optional | Complete HTTP capture contract. Native JSON type: object. | vendor.the-trade-desk-conversions.http.body.invalid |
docs |
body_encoding |
optional | Complete HTTP capture contract. | docs |
Validate a payload
pixellint validate request @request.json --rulepack vendor/the-trade-desk-conversions
Try this failing payload in the playground. A realtime conversion capture using GET instead of the documented POST.
{
"url": "https://insight.adsrvr.org/track/realtimeconversion",
"method": "GET",
"headers": {
"content-type": "application/json"
},
"body": "{\"data\":[]}"
}
cargo install pixellint
·
npm install pixellint