curl --request POST \
--url https://api.interchange.io/api/v2/storefront/media-buy-approvals/{mediaBuyId}/evaluate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/media-buy-approvals/{mediaBuyId}/evaluate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/media-buy-approvals/{mediaBuyId}/evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"mediaBuyId": "<string>",
"evaluatorId": "<string>",
"evaluatorVersion": "<string>",
"policyDecision": "definitely_on_policy",
"recommendation": "auto_approve",
"rejectionReason": "<string>",
"summary": "<string>",
"checks": [
{
"label": "<string>",
"status": "pass",
"detail": "<string>",
"evaluator_id": "<string>",
"evaluator_version": "<string>",
"category": "readiness",
"code": "<string>",
"stage": "generation",
"severity": "hard",
"blocking": true,
"confidence": 0.5,
"evidence_refs": [
"<string>"
],
"remediation": "<string>"
}
]
}{
"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": {}
}
}Evaluate a media buy against acceptance policy
Classify whether a pending media buy is definitely on policy, definitely not on policy, or needs human approval. The evaluator only recommends automatic approval when the buy references quoted storefront products, contains advertiser evidence, and does not match active acceptance-policy review or block rules. This endpoint does not record a decision.
curl --request POST \
--url https://api.interchange.io/api/v2/storefront/media-buy-approvals/{mediaBuyId}/evaluate \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/media-buy-approvals/{mediaBuyId}/evaluate"
headers = {"Authorization": "Bearer <token>"}
response = requests.post(url, headers=headers)
print(response.text)const options = {method: 'POST', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.interchange.io/api/v2/storefront/media-buy-approvals/{mediaBuyId}/evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"mediaBuyId": "<string>",
"evaluatorId": "<string>",
"evaluatorVersion": "<string>",
"policyDecision": "definitely_on_policy",
"recommendation": "auto_approve",
"rejectionReason": "<string>",
"summary": "<string>",
"checks": [
{
"label": "<string>",
"status": "pass",
"detail": "<string>",
"evaluator_id": "<string>",
"evaluator_version": "<string>",
"category": "readiness",
"code": "<string>",
"stage": "generation",
"severity": "hard",
"blocking": true,
"confidence": 0.5,
"evidence_refs": [
"<string>"
],
"remediation": "<string>"
}
]
}{
"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
Buyer-supplied media buy identifier (AdCP media_buy_id).
1Query Parameters
Buyer customer id that disambiguates a buyer-scoped media-buy id. Omit only when the id is unique for this storefront.
0 < x <= 9007199254740991Response
Evaluate a media buy against acceptance policy
Brief Acceptance evaluation for a storefront media buy on the manual approval path. Definitely-on-policy buys auto-forward; ambiguous, failed, and hard findings enter the current human-review queue unless an existing per-buyer override bypasses the gate.
Buyer-supplied media buy identifier that was evaluated.
Stable evaluator implementation id.
Evaluator implementation version.
definitely_on_policy means this buy is eligible under Brief Acceptance. needs_human_approval is the safe escalation default. definitely_not_on_policy means the payload clearly conflicts with Brief Acceptance and supplies a strong operator-facing rejection signal.
definitely_on_policy, definitely_not_on_policy, needs_human_approval Evaluator recommendation for the manual approval path. auto_approve = definitely on policy. escalate_to_human = eligibility needs operator review. auto_reject = hard deterministic Brief Acceptance violation and strong operator-facing rejection signal. In the current rollout, create_media_buy queues auto_reject findings for human review; LLM conflicts only escalate.
auto_approve, escalate_to_human, auto_reject When recommendation is auto_reject, an evaluator-generated explanation naming the acceptance-policy terms the buy matched (drawn from the operator's policy). Null otherwise.
Short evaluator summary.
Individual policy, advertiser, and quoted-product checks supporting the recommendation.
Show child attributes
Show child attributes