curl --request POST \
--url https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}/evaluate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"acceptance_policy_text": "<string>",
"expected_brand": "<string>",
"questions": [
"<string>"
]
}
'import requests
url = "https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}/evaluate"
payload = {
"acceptance_policy_text": "<string>",
"expected_brand": "<string>",
"questions": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
acceptance_policy_text: '<string>',
expected_brand: '<string>',
questions: ['<string>']
})
};
fetch('https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}/evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"creativeId": "cr_abc123",
"evaluatorId": "<string>",
"evaluatorVersion": "<string>",
"status": "pass",
"recommendation": "approve",
"policyDecision": "definitely_on_policy",
"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>"
}
],
"answers": [
{
"question": "<string>",
"answer": "<string>",
"confidence": 0.5
}
]
}{
"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": {}
}
}Evaluate a pending creative review
Run an advisory AI evaluation against one immutable buyer-submitted review version. Use the reviewRef returned by the queue. A bare value always selects the legacy AdCP creative-id namespace, including when numeric; creative:<id> is the explicit equivalent. The evaluator uses explicit storefront acceptance policy text, answers operator questions, and recommends approve, manual review, or reject. Generic storefront operating instructions are not used as policy input. This endpoint never records the decision.
curl --request POST \
--url https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}/evaluate \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"acceptance_policy_text": "<string>",
"expected_brand": "<string>",
"questions": [
"<string>"
]
}
'import requests
url = "https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}/evaluate"
payload = {
"acceptance_policy_text": "<string>",
"expected_brand": "<string>",
"questions": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
acceptance_policy_text: '<string>',
expected_brand: '<string>',
questions: ['<string>']
})
};
fetch('https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}/evaluate', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"creativeId": "cr_abc123",
"evaluatorId": "<string>",
"evaluatorVersion": "<string>",
"status": "pass",
"recommendation": "approve",
"policyDecision": "definitely_on_policy",
"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>"
}
],
"answers": [
{
"question": "<string>",
"answer": "<string>",
"confidence": 0.5
}
]
}{
"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
Creative review identifier. Use the reviewRef value returned by the queue to select one immutable review. A bare value always selects the AdCP creative-id namespace, including when numeric; creative:<id> is the explicit equivalent.
1"review:42"
Body
Request body for advisory AI evaluation of a pending storefront creative review.
Optional storefront acceptance policy text for evaluating whether a buyer-submitted creative can be approved. This may include advertiser/category rules, creative asset rules, and manual-review workflow requirements.
1 - 50000Optional brand the creative is expected to represent. If omitted, the evaluator tries to infer brand evidence from the submitted creative payload.
1 - 200Optional specific questions for the evaluator to answer about the creative.
81 - 300Response
Evaluate a pending creative review
Advisory AI evaluation for a storefront creative review row. Evaluation does not approve or reject the creative.
AdCP creative id that was evaluated.
"cr_abc123"
Stable evaluator implementation id. Provider-backed evaluators expose the provider here.
Evaluator implementation version.
Aggregate advisory status from the evaluator. fail means one or more checks recommend rejection.
pass, warn, fail Advisory operator action. This endpoint never records the decision.
approve, manual_review, reject Policy confidence for automated creative approval. The safe default is needs_human_approval unless the evaluator has enough evidence to decide the creative is definitely on or off policy.
definitely_on_policy, definitely_not_on_policy, needs_human_approval Short evaluator summary.
Individual policy, brand, readiness, and visual checks supporting the recommendation.
Show child attributes
Show child attributes
Answers to any requested evaluator questions.
Show child attributes
Show child attributes