Creatives Gallery
Keyset-paginated gallery feed of field-trimmed CreativeCards — the detail endpoints
below return the full Creative. The first page (no cursor) also carries total; follow
meta.next_cursor until it is null. included carries the tasks this page’s cards
reference, keyed by id.
GET
/api/v1/creatives/galleryAuthorization
AuthorizationBearer token · headerrequiredor
AuthorizationOAuth2 access token · headerrequiredQuery parameters
querystring | anyreact-querybuilder rule group as a JSON string
sortstring | anySort as JSON string: {"field": ..., "direction": 1|-1}
limitintegermin 1 · max 100 · default: 24
cursorstring | anyopaque keyset cursor from the previous page
task_idstring | anyreturn only creatives belonging to this task
Responses
200Successful Response
successbooleandefault: true
dataCreativeGallery | anyShow propertiesHide properties
Any of:
CreativeGallery
creativesCreativeCard[]requiredShow propertiesHide properties
Array of
CreativeCardidstringrequirednamestringrequiredmedia_typeMediaTyperequiredAllowed:
VIDSTAANIWEBLNDENDCtest_statusTestStatusAllowed:
not_testedin_testtestedpausedtag_slugsstring[]notesstring | anyShow propertiesHide properties
Any of:
string
stringany
anymetricsCreativeCardMetrics | anyShow propertiesHide properties
Any of:
CreativeCardMetrics
spendnumber | anyShow propertiesHide properties
Any of:
number
numberany
anypurchasesinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anycpinumber | anyShow propertiesHide properties
Any of:
number
numberany
anyctrnumber | anyShow propertiesHide properties
Any of:
number
numberany
anystatusMetricStatus | anyShow propertiesHide properties
Any of:
MetricStatus
stringany
anyconfidenceMetricConfidenceBlock | anyShow propertiesHide properties
Any of:
MetricConfidenceBlock
hookMetricConfidence | anyShow propertiesHide properties
Any of:
MetricConfidence
stringany
anyholdMetricConfidence | anyShow propertiesHide properties
Any of:
MetricConfidence
stringany
anyctrMetricConfidence | anyShow propertiesHide properties
Any of:
MetricConfidence
stringany
anyany
anybenchMetricBench | anyShow propertiesHide properties
Any of:
MetricBench
hook_mednumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhold_mednumber | anyShow propertiesHide properties
Any of:
number
numberany
anycohort_ninteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyhook_indexnumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhold_indexnumber | anyShow propertiesHide properties
Any of:
number
numberany
anyany
anywCreativeCardWindows | anyShow propertiesHide properties
Any of:
CreativeCardWindows
d7CreativeCardRates | anyShow propertiesHide properties
Any of:
CreativeCardRates
hookRateCI | anyShow propertiesHide properties
Any of:
RateCI
vnumber | anyShow propertiesHide properties
Any of:
number
numberany
anylonumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhinumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhwnumber | anyShow propertiesHide properties
Any of:
number
numberany
anyninteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyany
anyholdRateCI | anyShow propertiesHide properties
Any of:
RateCI
vnumber | anyShow propertiesHide properties
Any of:
number
numberany
anylonumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhinumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhwnumber | anyShow propertiesHide properties
Any of:
number
numberany
anyninteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyany
anyctrRateCI | anyShow propertiesHide properties
Any of:
RateCI
vnumber | anyShow propertiesHide properties
Any of:
number
numberany
anylonumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhinumber | anyShow propertiesHide properties
Any of:
number
numberany
anyhwnumber | anyShow propertiesHide properties
Any of:
number
numberany
anyninteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyany
anyany
anyany
anyany
anymediaCreativeCardMedia | anyShow propertiesHide properties
Any of:
CreativeCardMedia
kindMediaKindrequiredWhat the synced file actually is (from its mime type) — unlike `MediaType`, which is
the declared taxonomy. A VID creative with an `image` media block is a data-quality flag.
`HTML` is a playable: one self-contained page, with no still of its own — its poster is
the thumbnail Drive renders for the file (see `gdrive_sync.media.media_kind`, which owns
this vocabulary on the writing side).
Allowed:
videoimagehtmlurlstringrequiredpreview_urlstring | anyShow propertiesHide properties
Any of:
string
stringany
anyduration_msinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyany
anytask_idstringrequiredcreated_atstring<date-time>requiredincludedCreativeIncludesRelated entities referenced by the payload's creatives, keyed by id.
Sideloaded rather than nested: the creative keeps its `task_id`/`assignee_id`/
`product_id` and never changes shape, so a list of 100 creatives sharing one task
carries that task once. A dangling id (deleted task, unknown product) is simply
absent from the map — resolve defensively on the client.
`users` and `products` are empty for the gallery feed, whose `CreativeCard` is trimmed
of people and product — its cards reference nothing but the task.
Show propertiesHide properties
tasksobjectusersobjectproductsobjectderived_tasksTaskItem[]Show propertiesHide properties
Array of
TaskItemidstringrequirednamestringrequirednumberinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anygenerated_namestring | anyShow propertiesHide properties
Any of:
string
stringany
anystatusTaskStatus | anyShow propertiesHide properties
Any of:
TaskStatus
stringany
anytask_typeTaskType | anyShow propertiesHide properties
Any of:
TaskType
stringany
anywork_streamWorkStream | anyShow propertiesHide properties
Any of:
WorkStream
stringany
anyvariantsCreativeVariant[]Show propertiesHide properties
Array of
CreativeVariantidstringrequirednamestringrequiredorigin_idstringrequiredtask_idstringrequiredtask_typeTaskTyperequiredAllowed:
NEWVARLOCWHTNEWDESVARDESDESCLNVARAIADPTRSZsourceSource | anyShow propertiesHide properties
Any of:
Source
stringany
anygeoGeo | anyShow propertiesHide properties
Any of:
Geo
stringany
anylanguageLanguage | anyShow propertiesHide properties
Any of:
Language
stringany
anyresolutionResolution | anyShow propertiesHide properties
Any of:
Resolution
stringany
anyin_work_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anyassignee_idstring | anyShow propertiesHide properties
Any of:
string
stringany
anytask_owner_idstring | anyShow propertiesHide properties
Any of:
string
stringany
anymetaCreativeFeedMetarequired`total` is served on the first page only (no cursor). The filter and sort schemas are
not here: they do not vary by page, so they live on `GET /creatives/schema` and are
fetched once instead of on every page and every filter change.
Show propertiesHide properties
next_cursorstring | anyShow propertiesHide properties
Any of:
string
stringany
anytotalinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyany
anymessagestring | anyShow propertiesHide properties
Any of:
string
stringany
anyerrorsstring[] | anyShow propertiesHide properties
Any of:
string[]
Array of
stringstringany
any422Validation Error
detailValidationError[]Show propertiesHide properties
Array of
ValidationErrorlocstring | integer[]requiredShow propertiesHide properties
Array of
string | integerAny of:
string
stringinteger
integermsgstringrequiredtypestringrequiredinputanyctxobjectRequest
curl -X GET "/api/v1/creatives/gallery" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("/api/v1/creatives/gallery", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"/api/v1/creatives/gallery",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
)Response
{
"success": true,
"data": {
"creatives": [
{
"id": "string",
"name": "string",
"media_type": "VID",
"test_status": "not_tested",
"tag_slugs": [
"string"
],
"notes": "string",
"metrics": {
"spend": 0,
"purchases": 0,
"cpi": 0,
"ctr": 0,
"status": "learning",
"confidence": {
"hook": "ok",
"hold": "ok",
"ctr": "ok"
},
"bench": {
"hook_med": 0,
"hold_med": 0,
"cohort_n": 0,
"hook_index": 0,
"hold_index": 0
},
"w": {
"d7": {
"hook": {
"v": 0,
"lo": 0,
"hi": 0,
"hw": 0,
"n": 0
},
"hold": {
"v": 0,
"lo": 0,
"hi": 0,
"hw": 0,
"n": 0
},
"ctr": {
"v": 0,
"lo": 0,
"hi": 0,
"hw": 0,
"n": 0
}
}
}
},
"media": {
"kind": "video",
"url": "string",
"preview_url": "string",
"duration_ms": 0
},
"task_id": "string",
"created_at": "2019-08-24T14:15:22Z"
}
],
"included": {
"tasks": {
"property1": {
"id": "string",
"name": "string",
"number": 0,
"generated_name": "string",
"status": "backlog",
"task_type": "NEW",
"work_stream": "Performance"
},
"property2": {
"id": "string",
"name": "string",
"number": 0,
"generated_name": "string",
"status": "backlog",
"task_type": "NEW",
"work_stream": "Performance"
}
},
"users": {
"property1": {
"id": "string",
"name": "string",
"email": "string",
"image_url": "string"
},
"property2": {
"id": "string",
"name": "string",
"email": "string",
"image_url": "string"
}
},
"products": {
"property1": {
"id": "string",
"name": "string"
},
"property2": {
"id": "string",
"name": "string"
}
},
"derived_tasks": [
{
"id": "string",
"name": "string",
"number": 0,
"generated_name": "string",
"status": "backlog",
"task_type": "NEW",
"work_stream": "Performance"
}
],
"variants": [
{
"id": "string",
"name": "string",
"origin_id": "string",
"task_id": "string",
"task_type": "NEW",
"source": "META",
"geo": "US",
"language": "EN",
"resolution": "1080x1920",
"in_work_at": "2019-08-24T14:15:22Z",
"assignee_id": "string",
"task_owner_id": "string"
}
]
},
"meta": {
"next_cursor": "string",
"total": 0
}
},
"message": "string",
"errors": [
"string"
]
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}