curl --request GET \
--url https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}"
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/creative-reviews/{creativeId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "42",
"reviewRef": "review:42",
"storefrontId": "1234",
"creativeId": "cr_abc123",
"contentDigest": "<string>",
"sourceTrust": {
"classification": "platform_managed_media",
"evidence": {
"kind": "<string>",
"digest": "<string>",
"policyVersion": "creative-review-source-trust/v1"
},
"reviewVersionDigest": "<string>",
"inlineAssets": [
{
"kind": "image",
"url": "<string>"
}
],
"staticRepresentation": {
"kind": "text",
"value": "<string>"
}
},
"mediaBuyId": "<string>",
"buyerCustomerId": 0,
"submittedPayload": "<unknown>",
"previewContexts": [
{
"contextRef": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"buyerPackageId": "<string>",
"placement": {
"kind": "publisher",
"publisherDomain": "<string>",
"placementId": "<string>"
}
}
],
"interactivePreviewAvailable": true,
"status": "pending",
"reviewedBy": "<string>",
"reviewedAt": "2023-11-07T05:31:56Z",
"reviewerNotes": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"renderPreview": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"observation": {
"status": "queued",
"observedAt": "2023-11-07T05:31:56Z",
"record": {
"version": 1,
"outcome": "completed",
"startedAt": "2023-11-07T05:31:56Z",
"durationMs": 4503599627370495,
"viewport": {
"width": 4503599627370495,
"height": 4503599627370495
},
"domains": [
{
"domain": "<string>",
"requests": 4503599627370495,
"kinds": [
"script"
],
"firstParty": true
}
],
"pixels": 4503599627370495,
"redirects": [
{
"from": "<string>",
"to": "<string>"
}
],
"popups": [
{
"to": "<string>"
}
],
"navigationAttempts": 4503599627370495,
"consoleErrors": 4503599627370495,
"bytes": 4503599627370495,
"media": [
{
"kind": "vast",
"domain": "<string>"
}
],
"metering": "cdp",
"blockedRequests": 4503599627370495,
"failure": "<string>",
"screenshotDropped": "too_large"
}
},
"thumbnailUrl": "<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": {}
}
}{
"data": null,
"error": {
"code": "<string>",
"message": "<string>",
"field": "<string>",
"details": {}
}
}Get a creative review row
Fetch one immutable creative 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.
curl --request GET \
--url https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.interchange.io/api/v2/storefront/creative-reviews/{creativeId}"
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/creative-reviews/{creativeId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "42",
"reviewRef": "review:42",
"storefrontId": "1234",
"creativeId": "cr_abc123",
"contentDigest": "<string>",
"sourceTrust": {
"classification": "platform_managed_media",
"evidence": {
"kind": "<string>",
"digest": "<string>",
"policyVersion": "creative-review-source-trust/v1"
},
"reviewVersionDigest": "<string>",
"inlineAssets": [
{
"kind": "image",
"url": "<string>"
}
],
"staticRepresentation": {
"kind": "text",
"value": "<string>"
}
},
"mediaBuyId": "<string>",
"buyerCustomerId": 0,
"submittedPayload": "<unknown>",
"previewContexts": [
{
"contextRef": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"buyerPackageId": "<string>",
"placement": {
"kind": "publisher",
"publisherDomain": "<string>",
"placementId": "<string>"
}
}
],
"interactivePreviewAvailable": true,
"status": "pending",
"reviewedBy": "<string>",
"reviewedAt": "2023-11-07T05:31:56Z",
"reviewerNotes": "<string>",
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z",
"renderPreview": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"observation": {
"status": "queued",
"observedAt": "2023-11-07T05:31:56Z",
"record": {
"version": 1,
"outcome": "completed",
"startedAt": "2023-11-07T05:31:56Z",
"durationMs": 4503599627370495,
"viewport": {
"width": 4503599627370495,
"height": 4503599627370495
},
"domains": [
{
"domain": "<string>",
"requests": 4503599627370495,
"kinds": [
"script"
],
"firstParty": true
}
],
"pixels": 4503599627370495,
"redirects": [
{
"from": "<string>",
"to": "<string>"
}
],
"popups": [
{
"to": "<string>"
}
],
"navigationAttempts": 4503599627370495,
"consoleErrors": 4503599627370495,
"bytes": 4503599627370495,
"media": [
{
"kind": "vast",
"domain": "<string>"
}
],
"metering": "cdp",
"blockedRequests": 4503599627370495,
"failure": "<string>",
"screenshotDropped": "too_large"
}
},
"thumbnailUrl": "<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": {}
}
}{
"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"
Response
Get a creative review row
A single creative review queue row — one buyer-submitted creative awaiting (or having received) an operator decision.
Legacy surrogate review row id (BIGINT serialized as a string). Preserved for response compatibility; prefer reviewRef for follow-up actions.
^[1-9]\d*$"42"
Collision-free opaque review reference. Pass this exact value to get, evaluate, or decide this review.
^review:[1-9]\d*$"review:42"
Storefront the submission was made against.
"1234"
AdCP creative id as submitted by the buyer.
"cr_abc123"
Immutable SHA-256 identity of the exact creative object forwarded downstream. Request-level account and correlation fields are excluded.
^[a-f0-9]{64}$Receipt-bound source classification and review concurrency identity when observed. Null means provenance was not observed or cannot be proven; clients must fail closed and never use this projection to load network resources.
Show child attributes
Show child attributes
AdCP media_buy_id this creative was associated with at submit time, if any. Null when the buyer attaches creatives independently of a buy.
customer_id of the buyer that submitted the creative — the tenancy boundary on buyer-side reads.
-9007199254740991 <= x <= 9007199254740991Credential-stripped snapshot of the buyer submission used for review and delivery. It contains the creative fields and may also contain request-level account, buyer_ref, and context used for downstream account selection and callback correlation. Only push_notification_config and pushNotificationConfig are removed from this operator-facing response and stored separately.
Current exact preview targets. Empty for legacy, standalone, defaulted, ambiguous, stale, or superseded routes.
Show child attributes
Show child attributes
Server-issued availability for the explicit third-party interactive-preview request. False disables that action only; source inspection and approval decisions remain available.
Lifecycle state of a buyer-submitted creative awaiting storefront review. pending until an operator decides; approved or rejected after a decision; revoked if an operator pulls a previously-approved creative.
pending, approved, rejected, revoked User id of the operator who decided this review (BIGINT serialized as string). Null while pending.
Decision timestamp (ISO 8601). Null while pending.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Free-text reviewer note attached at decide time. Null when the operator did not supply one.
Submission timestamp (ISO 8601).
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Last-modified timestamp (ISO 8601). Equal to created_at while pending; bumped when the row transitions to a decided state.
^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d(?::[0-5]\d(?:\.\d+)?)?(?:Z))$Live sandboxed preview of the submitted creative, when the render origin is enabled for this environment and the seller. Null or absent means only source inspection is available.
Show child attributes
Show child attributes
What this exact creative version did when Interchange ran it once, headlessly, on the render origin (domains contacted, pixel-shaped requests, redirects, popups, navigation attempts, bytes). Null or absent means it has not been observed; status says whether a run is queued, running, or ended without a result. Evidence from one run, never a safety verdict.
Show child attributes
Show child attributes
App-relative, authenticated path to a PNG of the creative frame from the observation run, e.g. /api/v2/storefront/creative-reviews/review:42/thumbnail. Null or absent when no screenshot exists. Never a public URL.