pixellint

vendor/id5-ctv · vendor documented

ID5 CTV S2S needs partner, ts, appid, ver, ip, and ua

ID5 documents the CTV fetch as POST JSON to /gc/v1. appid is the store ID. Cookie sync GIFs are not this pack. Mobile in-app /ga/v1 is vendor/id5.

appid is the store ID, not bundle

A /gc/v1 body with no appid is not the published CTV fetch. Mobile in-app uses bundle on /ga/v1.

Rule: vendor.id5-ctv.body.appid.missing

What this pack matches

Hosts
api.id5-sync.com
Paths
/gc/v1
Vendor docs
wiki.id5.io/docs/ctv-integration

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
partner required It is the ID5 Partner Number. ID5 documents partner as required on /gc/v1. Fix: Set partner to the Partner Number ID5 issued. Use 173 only while testing. vendor.id5-ctv.body.partner.missing
vendor.id5-ctv.body.partner.empty
vendor.id5-ctv.body.partner.invalid
docs
ts required It is the request timestamp. ID5 documents ts as required, as an ISO-8601 string with a time zone offset. Fix: Set ts to an ISO-8601 timestamp with offset, such as 2013-02-01T12:52:34+09:00. vendor.id5-ctv.body.ts.missing
vendor.id5-ctv.body.ts.empty
docs
appid required It is the store ID of the app. ID5 documents appid as required on /gc/v1. Fix: Set appid to the Apple App Store, Google Play, or equivalent store ID. vendor.id5-ctv.body.appid.missing
vendor.id5-ctv.body.appid.empty
docs
ver required It is the application version. ID5 documents ver as required. Fix: Set ver to the app version string. vendor.id5-ctv.body.ver.missing
vendor.id5-ctv.body.ver.empty
docs
ip required It is the IPv4 address closest to the device. ID5 documents ip as required. Fix: Send the device-facing IPv4 address, unhashed. vendor.id5-ctv.body.ip.missing
vendor.id5-ctv.body.ip.empty
docs
ua required It is the device default-browser user agent. ID5 documents ua as required. Fix: Send the raw user agent string, unhashed. vendor.id5-ctv.body.ua.missing
vendor.id5-ctv.body.ua.empty
docs
hem optional It is a SHA-256 hash of the cleansed email. ID5 documents hem as sha256 when present. Fix: Cleanse the email, hash it with SHA-256, and send 64 lowercase hex characters. vendor.id5-ctv.body.hem.empty
vendor.id5-ctv.body.hem.invalid
docs
phone optional It is a SHA-256 hash of the cleansed phone number. Fix: Cleanse the phone number, hash it with SHA-256, and send 64 lowercase hex characters. vendor.id5-ctv.body.phone.empty
vendor.id5-ctv.body.phone.invalid
docs
body.unhashed_email required A field carries what looks like a raw email address. ID5 documents hem as a SHA-256 digest of a cleansed email. Fix: Cleanse the email, hash it with SHA-256, and send it as hem. vendor.id5-ctv.body.unhashed_email docs

Validate a payload

pixellint validate json @payload.json --rulepack vendor/id5-ctv

Try this failing payload in the playground. ID5 CTV S2S missing partner.

{"ts":"2023-09-19T12:32:34+02:00","appid":"ABCDE12345.com.example.foo","ver":"1.0","ip":"4.5.6.7","ua":"Mozilla/5.0"}

cargo install pixellint · npm install pixellint