curl --request PUT \
--url https://api.quiva.ai/workspaces/task/{task_id}/action \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "Confirm the report has been proofread",
"id": "ta_a1b2c3",
"done": true,
"resources": [
{
"resource_id": "onboarding-checklist",
"resource_type": "record-config",
"metadata": {}
}
]
}
'import requests
url = "https://api.quiva.ai/workspaces/task/{task_id}/action"
payload = {
"description": "Confirm the report has been proofread",
"id": "ta_a1b2c3",
"done": True,
"resources": [
{
"resource_id": "onboarding-checklist",
"resource_type": "record-config",
"metadata": {}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Confirm the report has been proofread',
id: 'ta_a1b2c3',
done: true,
resources: [
{
resource_id: 'onboarding-checklist',
resource_type: 'record-config',
metadata: {}
}
]
})
};
fetch('https://api.quiva.ai/workspaces/task/{task_id}/action', 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://api.quiva.ai/workspaces/task/{task_id}/action",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'description' => 'Confirm the report has been proofread',
'id' => 'ta_a1b2c3',
'done' => true,
'resources' => [
[
'resource_id' => 'onboarding-checklist',
'resource_type' => 'record-config',
'metadata' => [
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.quiva.ai/workspaces/task/{task_id}/action"
payload := strings.NewReader("{\n \"description\": \"Confirm the report has been proofread\",\n \"id\": \"ta_a1b2c3\",\n \"done\": true,\n \"resources\": [\n {\n \"resource_id\": \"onboarding-checklist\",\n \"resource_type\": \"record-config\",\n \"metadata\": {}\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.quiva.ai/workspaces/task/{task_id}/action")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Confirm the report has been proofread\",\n \"id\": \"ta_a1b2c3\",\n \"done\": true,\n \"resources\": [\n {\n \"resource_id\": \"onboarding-checklist\",\n \"resource_type\": \"record-config\",\n \"metadata\": {}\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.quiva.ai/workspaces/task/{task_id}/action")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Confirm the report has been proofread\",\n \"id\": \"ta_a1b2c3\",\n \"done\": true,\n \"resources\": [\n {\n \"resource_id\": \"onboarding-checklist\",\n \"resource_type\": \"record-config\",\n \"metadata\": {}\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"description": "Confirm the report has been proofread",
"id": "ta_a1b2c3",
"done": true,
"resources": [
{
"resource_id": "onboarding-checklist",
"resource_type": "record-config",
"metadata": {}
}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Create or update a task checklist action
Upsert a checklist action on a task. There is no separate create endpoint — PUT is used for both create and update.
Omit id to create a new action (the server assigns one); pass an existing id to update that action. description is required on every write, including updates that only change done.
The response echoes back the action as submitted, not the stored record — it does not reflect how a partial update merged with the existing action.
curl --request PUT \
--url https://api.quiva.ai/workspaces/task/{task_id}/action \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"description": "Confirm the report has been proofread",
"id": "ta_a1b2c3",
"done": true,
"resources": [
{
"resource_id": "onboarding-checklist",
"resource_type": "record-config",
"metadata": {}
}
]
}
'import requests
url = "https://api.quiva.ai/workspaces/task/{task_id}/action"
payload = {
"description": "Confirm the report has been proofread",
"id": "ta_a1b2c3",
"done": True,
"resources": [
{
"resource_id": "onboarding-checklist",
"resource_type": "record-config",
"metadata": {}
}
]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
description: 'Confirm the report has been proofread',
id: 'ta_a1b2c3',
done: true,
resources: [
{
resource_id: 'onboarding-checklist',
resource_type: 'record-config',
metadata: {}
}
]
})
};
fetch('https://api.quiva.ai/workspaces/task/{task_id}/action', 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://api.quiva.ai/workspaces/task/{task_id}/action",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'description' => 'Confirm the report has been proofread',
'id' => 'ta_a1b2c3',
'done' => true,
'resources' => [
[
'resource_id' => 'onboarding-checklist',
'resource_type' => 'record-config',
'metadata' => [
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.quiva.ai/workspaces/task/{task_id}/action"
payload := strings.NewReader("{\n \"description\": \"Confirm the report has been proofread\",\n \"id\": \"ta_a1b2c3\",\n \"done\": true,\n \"resources\": [\n {\n \"resource_id\": \"onboarding-checklist\",\n \"resource_type\": \"record-config\",\n \"metadata\": {}\n }\n ]\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://api.quiva.ai/workspaces/task/{task_id}/action")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"description\": \"Confirm the report has been proofread\",\n \"id\": \"ta_a1b2c3\",\n \"done\": true,\n \"resources\": [\n {\n \"resource_id\": \"onboarding-checklist\",\n \"resource_type\": \"record-config\",\n \"metadata\": {}\n }\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.quiva.ai/workspaces/task/{task_id}/action")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"description\": \"Confirm the report has been proofread\",\n \"id\": \"ta_a1b2c3\",\n \"done\": true,\n \"resources\": [\n {\n \"resource_id\": \"onboarding-checklist\",\n \"resource_type\": \"record-config\",\n \"metadata\": {}\n }\n ]\n}"
response = http.request(request)
puts response.read_body{
"description": "Confirm the report has been proofread",
"id": "ta_a1b2c3",
"done": true,
"resources": [
{
"resource_id": "onboarding-checklist",
"resource_type": "record-config",
"metadata": {}
}
]
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Authorizations
JWT Authorization header using the Bearer scheme
Path Parameters
Task id the action hangs off.
Body
A checklist item on a task. description is required on every write, not only on create — an update that only flips done still has to resend it.
What the action is. Required on every write.
1"Confirm the report has been proofread"
Action id. Omit on create and the server assigns one; pass an existing id to update that action.
"ta_a1b2c3"
Whether the item is ticked off.
Platform resources linked from this action.
Show child attributes
Show child attributes
Response
The action as submitted (echoed back, not read back from storage).
A checklist item on a task. description is required on every write, not only on create — an update that only flips done still has to resend it.
What the action is. Required on every write.
1"Confirm the report has been proofread"
Action id. Omit on create and the server assigns one; pass an existing id to update that action.
"ta_a1b2c3"
Whether the item is ticked off.
Platform resources linked from this action.
Show child attributes
Show child attributes