Documentation Index
Fetch the complete documentation index at: https://docs.interchange.io/llms.txt
Use this file to discover all available pages before exploring further.
Overview
The buyer activity feed surfaces meaningful mutations across your workspace —CREATE, UPDATE, DELETE, ARCHIVE, and EXECUTE actions on advertisers, campaigns, creatives, media buys, products, and packages — along with the actor that performed them (a human user or a service token / agent) and the time the change was recorded.
Use audit logs for:
- Compliance — produce a tamper-evident 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.
All endpoints below are mounted under
https://api.interchange.io/api/v2/buyer/. The activity feed is the REST fallback that powers the in-app activity view; agents and external systems can poll it directly.Prerequisites
- A Scope3 API key (see Authentication)
ADMINrole or above for the buyer customer — audit logs include actor identity and are not exposed to non-admin roles- Optional: a campaign or advertiser ID to scope the feed
Step 1: List recent activity
Each row carries:| Field | Notes |
|---|---|
id, timestamp, createdAt | Stable row identifier and event time (ISO 8601, UTC) |
action | One of CREATE, UPDATE, DELETE, ARCHIVE, EXECUTE |
resourceType | CAMPAIGN, CREATIVE, MEDIA_BUY, PRODUCT, PACKAGE |
resourceId, resourceName | Public ID and human label of the resource that changed |
parentType, advertiserId | Hierarchy context (e.g. the advertiser the campaign belongs to) |
userId, userEmail, userName | Set when a human user made the change |
serviceTokenId, serviceTokenName | Set when an agent / service token made the change |
parameters | The input payload for the operation (e.g. the body of an UPDATE) |
changes | Field-level before/after diff, populated where applicable |
description | Pre-rendered human-readable summary |
Step 2: Filter
The endpoint supports four filter dimensions. Combine them as needed.| Query param | Type | Meaning |
|---|---|---|
startDate, endDate | ISO timestamps | Inclusive time window |
advertiserId | integer | Restrict to a single advertiser |
campaignId | string (e.g. camp_abc123) | The campaign row plus all of its descendants (media buys, etc.) |
resourceTypes | repeated or comma-separated enum | Subset of CAMPAIGN, CREATIVE, MEDIA_BUY, PRODUCT, PACKAGE |
take, skip | integers | Pagination — take defaults to 50, max 500 |
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 (GET / list calls) are not surfaced.
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.
Best practices
- Retention — audit rows are retained for the standard customer retention window. Archive rows you need long-term 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
| Method | Path | Purpose |
|---|---|---|
GET | /audit-logs | List buyer activity, with optional filters and pagination |
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