The call
Place this on your order confirmation / thank-you page only, with values rendered by your backend:Where to fire it Submit confirmed purchases only. The updated adapter derives a stable identity from the configured tag and final order ID. Retries keep that same identity. Missing order ID, value or currency prevents purchase submission; do not substitute a cart or checkout token for the final order ID.
Using the Browser Tag and Server-to-server CAPI together
The browser purchase command sends the configured tag and final order ID. The collector derivespurchase:v1: followed by the SHA-256 of compact UTF-8 JSON
[tag_id, order_id], after trimming both strings and normalizing an exact
gid://shopify/Order/<positive numeric ID> to that numeric ID. Your
server purchase
must use the same canonical event_id and tag. Do not rely on an event_id in
browser conversion parameters to override this identity: the command supplies
tag/order rather than forwarding that field. If you submit a versioned purchase
HTTP body with an explicit event_id, the collector rejects it unless it matches
the derived identity. An arbitrary ID such as order_123:purchase is not a valid
canonical purchase ID.
Coordinate existing server sender identities with Thrad before cutover. A hosted
runtime update cannot change the ID generated by your server, and historical
random IDs require a verified order mapping rather than an invented alias.
Fields
Delivery outcomes
The purchase command sends an inspectable/v1/collect request with unload-compatible
keepalive where the payload size permits it. Temporary network failures and
HTTP 429/5xx responses can make at most three attempts with the same tag/order
identity. Known terminal validation/authorization reasons and malformed receipts
stop; consent and signed expiry are checked before each attempt. There is no
persistent browser purchase queue or guarantee of recovery after browser shutdown.
A beacon result only confirms browser queueing. A GTM trigger, HTTP 2xx, collector
receipt or provider acknowledgment is not proof that a provider credited a
conversion. Verify the final purchase in Thrad’s ledger and the provider’s
attribution reporting separately. If a corrected explicit callback is needed,
keep the same final order and canonical identity; never create a second pixel
or a new random ID to escape a rejection.
That’s it for client-side conversions. If you’d rather send conversions from your backend (more reliable and resilient to ad blockers), use the Server-to-server Conversions API.
