Tasks
Related events: task.created · task.updated · task.verified
The Task object
Attributes
idstringUnique identifier of the object (prefixed, opaque).
objectstringtaskbrandstringThe brand the object belongs to (
br_…).titlestringdescriptionstringnullablestatusenumKanban columns of the "À traiter" screen, in board order: À faire → En cours → En vérification → Vérifié. Transitions move one column at a time (the card CTA moves forward, the "←" button moves back); a verified task is terminal.
Possible values:
todo·in_progress·in_verification·verifiedkindenumNature of the fix — matches the mockup filter pills (Write-back / Contenu / Technique). Write-back = applicable in one click on a Shopify product (description, SEO, barcode — SKO-151); everything else is done by hand, with a guide.
Possible values:
writeback·content·technicaleffortenumnullableT-shirt sizing shown on the kanban cards (S · < 1 h, M · ½ journée, L · 2-3 j).
Possible values:
s·m·lsourceenumWhere the task came from: created by hand ("+ Correctif manuel"), from a failing SEO or readiness check, from an alert, from a vacant territory on the Concurrents screen, or from a source the assistants cite without the brand (« Sources à conquérir »).
Possible values:
manual·seo_check·alert·readiness·opportunity·perception·source_gapsource_labelstringnullablealertstringnullableThe alert the task was created from (
alrt_…), when source = alert.productstringnullableimpactstringnullablegainstringnullableguideobjectnullableShow child attributes
topicstringplatformenumPossible values:
shopify·genericstepsarray of string
assigneeobjectnullableShow child attributes
namestring
started_atstringnullablepublished_atstringnullableverify_atstringnullableverified_atstringnullablelivemodebooleantruefor live data,falsefor the test-mode sandbox.createdintegerTime at which the object was created (unix timestamp, seconds).
updatedstringTime at which the object was last updated.
{
"id": "task_031CQmvL2QQbe3t38Gyo91",
"object": "task",
"brand": "br_031CQGx2DNM4mxT2CO7BL3",
"title": "Corriger le prix affiché de la Grizl CF SL 7",
"description": "ChatGPT annonce 2 199 € alors que le catalogue affiche 2 499 €.",
"status": "in_progress",
"kind": "content",
"effort": "s",
"source": "alert",
"source_label": "Alerte · hallucination de prix",
"alert": "alrt_031CQlTxUKUOFYaHSd3kBY",
"product": "Grizl CF SL 7",
"impact": "Critique",
"gain": null,
"guide": {
"topic": "price_source",
"platform": "shopify",
"steps": [
"Open the alert and its answers: note the sources cited next to the wrong price.",
"Old promotion page still online: Online Store → Pages, hide it, then create a URL redirect (search « URL redirects » in the admin) to the current product page.",
"Check the variant's price and « compare-at price » in Products; update Google Merchant Center and the comparison sites.",
"Click « Verify » on the alert: a targeted re-sampling confirms the fix."
]
},
"assignee": {
"name": "Camille Martin"
},
"started_at": "2026-09-21T09:12:00Z",
"published_at": null,
"verify_at": null,
"verified_at": null,
"livemode": true,
"created": 1790000000,
"updated": 1790003600
}The Task plan object
Attributes
objectstringtask_plantaskstringstatusenumA fix plan being written (
pending), written (ready), or not written (failed: no provider key, the model failed or answered nothing usable — the task keeps its fixed guide, nothing is invented).Possible values:
pending·ready·failedcontentobjectnullableShow child attributes
summarystringstepsarray of objectShow child attributes
titlestringdetailstringwherestringnullable
verificationstringcaveatsarray of string
platformenumnullableWhat the brand's site runs on. Chosen by a person (onboarding, Réglages → Marque, an agency adding the brand), set by a connected integration, or detected from the site's crawl (Seo\Services\PlatformDetector) — see BrandPlatformSource. Only Shopify has a connector; the others tell the fix plans which admin to walk through.
custom= a site built in-house.Possible values:
shopify·woocommerce·prestashop·magento·bigcommerce·wix·squarespace·webflow·wordpress·customlocalestringgenerated_atstringnullablelivemodebooleantruefor live data,falsefor the test-mode sandbox.
{
"object": "task_plan",
"task": "task_034ofz9YVp1OJwgvw6Kl58",
"status": "pending",
"content": {
"summary": "string",
"steps": [
{
"title": "Grizl CF SL 7",
"detail": "string",
"where": "string"
}
],
"verification": "string",
"caveats": [
"string"
]
},
"platform": "shopify",
"locale": "fr",
"generated_at": "2026-09-21T02:40:00Z",
"livemode": true
}Create a task
POST/v1/brands/{brand}/tasks
Adds a manual fix to the backlog, in the todo column.
Parameters
brandstringrequiredBrand id (
br_…).titlestringrequireddescriptionstringnullablekindenumrequiredNature of the fix — matches the mockup filter pills (Write-back / Contenu / Technique). Write-back = applicable in one click on a Shopify product (description, SEO, barcode — SKO-151); everything else is done by hand, with a guide.
Possible values:
writeback·content·technicaleffortenumnullableT-shirt sizing shown on the kanban cards (S · < 1 h, M · ½ journée, L · 2-3 j).
Possible values:
s·m·lproductstringnullableimpactstringnullablesource_labelstringnullable
Returns
Returns the created task object. Raises an error if something goes wrong.
curl
curl -X POST https://api.skoup.ai/v1/brands/br_034CyfRFSXUqzrbzV6MAfZ/tasks \
-H "Authorization: Bearer skoup_test_4eC39HqLyjWDarjtT1zdp7dc" \
-H "Content-Type: application/json" \
-d '{"title":"Grizl CF SL 7","kind":"writeback","description":"Rewrite the product copy so the frame warranty is stated."}'{
"id": "task_031CQmvL2QQbe3t38Gyo91",
"object": "task",
"brand": "br_031CQGx2DNM4mxT2CO7BL3",
"title": "Corriger le prix affiché de la Grizl CF SL 7",
"description": "ChatGPT annonce 2 199 € alors que le catalogue affiche 2 499 €.",
"status": "in_progress",
"kind": "content",
"effort": "s",
"source": "alert",
"source_label": "Alerte · hallucination de prix",
"alert": "alrt_031CQlTxUKUOFYaHSd3kBY",
"product": "Grizl CF SL 7",
"impact": "Critique",
"gain": null,
"guide": {
"topic": "price_source",
"platform": "shopify",
"steps": [
"Open the alert and its answers: note the sources cited next to the wrong price.",
"Old promotion page still online: Online Store → Pages, hide it, then create a URL redirect (search « URL redirects » in the admin) to the current product page.",
"Check the variant's price and « compare-at price » in Products; update Google Merchant Center and the comparison sites.",
"Click « Verify » on the alert: a targeted re-sampling confirms the fix."
]
},
"assignee": {
"name": "Camille Martin"
},
"started_at": "2026-09-21T09:12:00Z",
"published_at": null,
"verify_at": null,
"verified_at": null,
"livemode": true,
"created": 1790000000,
"updated": 1790003600
}Update a task
PATCH/v1/brands/{brand}/tasks/{task}
Updates its fields and/or moves it on the kanban with status — one
column at a time (invalid_transition otherwise). Moving to
verified may record the measured gain. A refused move changes nothing.
Parameters
brandstringrequiredBrand id (
br_…).taskstringrequiredTask id (
task_…).titlestringdescriptionstringnullablekindenumNature of the fix — matches the mockup filter pills (Write-back / Contenu / Technique). Write-back = applicable in one click on a Shopify product (description, SEO, barcode — SKO-151); everything else is done by hand, with a guide.
Possible values:
writeback·content·technicaleffortenumnullableT-shirt sizing shown on the kanban cards (S · < 1 h, M · ½ journée, L · 2-3 j).
Possible values:
s·m·lproductstringnullableimpactstringnullablesource_labelstringnullableverify_atstringnullablestatusenumKanban columns of the "À traiter" screen, in board order: À faire → En cours → En vérification → Vérifié. Transitions move one column at a time (the card CTA moves forward, the "←" button moves back); a verified task is terminal.
Possible values:
todo·in_progress·in_verification·verifiedgainstringnullable
Returns
Returns the updated task object. Raises an error if something goes wrong.
curl
curl -X PATCH https://api.skoup.ai/v1/brands/br_034CyfRFSXUqzrbzV6MAfZ/tasks/task_034ofz9YVp1OJwgvw6Kl58 \
-H "Authorization: Bearer skoup_test_4eC39HqLyjWDarjtT1zdp7dc" \
-H "Content-Type: application/json" \
-d '{"title":"Grizl CF SL 7","description":"Rewrite the product copy so the frame warranty is stated."}'{
"id": "task_031CQmvL2QQbe3t38Gyo91",
"object": "task",
"brand": "br_031CQGx2DNM4mxT2CO7BL3",
"title": "Corriger le prix affiché de la Grizl CF SL 7",
"description": "ChatGPT annonce 2 199 € alors que le catalogue affiche 2 499 €.",
"status": "in_progress",
"kind": "content",
"effort": "s",
"source": "alert",
"source_label": "Alerte · hallucination de prix",
"alert": "alrt_031CQlTxUKUOFYaHSd3kBY",
"product": "Grizl CF SL 7",
"impact": "Critique",
"gain": null,
"guide": {
"topic": "price_source",
"platform": "shopify",
"steps": [
"Open the alert and its answers: note the sources cited next to the wrong price.",
"Old promotion page still online: Online Store → Pages, hide it, then create a URL redirect (search « URL redirects » in the admin) to the current product page.",
"Check the variant's price and « compare-at price » in Products; update Google Merchant Center and the comparison sites.",
"Click « Verify » on the alert: a targeted re-sampling confirms the fix."
]
},
"assignee": {
"name": "Camille Martin"
},
"started_at": "2026-09-21T09:12:00Z",
"published_at": null,
"verify_at": null,
"verified_at": null,
"livemode": true,
"created": 1790000000,
"updated": 1790003600
}Retrieve a task
GET/v1/brands/{brand}/tasks/{task}
Parameters
brandstringrequiredBrand id (
br_…).taskstringrequiredTask id (
task_…).
Returns
Returns the task object. Raises an error if something goes wrong.
curl
curl https://api.skoup.ai/v1/brands/br_034CyfRFSXUqzrbzV6MAfZ/tasks/task_034ofz9YVp1OJwgvw6Kl58 \
-H "Authorization: Bearer skoup_test_4eC39HqLyjWDarjtT1zdp7dc"{
"id": "task_031CQmvL2QQbe3t38Gyo91",
"object": "task",
"brand": "br_031CQGx2DNM4mxT2CO7BL3",
"title": "Corriger le prix affiché de la Grizl CF SL 7",
"description": "ChatGPT annonce 2 199 € alors que le catalogue affiche 2 499 €.",
"status": "in_progress",
"kind": "content",
"effort": "s",
"source": "alert",
"source_label": "Alerte · hallucination de prix",
"alert": "alrt_031CQlTxUKUOFYaHSd3kBY",
"product": "Grizl CF SL 7",
"impact": "Critique",
"gain": null,
"guide": {
"topic": "price_source",
"platform": "shopify",
"steps": [
"Open the alert and its answers: note the sources cited next to the wrong price.",
"Old promotion page still online: Online Store → Pages, hide it, then create a URL redirect (search « URL redirects » in the admin) to the current product page.",
"Check the variant's price and « compare-at price » in Products; update Google Merchant Center and the comparison sites.",
"Click « Verify » on the alert: a targeted re-sampling confirms the fix."
]
},
"assignee": {
"name": "Camille Martin"
},
"started_at": "2026-09-21T09:12:00Z",
"published_at": null,
"verify_at": null,
"verified_at": null,
"livemode": true,
"created": 1790000000,
"updated": 1790003600
}List tasks
GET/v1/brands/{brand}/tasks
The backlog of fixes of a brand, newest first.
Parameters
brandstringrequiredBrand id (
br_…).statusstringsourcestringlimitintegerNumber of objects to return, between 1 and 100 (default 20).
starting_afterstringCursor: the
idof the last object of the previous page.
Returns
A dictionary with a data property holding up to limit task objects, newest first, and has_more telling whether another page exists. Raises an error if something goes wrong.
curl
curl https://api.skoup.ai/v1/brands/br_034CyfRFSXUqzrbzV6MAfZ/tasks?limit=3 \
-H "Authorization: Bearer skoup_test_4eC39HqLyjWDarjtT1zdp7dc"{
"object": "list",
"url": "/v1/brands/br_034CyfRFSXUqzrbzV6MAfZ/tasks",
"has_more": false,
"data": [
{
"id": "task_031CQmvL2QQbe3t38Gyo91",
"object": "task",
"brand": "br_031CQGx2DNM4mxT2CO7BL3",
"title": "Corriger le prix affiché de la Grizl CF SL 7",
"description": "ChatGPT annonce 2 199 € alors que le catalogue affiche 2 499 €.",
"status": "in_progress",
"kind": "content",
"effort": "s",
"source": "alert",
"source_label": "Alerte · hallucination de prix",
"alert": "alrt_031CQlTxUKUOFYaHSd3kBY",
"product": "Grizl CF SL 7",
"impact": "Critique",
"gain": null,
"guide": {
"topic": "price_source",
"platform": "shopify",
"steps": [
"Open the alert and its answers: note the sources cited next to the wrong price.",
"Old promotion page still online: Online Store → Pages, hide it, then create a URL redirect (search « URL redirects » in the admin) to the current product page.",
"Check the variant's price and « compare-at price » in Products; update Google Merchant Center and the comparison sites.",
"Click « Verify » on the alert: a targeted re-sampling confirms the fix."
]
},
"assignee": {
"name": "Camille Martin"
},
"started_at": "2026-09-21T09:12:00Z",
"published_at": null,
"verify_at": null,
"verified_at": null,
"livemode": true,
"created": 1790000000,
"updated": 1790003600
}
]
}Retrieve a task’s plan
GET/v1/brands/{brand}/tasks/{task}/plan
The step-by-step plan a model wrote for the task in the app, adapted to
the brand’s platform and to the task’s evidence. Read only: plans are
written on demand from the app, never through the API. resource_missing
until one was written.
Parameters
brandstringrequiredBrand id (
br_…).taskstringrequiredTask id (
task_…).
Returns
Returns the task_plan object. Raises an error if something goes wrong.
curl
curl https://api.skoup.ai/v1/brands/br_034CyfRFSXUqzrbzV6MAfZ/tasks/task_034ofz9YVp1OJwgvw6Kl58/plan \
-H "Authorization: Bearer skoup_test_4eC39HqLyjWDarjtT1zdp7dc"{
"object": "task_plan",
"task": "task_034ofz9YVp1OJwgvw6Kl58",
"status": "pending",
"content": {
"summary": "string",
"steps": [
{
"title": "Grizl CF SL 7",
"detail": "string",
"where": "string"
}
],
"verification": "string",
"caveats": [
"string"
]
},
"platform": "shopify",
"locale": "fr",
"generated_at": "2026-09-21T02:40:00Z",
"livemode": true
}