Overview
Buyer Activity has two complementary records:- Calls show each admitted buyer API request, including reads, failures, denials, latency, workload identity, and correlation IDs.
- Changes show meaningful
CREATE,UPDATE,DELETE,ARCHIVE, andEXECUTEmutations on advertisers, campaigns, creatives, media buys, products, and packages.
- Compliance — review the recorded trail of who changed what and when across multi-tenant workspaces.
- Debugging — reconstruct the sequence of events around a campaign that suddenly stopped pacing or a creative that flipped to
rejected. - Post-incident analysis — answer “what changed in the last hour?” and “did this agent touch anything it wasn’t supposed to?”.
- Operational visibility — feed the data into a SIEM, a Slack channel, or your own dashboard.
userId + userEmail for humans, serviceTokenId + serviceTokenName for agents), the resource (resourceType + resourceId + resourceName), the action, and the parameters or field-level changes that drove it.
MCP is the primary agent interface. Calls made through MCP and REST appear in the same Activity ledger. The REST endpoints below power the in-app view and let external operational systems query that ledger directly; they are not a separate REST-only activity product.Scope3 internal admin and staff operations are excluded from your account’s Activity ledger, including when a Scope3 operator is inspecting your workspace.
Open Activity in your agent client
On the v2 buyer MCP server, call the typedlist_buyer_activity read—or ask your agent to “show my API activity,” “show failed calls,” or “what did this workload do?” MCP clients that support MCP Apps render the Activity page inside the current conversation, so you do not need to switch to the Interchange web app.
- Calls — normalized REST, MCP, and A2A operations with workload, outcome, latency, environment, and correlation IDs;
- Call detail — recorded request fields and available response or error details, redacted allowlisted headers, validation/response steps, timing, and retry guidance;
- Ask Murph about this call — calls the shared typed
ask_murphtool with the exactactivityUidand renders the evidence-grounded diagnosis inline, without adding a chat turn; and - Changes — the compatible domain-mutation history previously shown as the entire Activity log.
ui://agentic-api/buyer-activity/mcp-app.html resource directive. Clients without MCP Apps support can still summarize the typed result and query the REST endpoints below. They should not describe the separate Changes feed as a complete API-call history.
Prerequisites
- A Scope3 API key (see Authentication)
- Buyer members can list account-scoped call and change metadata. Account or advertiser admins can open redacted call detail. Service tokens can see only activity attributed to their stable workload lineage.
- Optional: a campaign or advertiser ID to scope the feed
Step 1: List recent activity
1
Pull the most recent 50 events
2
Inspect the response
Step 2: Filter
The endpoint supports four filter dimensions. Combine them as needed.resourceTypes accepts either a comma-separated value (?resourceTypes=CAMPAIGN,CREATIVE) or repeated query params (?resourceTypes=CAMPAIGN&resourceTypes=CREATIVE). The default is the full set of buyer resource types.CREATE, UPDATE, DELETE, ARCHIVE, EXECUTE. Read-only operations are available from the Calls endpoint below.
Step 3: Common patterns
Who changed this campaign?
Scope to a campaign and inspect the actor on each row. ThecampaignId filter matches both the campaign itself and its descendants (media buys, etc.) so you see the full activity tree.
userEmail || serviceTokenName to see which operator or agent has been touching the campaign.
What did this agent do today?
Filter to a 24-hour window and look at rows whereserviceTokenId is non-null. Match serviceTokenName against the agent you care about.
Did this incident leave a trace?
For post-incident analysis, pull the time window around the symptom and filter to the resource types most likely to have driven it.description field gives a one-line human summary; parameters and changes carry the full diff for deeper inspection.
Debug API calls
GET /activity/calls returns the normalized call ledger for your account. It is cursor-paginated and defaults to 50 rows.
The Calls view is available to buyer and seller accounts. Durable call capture begins before anyone opens the view, so opening it does not begin or reset workload history.
startTime, endTime, workloadUid, runUid, clientRunId, advertiserId, environment, outcome, operation, and protocol (surface). Pass the returned opaque nextCursor as cursor without editing it; cursors are scoped to the account and filter set.
clientRunId is a caller-supplied correlation identifier, so use it to group calls rather than as independent provenance. To verify a run, cross-check the server-observed apiVersion, workloadUid, runUid, and the expected time window.
Each call includes:
activityUid,requestId, andtraceIdfor support and tracing;- the normalized
operation, protocol, HTTP status, outcome, and latency; operationDispatches, a bounded server-observed record of buyer or storefront facade operations selected by a v3 tool, in invocation order;- the stable
workloadUidand credential snapshot used for that request; - an explicit
runUidwhen the caller supplied a run ID or eligible W3C trace, plus itsclientRunIdcorrelation identifier when supplied; - the
apiVersionobserved by the server for the routed request; - a safe error class, fault domain, and retry disposition when the call failed.
operationDispatches: null means the call predates dispatch capture, did not use a captured v3 surface, or ended before the observer could produce a complete snapshot. A non-null envelope distinguishes a completed v3 call that selected no facade operation from one whose evidence is unavailable. Preserve duplicate items: retries and fan-outs are recorded as separate attempts. Treat truncated: true or an item whose completionState is started as incomplete evidence. Native v3 service calls that do not use the buyer or storefront facade are outside this field’s scope.
Fetch one call with GET /api/v2/activity/calls/{activityUid}. For newly captured calls, the detail response adds:
redactedInput: schema-declared MCP arguments, or schema-validated REST path, query, and body fields, after sensitive values are removed;redactedOutput: the redacted typed MCP result, or the public REST error envelope returned to the caller (successful REST payloads are not copied into the ledger);safeHeaders: an explicit allowlist of non-secret debugging headers, such as content type, idempotency key, user agent, request ID, and run ID;steps: validation and response milestones, including field paths and public validation messages; and- route, timing, workload, run, trace, and retry guidance.
ask_murph tool with the exact activityUid, then shows the answer or retry state inline. The action does not submit a synthetic user message or modify the host composer, so it behaves the same way in Interchange, Claude, ChatGPT, and other MCP-app hosts. Murph explains only what the evidence supports and can point to the relevant documentation. It cannot bypass account, workload, or private-conversation access rules. You can also paste an X-Scope3-Activity-Id into an authorized Murph conversation.
Group calls into an agent run
For MCP, send the same namespaced metadata on eachtools/call that belongs to one explicit agent cycle:
X-Scope3-Activity-Id. A normal tool result also includes the same correlation in result metadata:
., _, :, and -. Run labels are optional and limited to 120 characters. When no run ID is present, a valid caller-supplied W3C traceparent root trace ID can group workload calls; server-created traces never manufacture a run.
Every durably admitted request returns X-Scope3-Activity-Id alongside X-Request-Id and X-Trace-Id. If the activity ledger cannot persist the start, the API returns 503 ACTIVITY_LEDGER_UNAVAILABLE and does not run the requested operation.
Best practices
- Retention — safe call diagnostics are retained for 90 days and slim call metadata for 13 months. Archive records you need longer to your own warehouse.
- Pagination ceiling —
takeis capped at500. For larger exports, iterate by time window. - Idempotency —
idis stable per row, so client-side dedupe onidis safe across overlapping polls. - Don’t rely on
actionsfiltering at the API — the activity feed always restricts to meaningful actions; filter further client-side if you need to (e.g. onlyDELETE).
Endpoint reference
The equivalent typed MCP read is
list_buyer_activity. It owns the portable Activity page; there is no separate open_activity launcher.
Query parameters: startDate, endDate, advertiserId, campaignId, resourceTypes, take (default 50, max 500), skip (default 0).
Response: { data: { logs: BuyerAuditLog[], total: number }, meta: { pagination: { skip, take, total, returned } } }.
See the OpenAPI spec for the full BuyerAuditLog shape: API Reference.
Related
- Notifications — push notifications for the same underlying events
- Errors — error codes you may see surfaced in
parameters - Authentication — required role and token setup