Tasks Board Columns
The kanban’s opening request: the first limit cards of every status, each column’s
next_cursor, and every column’s total — one round trip and one batch of included
instead of one request per column.
Columns are returned for every status in the workflow, empty ones included, so the board
renders the same shape whatever the filter matches. Continue any single column with
GET /tasks/board?cursor=… and that column’s status in query.
GET
/api/v1/tasks/board/columnsAuthorization
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}
limitintegercards per column
min 1 · max 50 · default: 10
searchstring | anycase-insensitive match on name / generated_name; an all-digit term matches the task number
Responses
200Successful Response
successbooleandefault: true
dataTasksBoardColumns | anyShow propertiesHide properties
Any of:
TasksBoardColumns
columnsBoardColumn[]requiredShow propertiesHide properties
Array of
BoardColumnstatusTaskStatusrequiredNotion "Status" for a task — the workflow-status source rolled up onto each Creative.
Grouped in Notion as To-do / In progress / Complete; see the `*_STATUSES` frozensets below.
**Declaration order is the board's column order**, front to back — `/tasks/board/columns`
answers in it, and the frontend builds both the kanban's columns and the Status select from
it (`STATUS_OPTIONS`). So this reads as the workflow does: a task passes In Progress before
either check. Reordering a member here moves a column on the board.
Allowed:
backlogready_for_productionin_progresstech_checkcreative_checkdonearchivedtasksTaskCard[]requiredShow propertiesHide properties
Array of
TaskCardidstringrequirednamestringrequirednumberinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anygenerated_namestring | anyShow propertiesHide properties
Any of:
string
stringany
anystatusTaskStatusNotion "Status" for a task — the workflow-status source rolled up onto each Creative.
Grouped in Notion as To-do / In progress / Complete; see the `*_STATUSES` frozensets below.
**Declaration order is the board's column order**, front to back — `/tasks/board/columns`
answers in it, and the frontend builds both the kanban's columns and the Status select from
it (`STATUS_OPTIONS`). So this reads as the workflow does: a task passes In Progress before
either check. Reordering a member here moves a column on the board.
Allowed:
backlogready_for_productionin_progresstech_checkcreative_checkdonearchivedtest_statusTestStatusAllowed:
not_testedin_testtestedpausedtask_typeTaskType | anyShow propertiesHide properties
Any of:
TaskType
stringany
anywork_streamWorkStream | anyShow propertiesHide properties
Any of:
WorkStream
stringany
anyproduct_idstring | anyShow propertiesHide properties
Any of:
string
stringany
anymedia_typeMediaType | anyShow propertiesHide properties
Any of:
MediaType
stringany
anysourceSource | anyShow propertiesHide properties
Any of:
Source
stringany
anycreation_complexityinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyexecution_complexityinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anypriorityinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyassignee_idstring | anyShow propertiesHide properties
Any of:
string
stringany
anytask_owner_idstring | anyShow propertiesHide properties
Any of:
string
stringany
anydeadline_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anymanual_launchbooleandefault: false
launched_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anycountinteger | anyShow propertiesHide properties
Any of:
integer
integerany
anyresolutionResolution | anyShow propertiesHide properties
Any of:
Resolution
stringany
anygeoGeo | anyShow propertiesHide properties
Any of:
Geo
stringany
anylanguageLanguage | anyShow propertiesHide properties
Any of:
Language
stringany
anyvaried_elementsVariedElement[]subjectstring | anyShow propertiesHide properties
Any of:
string
stringany
anytopicstring | anyShow propertiesHide properties
Any of:
string
stringany
anyprimary_anchorPrimaryAnchor | anyShow propertiesHide properties
Any of:
PrimaryAnchor
stringany
anyaudiencestring | anyShow propertiesHide properties
Any of:
string
stringany
anyawareness_stageAwarenessStage | anyShow propertiesHide properties
Any of:
AwarenessStage
stringany
anymessaging_angleMessagingAngle | anyShow propertiesHide properties
Any of:
MessagingAngle
stringany
anyhook_triggerHookTrigger | anyShow propertiesHide properties
Any of:
HookTrigger
stringany
anyhook_typeHookType | anyShow propertiesHide properties
Any of:
HookType
stringany
anyad_formatAdFormat | anyShow propertiesHide properties
Any of:
AdFormat
stringany
anytraffic_flowTrafficFlow | anyShow propertiesHide properties
Any of:
TrafficFlow
stringany
anystarted_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anysubmitted_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anycompleted_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anycomment_countintegerdefault: 0
creatives_totalintegerdefault: 0
creatives_doneintegerdefault: 0
automationTaskCardAutomationTrimmed `TaskAutomation` for the board feed.
`started_at` is here so the board can answer "is this run still alive?" the same way the detail
page does — from `AUTOMATION_RUN_TIMEOUT` against the moment the run was enqueued. Without it
the board had to time pending cards itself, from the moment it first *saw* them, against a
threshold of its own.
Show propertiesHide properties
stateAutomationState | anyShow propertiesHide properties
Any of:
AutomationState
stringany
anyerrorstring | anyShow propertiesHide properties
Any of:
string
stringany
anystarted_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anycreated_atstring<date-time>requiredupdated_atstring<date-time>requireddeleted_atstring<date-time> | anyShow propertiesHide properties
Any of:
string<date-time>
string<date-time>any
anycreation_pointsnumber | anyShow propertiesHide properties
Any of:
number
numberany
anyexecution_pointsnumber | anyShow propertiesHide properties
Any of:
number
numberany
anynext_cursorstring | anyShow propertiesHide properties
Any of:
string
stringany
anytotalintegerdefault: 0
includedTaskIncludesRelated entities referenced by the payload's tasks, keyed by id — same contract as
`CreativeIncludes`.
`creatives` covers the lineage refs (`origin_creative_id`, `source_creative_ids`), so the
detail page renders them without a request per id. It is empty for the board feed, whose
`TaskCard` is trimmed of those fields. The UI edits lineage as draft state, so ids added
before a save are the client's to label — it already holds the picked creative.
Show propertiesHide properties
usersobjectproductsobjectcreativesobjecttask_creativesCreativeItem[]Show propertiesHide properties
Array of
CreativeItemidstringrequirednamestringrequiredvariation_numinteger | anyShow propertiesHide properties
Any of:
integer
integerany
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
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/tasks/board/columns" \
-H "Authorization: Bearer YOUR_TOKEN"const response = await fetch("/api/v1/tasks/board/columns", {
method: "GET",
headers: {
"Authorization": "Bearer YOUR_TOKEN"
}
});import requests
response = requests.get(
"/api/v1/tasks/board/columns",
headers={
"Authorization": "Bearer YOUR_TOKEN"
},
)Response
{
"success": true,
"data": {
"columns": [
{
"status": "backlog",
"tasks": [
{
"id": "string",
"name": "string",
"number": 0,
"generated_name": "string",
"status": "backlog",
"test_status": "not_tested",
"task_type": "NEW",
"work_stream": "Performance",
"product_id": "string",
"media_type": "VID",
"source": "META",
"creation_complexity": 0,
"execution_complexity": 0,
"priority": 0,
"assignee_id": "string",
"task_owner_id": "string",
"deadline_at": "2019-08-24T14:15:22Z",
"manual_launch": false,
"launched_at": "2019-08-24T14:15:22Z",
"count": 0,
"resolution": "1080x1920",
"geo": "US",
"language": "EN",
"varied_elements": [
"hook"
],
"subject": "string",
"topic": "string",
"primary_anchor": "pain_led",
"audience": "string",
"awareness_stage": "unaware",
"messaging_angle": "pattern_interrupt",
"hook_trigger": "pattern_interrupt",
"hook_type": "pattern_interrupt",
"ad_format": "animation",
"traffic_flow": "W2A",
"started_at": "2019-08-24T14:15:22Z",
"submitted_at": "2019-08-24T14:15:22Z",
"completed_at": "2019-08-24T14:15:22Z",
"comment_count": 0,
"creatives_total": 0,
"creatives_done": 0,
"automation": {
"state": "pending",
"error": "string",
"started_at": "2019-08-24T14:15:22Z"
},
"created_at": "2019-08-24T14:15:22Z",
"updated_at": "2019-08-24T14:15:22Z",
"deleted_at": "2019-08-24T14:15:22Z",
"creation_points": 0,
"execution_points": 0
}
],
"next_cursor": "string",
"total": 0
}
],
"included": {
"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"
}
},
"creatives": {
"property1": {
"id": "string",
"name": "string",
"variation_num": 0,
"in_work_at": "2019-08-24T14:15:22Z",
"assignee_id": "string",
"task_owner_id": "string"
},
"property2": {
"id": "string",
"name": "string",
"variation_num": 0,
"in_work_at": "2019-08-24T14:15:22Z",
"assignee_id": "string",
"task_owner_id": "string"
}
},
"task_creatives": [
{
"id": "string",
"name": "string",
"variation_num": 0,
"in_work_at": "2019-08-24T14:15:22Z",
"assignee_id": "string",
"task_owner_id": "string"
}
]
}
},
"message": "string",
"errors": [
"string"
]
}{
"detail": [
{
"loc": [
"string"
],
"msg": "string",
"type": "string",
"input": null,
"ctx": {}
}
]
}