curl --request GET \
--url https://api.interchange.io/api/v2/storefront/media-buys/{mediaBuyId}/timeline \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/media-buys/{mediaBuyId}/timeline"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/media-buys/{mediaBuyId}/timeline', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"mediaBuyId": "<string>",
"buyer": {
"customerId": 0,
"name": "<string>"
},
"approval": {
"status": "<string>",
"submittedAt": "<string>",
"reviewedBy": "<string>",
"reviewedAt": "<string>",
"reviewerNotes": "<string>",
"forwardedAt": "<string>",
"submittedPayload": {}
},
"stages": [
{
"stage": "received",
"at": "<string>",
"detail": "<string>",
"evidence": [
{
"at": "<string>",
"kind": "exchange_event",
"eventType": "<string>",
"outcome": "<string>",
"errorCode": "<string>",
"recovery": "transient",
"attemptNumber": 0,
"hiddenCount": 0,
"detail": "<string>"
}
]
}
],
"legs": [
{
"sourceId": "<string>",
"sourceName": "<string>",
"sourceKind": "<string>",
"currentStatus": "<string>",
"forwardedAt": "<string>",
"responseReceivedAt": "<string>",
"theirReference": {
"mediaBuyId": "<string>",
"taskId": "<string>"
},
"platformReference": {
"idempotencyKey": "<string>",
"requestedAt": "<string>"
},
"stages": [
{
"stage": "received",
"at": "<string>",
"detail": "<string>",
"evidence": [
{
"at": "<string>",
"kind": "exchange_event",
"eventType": "<string>",
"outcome": "<string>",
"errorCode": "<string>",
"recovery": "transient",
"attemptNumber": 0,
"hiddenCount": 0,
"detail": "<string>"
}
]
}
],
"forwardedPayload": {},
"responsePayload": {},
"payloadHighlights": {
"flightStart": "<string>",
"flightEnd": "<string>",
"budget": 123,
"currency": "<string>",
"packageCount": 0,
"productIds": [
"<string>"
],
"targetingKeys": [
"<string>"
],
"signalTargetingSelections": [
{
"scope": "<string>",
"signalId": "<string>",
"groupOperator": "any",
"minValue": 123,
"maxValue": 123
}
]
},
"replayed": true,
"note": "<string>"
}
],
"eventsTruncated": true
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Get one buy's exchange timeline
The seller-scoped projection of the buy’s exchange record: stages (received → screened → decided → forwarded / forward-failed → submitted → source moderation → accepted / rejected → delivering) with evidence, per-source legs, and the references to quote per state — the source’s own ids as their reference, and the sf: idempotency key paired with the request timestamp as the platform reference. The forwarded payload is returned minus platform-internal fields (webhook/push-notification config and signing material); admin-only material never appears. {"pruned": true} payloads mean retention removed the bytes.
curl --request GET \
--url https://api.interchange.io/api/v2/storefront/media-buys/{mediaBuyId}/timeline \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/media-buys/{mediaBuyId}/timeline"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/media-buys/{mediaBuyId}/timeline', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"mediaBuyId": "<string>",
"buyer": {
"customerId": 0,
"name": "<string>"
},
"approval": {
"status": "<string>",
"submittedAt": "<string>",
"reviewedBy": "<string>",
"reviewedAt": "<string>",
"reviewerNotes": "<string>",
"forwardedAt": "<string>",
"submittedPayload": {}
},
"stages": [
{
"stage": "received",
"at": "<string>",
"detail": "<string>",
"evidence": [
{
"at": "<string>",
"kind": "exchange_event",
"eventType": "<string>",
"outcome": "<string>",
"errorCode": "<string>",
"recovery": "transient",
"attemptNumber": 0,
"hiddenCount": 0,
"detail": "<string>"
}
]
}
],
"legs": [
{
"sourceId": "<string>",
"sourceName": "<string>",
"sourceKind": "<string>",
"currentStatus": "<string>",
"forwardedAt": "<string>",
"responseReceivedAt": "<string>",
"theirReference": {
"mediaBuyId": "<string>",
"taskId": "<string>"
},
"platformReference": {
"idempotencyKey": "<string>",
"requestedAt": "<string>"
},
"stages": [
{
"stage": "received",
"at": "<string>",
"detail": "<string>",
"evidence": [
{
"at": "<string>",
"kind": "exchange_event",
"eventType": "<string>",
"outcome": "<string>",
"errorCode": "<string>",
"recovery": "transient",
"attemptNumber": 0,
"hiddenCount": 0,
"detail": "<string>"
}
]
}
],
"forwardedPayload": {},
"responsePayload": {},
"payloadHighlights": {
"flightStart": "<string>",
"flightEnd": "<string>",
"budget": 123,
"currency": "<string>",
"packageCount": 0,
"productIds": [
"<string>"
],
"targetingKeys": [
"<string>"
],
"signalTargetingSelections": [
{
"scope": "<string>",
"signalId": "<string>",
"groupOperator": "any",
"minValue": 123,
"maxValue": 123
}
]
},
"replayed": true,
"note": "<string>"
}
],
"eventsTruncated": true
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Authorizations
API key or access token
Path Parameters
Media buy id at the storefront grain (sf_mb_…).
1Query Parameters
Buyer customer id that owns this buyer-scoped media-buy id. Omit only for compatibility with callers whose ids are globally unambiguous.
0 < x <= 9007199254740991Response
Get one buy's exchange timeline
The seller-scoped projection of a buy's exchange timeline: only this storefront's legs; forwarded/response payloads minus platform-internal fields; no admin-only material (resolution cache internals, worker poll internals, cross-tenant audit rows).
Show child attributes
Show child attributes
The approval-queue row, when the buy rode the review flow.
Show child attributes
Show child attributes
Buy-level stages (pre-fan-out): received, screened, decided, and any pre-dispatch failure.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
True when more ledger events exist than were hydrated into this timeline.