Skip to content

Server-side events · Platform reference

Microsoft Advertising Conversions API (CAPI) checker

Microsoft Advertising's Conversions API sends website, CRM, offline and app events from your server to a UET tag, alongside or instead of the UET JavaScript tag. Each event is either a pageLoad or a custom event and must carry at least one identifier, ideally the msclkid captured from the landing URL. Events often show as accepted but don't attribute because eventName doesn't match the conversion goal, msclkid is missing or badly formatted, or a hashed field was silently dropped as a validation warning.

Read from the official documentation on 9 November 2026. Sources are listed at the end.

Check your own setup

msclkid is added to your landing URL by auto-tagging. Paste the curl -sIL output of your tracking link into our redirect chain checker and it shows whether msclkid survives every hop to the final landing page. Without it, CAPI has nothing to attribute to. It doesn't build or validate the CAPI JSON payload, the eventName-to-goal mapping, or your hashing. Our CAPI event checker only reads Meta payloads.

Open the Redirect Chain Checker

Endpoint and authentication

POST https://capi.uet.microsoft.com/v1/{tagId}/events

Authorization: Bearer <ApiToken> header. The token is tied to the UET tag and comes from the UET tag settings (Use Conversions API > Copy Token) or the Campaign Management API call POST /CampaignManagement/v13/UetTagAuthKey/Query

Standard event names

Spelled exactly as Microsoft Advertising expects them. A near miss is treated as a different event.

EventUse it for
pageLoadeventType value. Send one per page view or SPA navigation, with eventTime, eventSourceUrl and pageLoadId. Feeds destination-URL goals. Can't carry revenue directly
customeventType value for user actions. eventName is the event action your custom-event conversion goal matches on. Microsoft defines no fixed list of standard event names
purchasecustomData.pageType value (retail / dynamic remarketing)
cartcustomData.pageType value
productcustomData.pageType value
categorycustomData.pageType value
searchresultscustomData.pageType value
homecustomData.pageType value
othercustomData.pageType value

Required and recommended fields

FieldWhat it needs
dataRequired array of event objects
eventTypeRequired. Must be "pageLoad" or "custom". Any other value gets a 400 InvalidEnumValue
eventTimeRequired. UNIX epoch UTC in seconds, within the last 90 days
eventIdRequired for deduplication. A stable ID, the same as the event_id on the UET tag event
eventNameRequired for deduplication. The event action for custom conversion goals
eventSourceUrlRequired for pageLoad events
userDataRequired. Must include at least one of anonymousId, externalId, em, ph, msclkid, idfa, gaid
customData.value / customData.currencyVariable revenue. currency is a 3-letter ISO 4217 code
customData.transactionIdOptional, but recommended for single events such as a purchase. Restate/retract needs it
dataProviderRequired for third-party senders

Match keys and hashing

KeyNormalise and hash
userData.emTrim whitespace, remove dots from the local part, remove any +alias, lowercase the whole address, then SHA-256 as lowercase hex
userData.phNormalise to E.164 with country code (e.g. +14255551234), then SHA-256 as lowercase hex
userData.anonymousIdNot hashed. Visitor ID (preferably a v1 UUID). Must equal the VID sent in the client-side ID Sync pixel. Never send real user IDs
userData.externalIdAnonymised signed-in user ID (ideally a 32-byte hex string). Not a raw ID
userData.clientIpAddressRaw IPv4 or IPv6
userData.clientUserAgentRaw browser user agent
userData.idfa / userData.gaidRaw mobile advertising IDs

Click ids

Click idWhere it comes from
msclkidAppended to the landing URL when auto-tagging is on. Store the latest value (first-party cookie, local storage or server store, suggested retention 90 days), overwrite it on each new click, and send it as userData.msclkid. Must be a valid UUID, sent without hyphens

Deduplication

Time limits and batch sizes

How to test before you trust it

Why events arrive but don't attribute

Sources

Platforms change these rules without notice. If a source says something different from this page, the source wins.

Other platforms

All platforms