emails_sha256 and phone_numbers_sha256; include both whenever you collected them and consent permits it.
Thrad also accepts external_ids_sha256, first_names_sha256, and last_names_sha256. Each field accepts up to three unique values. Geographic fields (countries, cities, regions, and postal_codes) remain raw.
Plaintext convenience fields
For a simpler first integration, Thrad can hash plaintextemails, phone_numbers, external_ids, first_names, and last_names at ingress. Plaintext is normalized and discarded before logs, errors, canonical records, or queues are created. Prefer pre-hashing when it is easy to do in your service.
data.custom_fields or any other field. Use either form only when measurement consent is present.
Normalization before hashing
- email: trim and lowercase;
- phone: convert to international digits-only form, remove
+or00and punctuation, then keep 8–15 digits; - external ID: trim only; preserve case;
- first and last name: lowercase and remove whitespace and ASCII punctuation; preserve non-ASCII characters.
Consent and routing
consent.measurement and consent.personalization default to true. Set measurement: false when the user has not consented to measurement. The event is returned as suppressed and is neither recorded nor forwarded.
The same canonical event can route to Thrad, OpenAI, or both. A signed Thrad click context (click_id, click_exp, and click_sig) enables Thrad attribution. An OpenAI reference (oppref, oppcref, or obref) or a supported advanced-matching identifier enables OpenAI eligibility. Your API response does not expose provider credentials or routing internals.
Use context.oppref unchanged when your server captured it from the browser flow. Send user.obref unchanged when available and permitted by measurement consent.