curl --request GET \
--url https://api.interchange.io/api/v2/storefront/intelligence-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/intelligence-runs"
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/intelligence-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"items": [
{
"id": "<string>",
"purpose": "live",
"storefrontId": "<string>",
"buyerCustomerId": 0,
"operatingInstructionsVersion": 0,
"buyerScope": {
"operatorDomain": "<string>",
"brandDomain": "<string>",
"country": "<string>"
},
"buyerInstructions": {
"matchedRowIds": [
"<string>"
],
"effectiveDiscountPercent": 123,
"notes": [
"<string>"
]
},
"brief": "<string>",
"buyingMode": "<string>",
"inventorySnapshot": "<unknown>",
"prompt": "<string>",
"rawLlmOutput": "<unknown>",
"parsedOutput": "<unknown>",
"runRationale": "<string>",
"explanation": {
"summary": "<string>",
"selectedProducts": [
{
"productId": "<string>",
"name": "<string>",
"description": "<string>",
"reasoning": "<string>",
"pricing": {
"baseCpm": 123,
"currency": "<string>",
"operatorDiscount": 123,
"finalCpm": 123
},
"bundleIds": [
"<string>"
],
"signalIds": [
"<string>"
],
"formatIds": [
{
"agentUrl": "<string>",
"id": "<string>"
}
]
}
],
"unpricedProducts": [
{
"name": "<string>",
"reasoning": "<string>",
"reason": "<string>",
"bundleIds": [
"<string>"
],
"signalIds": [
"<string>"
]
}
],
"buyerInstructionNotes": [
"<string>"
],
"pricingNotes": [
"<string>"
],
"failure": {
"code": "<string>",
"message": "<string>"
}
},
"composedProductIds": [
"<string>"
],
"result": {
"kind": "ok",
"code": "<string>",
"message": "<string>"
},
"modelProvider": "<string>",
"modelName": "<string>",
"durationMs": 0,
"refineSnapshot": "<unknown>",
"refinementAppliedSnapshot": "<unknown>",
"requestAsks": [
"<string>"
],
"shownProductsSnapshot": "<unknown>",
"pricingSummary": "<unknown>",
"negotiationSummary": "<unknown>",
"commercialOutcome": "<unknown>",
"evalLabel": "<unknown>",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"total": 4503599627370495
}{
"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": {}
}
}List storefront intelligence-run records
Paginated list of intelligence-run records for the storefront, newest first. Each row captures the prompt, raw + parsed LLM output, matched buyer-instructions, and the result envelope. Page with ?skip= and ?take=. Filter the seller demand inbox with ?disposition= (responded / declined_fit / declined_policy / not_live); an invalid value returns 400.
curl --request GET \
--url https://api.interchange.io/api/v2/storefront/intelligence-runs \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/intelligence-runs"
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/intelligence-runs', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"items": [
{
"id": "<string>",
"purpose": "live",
"storefrontId": "<string>",
"buyerCustomerId": 0,
"operatingInstructionsVersion": 0,
"buyerScope": {
"operatorDomain": "<string>",
"brandDomain": "<string>",
"country": "<string>"
},
"buyerInstructions": {
"matchedRowIds": [
"<string>"
],
"effectiveDiscountPercent": 123,
"notes": [
"<string>"
]
},
"brief": "<string>",
"buyingMode": "<string>",
"inventorySnapshot": "<unknown>",
"prompt": "<string>",
"rawLlmOutput": "<unknown>",
"parsedOutput": "<unknown>",
"runRationale": "<string>",
"explanation": {
"summary": "<string>",
"selectedProducts": [
{
"productId": "<string>",
"name": "<string>",
"description": "<string>",
"reasoning": "<string>",
"pricing": {
"baseCpm": 123,
"currency": "<string>",
"operatorDiscount": 123,
"finalCpm": 123
},
"bundleIds": [
"<string>"
],
"signalIds": [
"<string>"
],
"formatIds": [
{
"agentUrl": "<string>",
"id": "<string>"
}
]
}
],
"unpricedProducts": [
{
"name": "<string>",
"reasoning": "<string>",
"reason": "<string>",
"bundleIds": [
"<string>"
],
"signalIds": [
"<string>"
]
}
],
"buyerInstructionNotes": [
"<string>"
],
"pricingNotes": [
"<string>"
],
"failure": {
"code": "<string>",
"message": "<string>"
}
},
"composedProductIds": [
"<string>"
],
"result": {
"kind": "ok",
"code": "<string>",
"message": "<string>"
},
"modelProvider": "<string>",
"modelName": "<string>",
"durationMs": 0,
"refineSnapshot": "<unknown>",
"refinementAppliedSnapshot": "<unknown>",
"requestAsks": [
"<string>"
],
"shownProductsSnapshot": "<unknown>",
"pricingSummary": "<unknown>",
"negotiationSummary": "<unknown>",
"commercialOutcome": "<unknown>",
"evalLabel": "<unknown>",
"createdAt": "2023-11-07T05:31:56Z"
}
],
"total": 4503599627370495
}{
"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
Query Parameters
Number of rows to skip (offset pagination).
0 <= x <= 90071992547409910
Number of rows to return per page (1–100).
1 <= x <= 10025
Demand-inbox filter — return only runs with this brief outcome: responded (the storefront composed a response), declined_fit (declined: no matching inventory), declined_policy (declined: acceptance-policy violation), or not_live (brief arrived before the storefront was live; reserved, not yet emitted). Omit to return every outcome.
responded, declined_fit, declined_policy, not_live "declined_fit"
Case-insensitive substring search over the buyer brief text. Use to find every brief mentioning a vertical, advertiser, or term (e.g. fintech). Combines with disposition.
1 - 200"fintech"
Filter by buying mode — brief for the demand inbox (excludes wholesale/refine runs), wholesale, or refine. Omit to return every mode.
brief, wholesale, refine "brief"
Filter by the commercial result that followed the storefront response, derived from the latest attributed commercial-outcome event: booked (the media buy was forwarded upstream or has reported delivery — a confirmed commitment), pending (the media buy is awaiting the operator’s own acceptance-policy approval and could still be rejected), or rejected (the storefront rejected the media buy). Runs with no attributed media buy yet match no value. There is no lost value — a buyer silently passing on a response has no signal in AdCP today.
booked, pending, rejected "booked"
full (default) returns every run field. summary omits the heavy LLM payload columns (prompt, raw/inventory snapshots) the demand inbox does not render, keeping the response small. The full row is always available on GET /intelligence-runs/:id.
summary, full "summary"