curl --request GET \
--url https://api.interchange.io/api/v2/storefront/demand-inbox \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/demand-inbox"
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/demand-inbox', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"metrics": {
"briefsYtd": 0,
"answeredPercent": 123,
"winRate": 123,
"avgGrade": "A",
"agentVsHuman": {
"agent": 0,
"human": 0
},
"bookedYtd": [
{
"amount": 123,
"currency": "<string>"
}
]
},
"rows": [
{
"id": "<string>",
"brief": "<string>",
"buyer": "<string>",
"commercialIdentity": {
"advertiser": {
"value": "<string>",
"source": "request.brand"
},
"buyingOperator": {
"value": "<string>",
"source": "request.brand"
},
"account": {
"value": "<string>",
"source": "request.brand"
}
},
"responseKind": "product_offer",
"commercialLifecycle": "closed_won",
"budgetRange": {
"min": 123,
"max": 123,
"currency": "<string>"
},
"receivedAt": "<string>",
"respondedAt": "<string>",
"responseTimeMs": 1,
"ledBy": "agent",
"feedback": "<string>",
"result": "closed_won",
"grade": "A",
"wonValue": {
"amount": 123,
"currency": "<string>"
},
"provenance": "<string>",
"briefArtifactId": "<string>",
"proposalArtifactId": "<string>",
"artifactAvailable": true
}
],
"total": 0
}{
"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 the demand-inbox ledger
The Proposal Studio front-of-house ledger for the calling storefront: a page of brief → proposal → feedback → result rows (each carrying the canonical brief and proposal artifact ids), plus a metrics strip computed only from persisted rows — briefs YTD, answered %, win rate, average grade, and the agent-vs-human split. A metric with no inputs is reported as null (unavailable), never 0. Page with ?skip= and ?take=.
curl --request GET \
--url https://api.interchange.io/api/v2/storefront/demand-inbox \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/demand-inbox"
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/demand-inbox', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"metrics": {
"briefsYtd": 0,
"answeredPercent": 123,
"winRate": 123,
"avgGrade": "A",
"agentVsHuman": {
"agent": 0,
"human": 0
},
"bookedYtd": [
{
"amount": 123,
"currency": "<string>"
}
]
},
"rows": [
{
"id": "<string>",
"brief": "<string>",
"buyer": "<string>",
"commercialIdentity": {
"advertiser": {
"value": "<string>",
"source": "request.brand"
},
"buyingOperator": {
"value": "<string>",
"source": "request.brand"
},
"account": {
"value": "<string>",
"source": "request.brand"
}
},
"responseKind": "product_offer",
"commercialLifecycle": "closed_won",
"budgetRange": {
"min": 123,
"max": 123,
"currency": "<string>"
},
"receivedAt": "<string>",
"respondedAt": "<string>",
"responseTimeMs": 1,
"ledBy": "agent",
"feedback": "<string>",
"result": "closed_won",
"grade": "A",
"wonValue": {
"amount": 123,
"currency": "<string>"
},
"provenance": "<string>",
"briefArtifactId": "<string>",
"proposalArtifactId": "<string>",
"artifactAvailable": true
}
],
"total": 0
}{
"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
Query Parameters
0 <= x <= 90071992547409911 <= x <= 100Response
Get the demand-inbox ledger
The demand-inbox ledger: a persisted-only metrics strip, a page of brief → proposal → feedback → result rows, and the total brief count for page-cap disclosure.
Front-of-house scoreboard. Every field is computed only from persisted rows; a metric with no inputs reports null (unavailable), never 0.
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Total number of brief rows for the storefront. When it exceeds the returned page, the client discloses the cap ("showing the N most recent of total").
-9007199254740991 <= x <= 9007199254740991