pixellint

ID5 mobile S2S needs partner, ts, bundle, ver, ip, and ua

ID5 documents the in-app fetch as POST JSON to /ga/v1. partner is the Partner Number. Cookie sync GIFs are not this pack. CTV /gc/v1 is vendor/id5-ctv.

partner is the ID5 Partner Number

A /ga/v1 body with no partner is not tied to an ID5 account.

Rule: vendor.id5.body.partner.missing

What this pack matches

Hosts
api.id5-sync.com
Paths
/ga/v1
Vendor docs
wiki.id5.io/docs/mobile-in-app-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
optional ID5 accepts a JSON object as its request body. Native JSON type: object. vendor.id5.body..invalid docs
partner required It is the ID5 Partner Number. ID5 documents partner as required on /ga/v1. Native JSON type: integer. Minimum numeric value: -2147483648. Maximum numeric value: 2147483647. Fix: Set partner to the Partner Number ID5 issued. Use 173 only while testing. vendor.id5.body.partner.missing
vendor.id5.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. Native JSON type: string. Fix: Set ts to an ISO-8601 timestamp with offset, such as 2013-02-01T12:52:34+09:00. vendor.id5.body.ts.missing
vendor.id5.body.ts.empty
vendor.id5.body.ts.invalid
docs
bundle required It is the app identifier. ID5 documents bundle as required: package name on Android, numeric ID on iOS. Native JSON type: string. Fix: Set bundle to the app package name or iOS numeric ID. vendor.id5.body.bundle.missing
vendor.id5.body.bundle.empty
vendor.id5.body.bundle.invalid
docs
ver required It is the application version. ID5 documents ver as required. Fix: Set ver to the app version string. vendor.id5.body.ver.missing
vendor.id5.body.ver.empty
docs
ip required It is the IPv4 address closest to the device. ID5 documents ip as required. Native JSON type: string. Fix: Send the device-facing IPv4 address, unhashed. vendor.id5.body.ip.missing
vendor.id5.body.ip.empty
vendor.id5.body.ip.invalid
docs
ua required It is the device default-browser user agent. ID5 documents ua as required. Native JSON type: string. Fix: Send the raw user agent string, unhashed. vendor.id5.body.ua.missing
vendor.id5.body.ua.empty
vendor.id5.body.ua.invalid
docs
hem optional It is a SHA-256 hash of the cleansed email. ID5 documents hem as sha256 when present. Native JSON type: string. Fix: Normalize and SHA-256 hash the identifier, then send its 64-character hexadecimal digest. vendor.id5.body.hem.empty
vendor.id5.body.hem.invalid
docs
phone optional It is a SHA-256 hash of the cleansed phone number. Native JSON type: string. Fix: Normalize and SHA-256 hash the identifier, then send its 64-character hexadecimal digest. vendor.id5.body.phone.empty
vendor.id5.body.phone.invalid
docs
provider optional ID5 documents provider as an optional string request field. Native JSON type: string. vendor.id5.body.provider.empty
vendor.id5.body.provider.invalid
docs
signature optional ID5 documents signature as an optional string request field. Native JSON type: string. vendor.id5.body.signature.empty
vendor.id5.body.signature.invalid
docs
gdpr_consent optional ID5 documents gdpr_consent as an optional string request field. Native JSON type: string. vendor.id5.body.gdpr_consent.empty
vendor.id5.body.gdpr_consent.invalid
docs
gpp_string optional ID5 documents gpp_string as an optional string request field. Native JSON type: string. vendor.id5.body.gpp_string.empty
vendor.id5.body.gpp_string.invalid
docs
region optional ID5 accepts ISO 3166-2 subdivision codes, or a two-letter state code for the USA. Native JSON type: string. vendor.id5.body.region.empty
vendor.id5.body.region.invalid
docs
city optional ID5 names the UN/LOCODE format, two country letters followed by three letters or digits 2 through 9. Native JSON type: string. vendor.id5.body.city.empty
vendor.id5.body.city.invalid
docs
accept_language optional ID5 requires compatibility with the browser Accept-Language header. RFC 9110 and RFC 4647 define basic language ranges and optional quality weights from 0 to 1 with at most three fractional digits. Evidence: formal standard. Native JSON type: string. vendor.id5.body.accept_language.empty
vendor.id5.body.accept_language.invalid
docs
gdpr optional ID5 documents 1 when GDPR applies and 0 otherwise. Native JSON type: integer. Minimum numeric value: 0. Maximum numeric value: 1. vendor.id5.body.gdpr.invalid docs
allowed_vendors optional ID5 documents allowed_vendors as an array of vendor identifier strings. Native JSON type: array. vendor.id5.body.allowed_vendors.invalid docs
allowed_vendors[] optional ID5 accepts ID5-prefixed partner identifiers or numeric IAB vendor IDs. Native JSON type: string. vendor.id5.body.allowed_vendors[].empty
vendor.id5.body.allowed_vendors[].invalid
docs
us_privacy optional ID5 accepts the IAB US Privacy String. Native JSON type: string. vendor.id5.body.us_privacy.empty
vendor.id5.body.us_privacy.invalid
docs
gpp_sid optional ID5 allows one GPP section ID or at most two comma-separated section IDs. Native JSON type: string. vendor.id5.body.gpp_sid.empty
vendor.id5.body.gpp_sid.invalid
docs
idfv optional ID5 documents the Apple vendor identifier in UUID format. Native JSON type: string. vendor.id5.body.idfv.empty
vendor.id5.body.idfv.invalid
docs
ipv6 optional ID5 documents ipv6 as the device IPv6 address. Native JSON type: string. vendor.id5.body.ipv6.empty
vendor.id5.body.ipv6.invalid
docs
country optional ID5 documents country as an ISO 3166-1 alpha-2 code. Native JSON type: string. vendor.id5.body.country.empty
vendor.id5.body.country.invalid
docs
segments optional ID5 documents segments as an array of objects. Native JSON type: array. vendor.id5.body.segments.invalid docs
segments[] optional Every ID5 segment entry is an object. Native JSON type: object. vendor.id5.body.segments[].invalid docs
name optional ID5 documents name as an optional string request field. Native JSON type: string. vendor.id5.body.name.empty
vendor.id5.body.name.invalid
docs
domain optional ID5 documents domain as an optional string request field. Native JSON type: string. vendor.id5.body.domain.empty
vendor.id5.body.domain.invalid
docs
puid optional ID5 documents puid as an optional string request field. Native JSON type: string. vendor.id5.body.puid.empty
vendor.id5.body.puid.invalid
docs
maid optional ID5 documents the device advertising identifier in UUID format. Native JSON type: string. vendor.id5.body.maid.empty
vendor.id5.body.maid.invalid
docs
maid_type optional ID5 documents idfa and gaid as device identifier types. Native JSON type: string. vendor.id5.body.maid_type.empty
vendor.id5.body.maid_type.invalid
docs
att optional ID5 declares ATT boolean while also illustrating binary integer values. Native JSON type: boolean or integer. Minimum numeric value: 0. Maximum numeric value: 1. vendor.id5.body.att.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.body.unhashed_email docs
body.us_region_format required ID5 specifies a two-letter state code for USA regions. vendor.id5.body.us_region_format docs
body.non_us_region_iso_format required ID5 permits the two-letter state abbreviation only for the United States. Other supplied countries require an ISO 3166-2 region code. vendor.id5.body.non_us_region_iso_format docs
destination required Every segment needs its destination IAB vendor identifier. Body scope: segments[]. Native JSON type: string. vendor.id5.body.destination.missing
vendor.id5.body.destination.empty
vendor.id5.body.destination.invalid
docs
ids required Every segment needs an array of string segment identifiers. Body scope: segments[]. Native JSON type: array. vendor.id5.body.ids.missing
vendor.id5.body.ids.invalid
docs
ids[] optional Segment identifiers are strings. Body scope: segments[]. Native JSON type: string. vendor.id5.body.ids[].empty
vendor.id5.body.ids[].invalid
docs
method required The published endpoint accepts an HTTP POST request. Complete HTTP capture contract. vendor.id5.http.method.missing
vendor.id5.http.method.empty
vendor.id5.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.id5.http.content_type.missing
vendor.id5.http.content_type.empty
vendor.id5.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.id5.http.body_encoding.missing
vendor.id5.http.body_encoding.empty
vendor.id5.http.body_encoding.invalid
docs

Validate a payload

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

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

{"ts":"2013-02-01T12:52:34+09:00","bundle":"com.foo.mygame","ver":"1.2.0","ip":"198.51.100.42","ua":"Mozilla/5.0"}

cargo install pixellint · npm install pixellint