curl --request DELETE \
--url https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"_id": "507f1f77bcf86cd799439041",
"companyId": "<string>",
"groupId": "<string>",
"title": "<string>",
"summary": "<string>",
"objective": "<string>",
"expectedImpact": "<string>",
"theme": "<string>",
"tasks": [
{
"_id": "507f1f77bcf86cd799439051",
"text": "<string>",
"order": 123,
"status": "todo",
"assigneeId": "<string>",
"completedAt": "2023-11-07T05:31:56Z"
}
],
"patterns": [
{
"key": "<string>",
"label": "<string>",
"mentions": 123
}
],
"sources": [
"woku"
],
"status": "draft",
"priority": "high",
"evidence": {
"windowFrom": "2023-11-07T05:31:56Z",
"windowTo": "2023-11-07T05:31:56Z",
"conditionsSnapshot": [
{
"trackerId": "507f1f77bcf86cd799439011",
"relationToPrevious": "AND",
"operator": "equals",
"value": "<string>"
}
],
"negatives": 123,
"positives": 123,
"total": 123,
"quotes": [
{
"text": "<string>",
"source": "woku",
"contextLabel": "<string>",
"occurredAt": "2023-11-07T05:31:56Z",
"score": 123
}
]
},
"generation": {
"model": "<string>",
"promptVersion": "<string>",
"generatedAt": "2023-11-07T05:31:56Z"
},
"delivery": {
"provider": "internal",
"resourceLabel": "<string>",
"externalUrl": "<string>",
"externalId": "<string>",
"tasksCreated": 123,
"lastError": "<string>",
"sentAt": "2023-11-07T05:31:56Z",
"sentBy": "<string>"
},
"approvedBy": "<string>",
"approvedAt": "2023-11-07T05:31:56Z",
"canceledBy": "<string>",
"canceledAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"aiGenerated": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"statusCode": 403,
"message": "Authentication required",
"error": "Forbidden"
}{
"statusCode": 404,
"message": "External tracker not found",
"error": "Not Found"
}{
"statusCode": 409,
"message": "Cannot approve a plan in status \"approved\"",
"error": "Conflict"
}Remove a task (draft or managed plan)
curl --request DELETE \
--url https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.delete(url, headers=headers)
print(response.text)const options = {method: 'DELETE', headers: {Authorization: 'Bearer <token>'}};
fetch('https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "DELETE",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}"
req, _ := http.NewRequest("DELETE", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.delete("https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://clientapi.woku.app/v1/action-plans/{id}/tasks/{taskId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Delete.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"_id": "507f1f77bcf86cd799439041",
"companyId": "<string>",
"groupId": "<string>",
"title": "<string>",
"summary": "<string>",
"objective": "<string>",
"expectedImpact": "<string>",
"theme": "<string>",
"tasks": [
{
"_id": "507f1f77bcf86cd799439051",
"text": "<string>",
"order": 123,
"status": "todo",
"assigneeId": "<string>",
"completedAt": "2023-11-07T05:31:56Z"
}
],
"patterns": [
{
"key": "<string>",
"label": "<string>",
"mentions": 123
}
],
"sources": [
"woku"
],
"status": "draft",
"priority": "high",
"evidence": {
"windowFrom": "2023-11-07T05:31:56Z",
"windowTo": "2023-11-07T05:31:56Z",
"conditionsSnapshot": [
{
"trackerId": "507f1f77bcf86cd799439011",
"relationToPrevious": "AND",
"operator": "equals",
"value": "<string>"
}
],
"negatives": 123,
"positives": 123,
"total": 123,
"quotes": [
{
"text": "<string>",
"source": "woku",
"contextLabel": "<string>",
"occurredAt": "2023-11-07T05:31:56Z",
"score": 123
}
]
},
"generation": {
"model": "<string>",
"promptVersion": "<string>",
"generatedAt": "2023-11-07T05:31:56Z"
},
"delivery": {
"provider": "internal",
"resourceLabel": "<string>",
"externalUrl": "<string>",
"externalId": "<string>",
"tasksCreated": 123,
"lastError": "<string>",
"sentAt": "2023-11-07T05:31:56Z",
"sentBy": "<string>"
},
"approvedBy": "<string>",
"approvedAt": "2023-11-07T05:31:56Z",
"canceledBy": "<string>",
"canceledAt": "2023-11-07T05:31:56Z",
"completedAt": "2023-11-07T05:31:56Z",
"aiGenerated": true,
"createdAt": "2023-11-07T05:31:56Z",
"updatedAt": "2023-11-07T05:31:56Z"
}{
"statusCode": 403,
"message": "Authentication required",
"error": "Forbidden"
}{
"statusCode": 404,
"message": "External tracker not found",
"error": "Not Found"
}{
"statusCode": 409,
"message": "Cannot approve a plan in status \"approved\"",
"error": "Conflict"
}Authorizations
Company API key. Obtain this from your Woku dashboard under Settings > API Keys. The same key used for the v0 endpoints.
Path Parameters
MongoDB ObjectId of the action plan.
^[0-9a-fA-F]{24}$MongoDB ObjectId of the task (subdocument of the plan).
^[0-9a-fA-F]{24}$Response
Task removed; returns the full updated plan
"507f1f77bcf86cd799439041"
200What the customers said (narrative synthesis, no invented numbers).
Detected theme the plan addresses (e.g. "Demoras en despacho").
Show child attributes
Show child attributes
Show child attributes
Show child attributes
VoC sources with evidence in the frozen scope.
woku, nps, csat, ces in_progress/completed are the managed (in-house) lifecycle; the rest apply to plans sent to an external tool or awaiting approval.
draft, approved, sent, canceled, delivery_error, in_progress, completed Deterministic (engine-computed) priority; never set by the LLM.
high, medium, low Frozen evidence snapshot: the exact analytical scope at generation time plus deterministic counts. Never recomputed after generation.
Show child attributes
Show child attributes
Traceability of the LLM run that drafted the plan.
Show child attributes
Show child attributes
Delivery state, filled when a plan is managed inside woku. provider is internal.
Show child attributes
Show child attributes
Stamped when a managed plan is closed (status completed).