Microsoft Copilot Ads
The official Copilot page describes ads in Copilot as ads served from eligible Microsoft Advertising campaigns. Microsoft says eligible campaigns and ad types are automatically opted in, ads are not guaranteed to serve, and Copilot-specific metrics are not currently available. About ads in Copilot
There is no documented Copilot-specific ads API, conversions API, browser tag, token, or click ID in the official Copilot documentation checked here. Microsoft says Copilot-specific metrics are not currently available, so do not design for a separate Copilot report. Use the parent Microsoft Advertising APIs and UET surfaces. The parent platform documents a Campaign Management API and a UET Conversions API. About ads in Copilot, Campaign Management API, Conversions API
Use ad-conversion-hub for the canonical event envelope, consent gate, identity rules, retry policy, and adapter contract. Pair it with ad-experiments for one-audience tests, seed sizing, and PII-export authorization.
Account and access
Microsoft Advertising has a self-serve account route. Microsoft’s API FAQ says to sign up for a Microsoft Advertising account, then obtain a developer token through the Developer Portal. Microsoft Advertising API FAQ
Copilot does not have a separate signup flow in the official Copilot page. Create or use the Microsoft Advertising account, then check whether the campaign and ad type is eligible to serve in Copilot. Eligible campaign and ad types are automatically opted in; advertisers cannot opt out. About ads in Copilot
The parent Campaign Management API can add, get, update, and delete campaign data. That API is the documented automation surface for Microsoft Advertising, not a Copilot-specific API. Campaign Management API
Microsoft Advertising API calls use OAuth. Requests use an OAuth access token,
the DeveloperToken header, and account identifiers when the operation needs
them. Make your first API call
The Microsoft OAuth scope for Bing Ads API access is
https://ads.microsoft.com/msads.manage. Access tokens expire, and clients
must use the documented refresh-token flow. Get access and refresh tokens
Store tokens in the server secret store under local names.
Client-side UET
UET is the Microsoft Advertising tag for website activity. Microsoft says to create a UET tag and add its tracking code to every page before using conversion tracking or remarketing. Universal Event Tracking
Use the tracking code generated by Microsoft Advertising. Put it in the site-wide layout so eligible pages receive it. Do not create a Copilot pixel ID or load an unofficial Copilot script. Microsoft’s UET guide documents one UET tag for multiple conversion goals and remarketing lists. Universal Event Tracking
UET is not required to be a Copilot-specific tag. The same parent-platform UET tag can support Microsoft Advertising conversion goals and CAPI events when the tag and goal configuration match. Conversions API
Rule setup and event mapping
Create a Microsoft Advertising conversion goal for each action that the
campaign should optimize or report. An EventGoal counts a specified website
action and matches expressions for action, category, label, or value. EventGoal data object
The table uses hub names as adapter labels. Microsoft does not prescribe these
names. Set the goal’s action expression to the exact eventName sent for a
custom event. Conversions API, EventGoal data object
| Hub event | Microsoft event | Implementation rule |
|---|---|---|
page_view |
eventType: "pageLoad" |
Send one page-load event per page view or SPA navigation. |
view_content |
eventType: "custom", eventName: "view_content" |
Create an EventGoal only if this action matters. |
lead |
eventType: "custom", eventName: "lead" |
Send after the lead is accepted by your system. |
signup |
eventType: "custom", eventName: "signup" |
Send after account creation succeeds. |
begin_checkout |
eventType: "custom", eventName: "begin_checkout" |
Send when checkout begins. |
purchase |
eventType: "custom", eventName: "purchase" |
Send after the payment provider confirms the charge. |
subscription_start |
eventType: "custom", eventName: "subscription_start" |
Send after the paid subscription activates. |
refund |
No new conversion event | Reconcile payment truth in the hub. Do not turn a refund into a purchase. |
For a custom event, use the documented eventType, eventId, eventName,
eventTime, userData, and customData fields. Use eventCategory,
eventLabel, eventValue, transactionId, value, and currency only when
the goal or reporting use case needs them. Conversions API payload reference
Use the same pageLoadId when a custom event belongs to a page-load event.
Microsoft documents pageLoadId as the link between the page context and its
custom events. Conversions API data schema
Server-side Conversions API
Microsoft Advertising has a real server-side Conversions API. It accepts website, CRM, offline, and mobile event data through the Microsoft Advertising UET measurement system. This is a parent-platform CAPI, not a Copilot-specific conversion endpoint. Conversions API
Microsoft documents token retrieval in the Microsoft Advertising UI and through an API operation. The API operation warns that the feature is not available to everyone yet. Use the UI route when it is present, and do not enable this adapter until the account exposes a documented token flow. Conversions API, GetUetTagAuthKey
Microsoft documents this direct endpoint:
POST https://capi.uet.microsoft.com/v1/{tagId}/events
Authorization: Bearer <MICROSOFT_ADS_UET_CAPI_TOKEN>
Content-Type: application/json
The URL contains the UET tagId. The bearer token is the authorization token
for that UET tag. Microsoft documents HTTP 200 for a successful request and
HTTP 400 or 401 for errors. Conversions API endpoint
Send the canonical event in the documented request shape:
{
"data": [
{
"eventType": "custom",
"eventId": "<CANONICAL_EVENT_ID>",
"eventName": "purchase",
"eventTime": 1788091200,
"userData": {
"anonymousId": "<ANONYMOUS_ID>",
"msclkid": "<MSCLKID>",
"em": "<SHA256_EMAIL_HEX>"
},
"customData": {
"transactionId": "<PAYMENT_TRANSACTION_ID>",
"value": 25.00,
"currency": "USD"
}
}
]
}
data is the required list of events. eventType is pageLoad or custom.
eventTime is Unix epoch UTC seconds and must be within the last seven days.
eventId supports deduplication, and eventName identifies a custom action.
userData carries matching identifiers, while customData carries conversion
and business fields. Conversions API core schema
Send events in real time when possible. Microsoft allows individual events or batches, with a maximum of 1,000 events per batch. Use the hub’s bounded retry and dead-letter policy. Conversions API validation
By default, one invalid event makes the whole batch fail. Set
continueOnValidationError to true only when the caller can reconcile the
valid events and the rejected events. Microsoft documents HTTP 200 when at
least one event remains valid and HTTP 400 when none are valid. Conversions API validation
Identity and consent
Pass at least one supported identifier in userData. Microsoft lists
anonymousId, externalId, msclkid, hashed email em, hashed phone ph,
idfa, and gaid among the supported identifiers. Conversions API user data
Require the hub’s measurement: true before sending Microsoft event data.
Require ad_user_data: true before deriving or sending hashed email, hashed
phone, external IDs, IP address, or other ad-user data. The hub owns that
consent decision. ad-conversion-hub
Microsoft’s CAPI default treats events as consent granted. Send explicit
adStorageConsent: "G" for granted or "D" for denied. Microsoft says denied
events are not used for advertising purposes, including conversion attribution
and retargeting. Conversions API consent signals
Normalize identifiers before hashing. For email, trim surrounding whitespace,
remove dots from the user part, remove a +alias, lowercase the full address,
then apply SHA-256 and send lowercase hexadecimal text. For phone, normalize to
E.164 with country code, then apply SHA-256 and send lowercase hexadecimal
text. Conversions API hashed identifiers
Do not send raw email addresses, raw phone numbers, or real user IDs. Microsoft
recommends a new UUID or a hash for user IDs. Send clientUserAgent and
clientIpAddress only when permitted by the hub’s consent and privacy rules.
Conversions API user data
Click ID and first-party cookie
Microsoft’s click identifier is msclkid. With auto-tagging enabled, Microsoft
Advertising appends it to the landing URL after an ad click. Capture it on the
first request, store the most recent value in first-party storage or a
server-side store, and overwrite it when a newer value arrives. Conversions API MSCLKID
Microsoft suggests retaining the most recent msclkid for 90 days and documents
it as a UUID. Treat 90 days as Microsoft’s suggestion, not a guarantee that a
Copilot placement will receive attribution. Conversions API MSCLKID
Microsoft does not document a Copilot-owned click parameter or cookie name.
Do not create copilot_click_id, copilot_id, or another vendor-looking name.
Use the literal msclkid field in CAPI and your own first-party storage key.
About ads in Copilot, Conversions API
ID Sync and visitor identity
Microsoft documents an optional authenticated or anonymous visitor mapping for
server-side events. Its client-side ID Sync uses Red3, VID, and optional
UID parameters at https://c.bing.com/c.gif; Red3 uses the format
BACID_<CID>, and VID should be an anonymous visitor ID. Conversions API ID Sync
The anonymousId sent in CAPI should match the VID sent by ID Sync. Microsoft
requires ID Sync for audience creation, remarketing, and dynamic remarketing,
and recommends it for conversion measurement quality. Conversions API ID Sync
Deduplication
When UET JavaScript and CAPI send the same conversion, use the same UET tag,
stable event ID, and compatible event name. Microsoft documents the shared
eventId as the deduplication value. Conversions API deduplication
The browser UET event example uses event_id; the CAPI object uses eventId.
Use the same hub event_id value in both representations:
window.uetq.push("event", "purchase", {
event_id: canonicalEvent.event_id,
});
{
"eventType": "custom",
"eventId": "<same canonical event ID>",
"eventName": "purchase"
}
This protects against double counting when both delivery paths report one conversion. It does not create a Copilot-specific attribution report. Conversions API deduplication, About ads in Copilot
Microsoft Advertising settings that override code
- The UET tag must be attached to the conversion goal. The goal’s event expressions must match the values sent by UET or CAPI. EventGoal data object
- Adding or updating a conversion goal through the Microsoft Advertising web application or Campaign Management API enables MSCLKID auto-tagging for the relevant account scope. EventGoal data object
- The CAPI token belongs to a UET tag. Use the tag that corresponds to the goal and event you measure. Conversions API authorization
- Eligible campaign and ad types are automatically opted into Copilot, and advertisers cannot opt out. There is no guarantee that an eligible ad serves. About ads in Copilot
- Negative keyword matching applies to Copilot in the same way as web searches on the Microsoft Advertising Network. About ads in Copilot
Verification
- Request proof: record the redacted CAPI response, HTTP status, canonical event ID, UET tag ID, consent value, and dispatch record.
- Schema proof: check the response for validation errors and warnings. Microsoft distinguishes invalid required fields from warnings that remove an optional field. Conversions API validation
- Reporting proof: use the Microsoft Advertising conversion-goal and Reporting surfaces. Microsoft documents Reporting API reports, but says it does not currently support specific metrics for ads served in Copilot. Reporting API guides, About ads in Copilot
- Business proof: reconcile purchases and refunds with the payment provider. Treat a successful CAPI request as delivery evidence, not proof of Copilot attribution.
Microsoft’s API FAQ says clicks can take up to two hours and conversions up to three hours to become available for reporting. Microsoft Advertising API FAQ
Common pitfalls and security
- Treating Copilot as a separate advertiser API or expecting a Copilot token. Use Microsoft Advertising account, UET, CAPI, and Reporting surfaces. About ads in Copilot, Conversions API
- Sending
eventTimein milliseconds. Microsoft requires Unix epoch seconds and accepts events only within the last seven days. Conversions API core schema - Sending
event_idin the server payload. CAPI useseventId; the browser UET example usesevent_id. Conversions API deduplication - Sending raw identifiers or hashing without consent. Use the hub gate and the Microsoft normalization rules. Conversions API hashed identifiers
- Assuming 90-day
msclkidretention guarantees Copilot attribution. Microsoft calls 90 days a suggested retention period. Conversions API MSCLKID - Treating the absence of a Copilot metric as zero conversions. Microsoft says Copilot-specific metrics are not currently supported. About ads in Copilot
- Putting developer tokens, OAuth secrets, refresh tokens, or UET CAPI tokens in browser bundles, URLs, logs, screenshots, or commits. Store them in the server secret store and redact them from diagnostics. Microsoft’s OAuth guide requires secure handling of access and refresh tokens. Get access and refresh tokens
- Letting unavailable CAPI access block checkout. Keep the canonical event in
the hub and return a logged
skippedresult when the Microsoft capability is unavailable. ad-conversion-hub