curl --request PATCH \
--url https://api.folk.app/v1/tasks/{taskId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Follow up with John Doe",
"dueAt": "2025-07-17",
"dueTime": "15:00",
"description": "Discuss the Q3 proposal.",
"assignedUsers": [
{
"id": "<string>",
"email": "<string>"
}
],
"isPublic": true,
"entity": {
"id": "per_55175e81-9a52-4ac3-930e-82792c23499b"
}
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Follow up with John Doe',
dueAt: '2025-07-17',
dueTime: '15:00',
description: 'Discuss the Q3 proposal.',
assignedUsers: [{id: '<string>', email: '<string>'}],
isPublic: true,
entity: {id: 'per_55175e81-9a52-4ac3-930e-82792c23499b'}
})
};
fetch('https://api.folk.app/v1/tasks/{taskId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.folk.app/v1/tasks/{taskId}"
payload = {
"title": "Follow up with John Doe",
"dueAt": "2025-07-17",
"dueTime": "15:00",
"description": "Discuss the Q3 proposal.",
"assignedUsers": [
{
"id": "<string>",
"email": "<string>"
}
],
"isPublic": True,
"entity": { "id": "per_55175e81-9a52-4ac3-930e-82792c23499b" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)require 'uri'
require 'net/http'
url = URI("https://api.folk.app/v1/tasks/{taskId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Follow up with John Doe\",\n \"dueAt\": \"2025-07-17\",\n \"dueTime\": \"15:00\",\n \"description\": \"Discuss the Q3 proposal.\",\n \"assignedUsers\": [\n {\n \"id\": \"<string>\",\n \"email\": \"<string>\"\n }\n ],\n \"isPublic\": true,\n \"entity\": {\n \"id\": \"per_55175e81-9a52-4ac3-930e-82792c23499b\"\n }\n}"
response = http.request(request)
puts response.read_bodypackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.folk.app/v1/tasks/{taskId}"
payload := strings.NewReader("{\n \"title\": \"Follow up with John Doe\",\n \"dueAt\": \"2025-07-17\",\n \"dueTime\": \"15:00\",\n \"description\": \"Discuss the Q3 proposal.\",\n \"assignedUsers\": [\n {\n \"id\": \"<string>\",\n \"email\": \"<string>\"\n }\n ],\n \"isPublic\": true,\n \"entity\": {\n \"id\": \"per_55175e81-9a52-4ac3-930e-82792c23499b\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.folk.app/v1/tasks/{taskId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Follow up with John Doe',
'dueAt' => '2025-07-17',
'dueTime' => '15:00',
'description' => 'Discuss the Q3 proposal.',
'assignedUsers' => [
[
'id' => '<string>',
'email' => '<string>'
]
],
'isPublic' => true,
'entity' => [
'id' => 'per_55175e81-9a52-4ac3-930e-82792c23499b'
]
]),
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;
}{
"data": {
"id": "tsk_91118b73-5a75-480b-b8e3-a33671c35cdc",
"title": "Follow up with John Doe",
"description": "Discuss the Q3 proposal.",
"entity": {
"id": "per_55175e81-9a52-4ac3-930e-82792c23499b",
"entityType": "person",
"fullName": "John Doe"
},
"dueAt": "2025-07-17",
"dueTime": "15:00",
"completedAt": null,
"recurrenceFrequency": null,
"isPublic": true,
"assignedUsers": [
{
"id": "usr_14c18444-a0c7-459a-86b0-ccd70ebcd65c",
"fullName": "John Doe",
"email": "john.doe@example.com"
}
],
"createdBy": {
"id": "usr_14c18444-a0c7-459a-86b0-ccd70ebcd65c",
"fullName": "John Doe",
"email": "john.doe@example.com"
},
"createdAt": "2025-07-17T09:00:00.000Z",
"updatedAt": "2025-07-17T09:00:00.000Z"
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request was invalid.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#bad-request",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "No valid API key provided.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unauthorized",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key doesn’t have permissions to perform the request.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#forbidden",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "The requested resource was not found.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#not-found",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Invalid query parameters",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unprocessable-entity",
"details": {
"issues": [
{
"code": "too_small",
"minimum": 1,
"type": "number",
"inclusive": true,
"exact": false,
"message": "Number must be greater than or equal to 1",
"path": [
"limit"
]
}
]
},
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "The rate limit has been exceeded.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#rate-limiting",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z",
"details": {
"limit": 1000,
"remaining": 0,
"retryAfter": "2025-10-01T12:00:00Z"
}
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "An internal server error occurred.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#internal-server-error",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is currently unavailable.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#service-unavailable",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}Update a task
Update an existing task in the workspace.
curl --request PATCH \
--url https://api.folk.app/v1/tasks/{taskId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"title": "Follow up with John Doe",
"dueAt": "2025-07-17",
"dueTime": "15:00",
"description": "Discuss the Q3 proposal.",
"assignedUsers": [
{
"id": "<string>",
"email": "<string>"
}
],
"isPublic": true,
"entity": {
"id": "per_55175e81-9a52-4ac3-930e-82792c23499b"
}
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
title: 'Follow up with John Doe',
dueAt: '2025-07-17',
dueTime: '15:00',
description: 'Discuss the Q3 proposal.',
assignedUsers: [{id: '<string>', email: '<string>'}],
isPublic: true,
entity: {id: 'per_55175e81-9a52-4ac3-930e-82792c23499b'}
})
};
fetch('https://api.folk.app/v1/tasks/{taskId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.folk.app/v1/tasks/{taskId}"
payload = {
"title": "Follow up with John Doe",
"dueAt": "2025-07-17",
"dueTime": "15:00",
"description": "Discuss the Q3 proposal.",
"assignedUsers": [
{
"id": "<string>",
"email": "<string>"
}
],
"isPublic": True,
"entity": { "id": "per_55175e81-9a52-4ac3-930e-82792c23499b" }
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)require 'uri'
require 'net/http'
url = URI("https://api.folk.app/v1/tasks/{taskId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"title\": \"Follow up with John Doe\",\n \"dueAt\": \"2025-07-17\",\n \"dueTime\": \"15:00\",\n \"description\": \"Discuss the Q3 proposal.\",\n \"assignedUsers\": [\n {\n \"id\": \"<string>\",\n \"email\": \"<string>\"\n }\n ],\n \"isPublic\": true,\n \"entity\": {\n \"id\": \"per_55175e81-9a52-4ac3-930e-82792c23499b\"\n }\n}"
response = http.request(request)
puts response.read_bodypackage main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.folk.app/v1/tasks/{taskId}"
payload := strings.NewReader("{\n \"title\": \"Follow up with John Doe\",\n \"dueAt\": \"2025-07-17\",\n \"dueTime\": \"15:00\",\n \"description\": \"Discuss the Q3 proposal.\",\n \"assignedUsers\": [\n {\n \"id\": \"<string>\",\n \"email\": \"<string>\"\n }\n ],\n \"isPublic\": true,\n \"entity\": {\n \"id\": \"per_55175e81-9a52-4ac3-930e-82792c23499b\"\n }\n}")
req, _ := http.NewRequest("PATCH", 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))
}<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.folk.app/v1/tasks/{taskId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'title' => 'Follow up with John Doe',
'dueAt' => '2025-07-17',
'dueTime' => '15:00',
'description' => 'Discuss the Q3 proposal.',
'assignedUsers' => [
[
'id' => '<string>',
'email' => '<string>'
]
],
'isPublic' => true,
'entity' => [
'id' => 'per_55175e81-9a52-4ac3-930e-82792c23499b'
]
]),
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;
}{
"data": {
"id": "tsk_91118b73-5a75-480b-b8e3-a33671c35cdc",
"title": "Follow up with John Doe",
"description": "Discuss the Q3 proposal.",
"entity": {
"id": "per_55175e81-9a52-4ac3-930e-82792c23499b",
"entityType": "person",
"fullName": "John Doe"
},
"dueAt": "2025-07-17",
"dueTime": "15:00",
"completedAt": null,
"recurrenceFrequency": null,
"isPublic": true,
"assignedUsers": [
{
"id": "usr_14c18444-a0c7-459a-86b0-ccd70ebcd65c",
"fullName": "John Doe",
"email": "john.doe@example.com"
}
],
"createdBy": {
"id": "usr_14c18444-a0c7-459a-86b0-ccd70ebcd65c",
"fullName": "John Doe",
"email": "john.doe@example.com"
},
"createdAt": "2025-07-17T09:00:00.000Z",
"updatedAt": "2025-07-17T09:00:00.000Z"
}
}{
"error": {
"code": "INVALID_REQUEST",
"message": "The request was invalid.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#bad-request",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "No valid API key provided.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unauthorized",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "FORBIDDEN",
"message": "The API key doesn’t have permissions to perform the request.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#forbidden",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "RESOURCE_NOT_FOUND",
"message": "The requested resource was not found.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#not-found",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "UNPROCESSABLE_ENTITY",
"message": "Invalid query parameters",
"documentationUrl": "https://developer.folk.app/api-reference/errors#unprocessable-entity",
"details": {
"issues": [
{
"code": "too_small",
"minimum": 1,
"type": "number",
"inclusive": true,
"exact": false,
"message": "Number must be greater than or equal to 1",
"path": [
"limit"
]
}
]
},
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "The rate limit has been exceeded.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#rate-limiting",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z",
"details": {
"limit": 1000,
"remaining": 0,
"retryAfter": "2025-10-01T12:00:00Z"
}
}
}{
"error": {
"code": "INTERNAL_SERVER_ERROR",
"message": "An internal server error occurred.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#internal-server-error",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}{
"error": {
"code": "SERVICE_UNAVAILABLE",
"message": "The service is currently unavailable.",
"documentationUrl": "https://developer.folk.app/api-reference/errors#service-unavailable",
"requestId": "123e4567-e89b-12d3-a456-426614174000",
"timestamp": "2025-10-01T12:00:00Z"
}
}entity.id. Omit entity entirely to keep the task on its current entity.
This endpoint does not change completedAt — use Mark a task as done or Mark a task as to do to change completion state.Authorizations
API key for authentication
Path Parameters
The ID of the task to update.
40Body
The title of the task.
255"Follow up with John Doe"
The due date of the task, in YYYY-MM-DD format.
10"2025-07-17"
The due time of the task, in HH:mm format.
5"15:00"
The description of the task, in markdown format.
10000"Discuss the Q3 proposal."
The recurrence frequency of the task. One of: weekday, weekly, biweekly, monthly, quarterly, yearly. Null if non-recurring.
weekday, weekly, biweekly, monthly, quarterly, yearly, null Users to assign to this task. Accepts user IDs or emails, not both. If omitted, the task is assigned to the current user (the API key owner).
50Show child attributes
Show child attributes
Whether the task is visible to all workspace members (true) or only to its assigned users (false).
true
The entity to move the task to. Omit to keep the current entity. You can link people, companies and deals.
Show child attributes
Show child attributes
{ "id": "per_55175e81-9a52-4ac3-930e-82792c23499b" }
Response
The task updated in the workspace.
A task created by a user.
Show child attributes
Show child attributes
{ "id": "tsk_91118b73-5a75-480b-b8e3-a33671c35cdc", "title": "Follow up with John Doe", "description": "Discuss the Q3 proposal.", "entity": { "id": "per_55175e81-9a52-4ac3-930e-82792c23499b", "entityType": "person", "fullName": "John Doe" }, "dueAt": "2025-07-17", "dueTime": "15:00", "completedAt": null, "recurrenceFrequency": null, "isPublic": true, "assignedUsers": [ { "id": "usr_14c18444-a0c7-459a-86b0-ccd70ebcd65c", "fullName": "John Doe", "email": "john.doe@example.com" } ], "createdBy": { "id": "usr_14c18444-a0c7-459a-86b0-ccd70ebcd65c", "fullName": "John Doe", "email": "john.doe@example.com" }, "createdAt": "2025-07-17T09:00:00.000Z", "updatedAt": "2025-07-17T09:00:00.000Z" }
["This field is deprecated"]