curl --request PATCH \
--url https://api.folk.app/v1/reminders/{reminderId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Reminder on John Doe",
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1",
"assignedUsers": [
{
"id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476"
},
{
"email": "john.doe@example.com"
}
]
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Reminder on John Doe',
recurrenceRule: 'DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1',
assignedUsers: [
{id: 'usr_a45c30d8-19fc-4939-94c7-17dc5e46f476'},
{email: 'john.doe@example.com'}
]
})
};
fetch('https://api.folk.app/v1/reminders/{reminderId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.folk.app/v1/reminders/{reminderId}"
payload = {
"name": "Reminder on John Doe",
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000
RRULE:FREQ=WEEKLY;INTERVAL=1",
"assignedUsers": [{ "id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476" }, { "email": "john.doe@example.com" }]
}
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/reminders/{reminderId}")
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 \"name\": \"Reminder on John Doe\",\n \"recurrenceRule\": \"DTSTART;TZID=Europe/Paris:20250717T090000\\nRRULE:FREQ=WEEKLY;INTERVAL=1\",\n \"assignedUsers\": [\n {\n \"id\": \"usr_a45c30d8-19fc-4939-94c7-17dc5e46f476\"\n },\n {\n \"email\": \"john.doe@example.com\"\n }\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/reminders/{reminderId}"
payload := strings.NewReader("{\n \"name\": \"Reminder on John Doe\",\n \"recurrenceRule\": \"DTSTART;TZID=Europe/Paris:20250717T090000\\nRRULE:FREQ=WEEKLY;INTERVAL=1\",\n \"assignedUsers\": [\n {\n \"id\": \"usr_a45c30d8-19fc-4939-94c7-17dc5e46f476\"\n },\n {\n \"email\": \"john.doe@example.com\"\n }\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/reminders/{reminderId}",
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([
'name' => 'Reminder on John Doe',
'recurrenceRule' => 'DTSTART;TZID=Europe/Paris:20250717T090000
RRULE:FREQ=WEEKLY;INTERVAL=1',
'assignedUsers' => [
[
'id' => 'usr_a45c30d8-19fc-4939-94c7-17dc5e46f476'
],
[
'email' => 'john.doe@example.com'
]
]
]),
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": "rmd_91118b73-5a75-480b-b8e3-a33671c35cdc",
"name": "Reminder on John Doe",
"entity": {
"id": "per_55175e81-9a52-4ac3-930e-82792c23499b",
"entityType": "person",
"fullName": "John Doe"
},
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1",
"visibility": "public",
"assignedUsers": [
{
"id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476",
"fullName": "John Doe",
"email": "john.doe@example.com"
}
],
"nextTriggerTime": "2025-07-17T09:00:00.000Z",
"lastTriggerTime": "2025-05-17T09:00:00.000Z",
"createdBy": {
"id": "usr_bc984b3f-0386-434d-82d7-a91eb6badd71",
"fullName": "John Doe",
"email": "john.doe@example.com"
},
"createdAt": "2021-01-01T00: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 reminder
Update an existing reminder in the workspace.
curl --request PATCH \
--url https://api.folk.app/v1/reminders/{reminderId} \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "Reminder on John Doe",
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1",
"assignedUsers": [
{
"id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476"
},
{
"email": "john.doe@example.com"
}
]
}
'const options = {
method: 'PATCH',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Reminder on John Doe',
recurrenceRule: 'DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1',
assignedUsers: [
{id: 'usr_a45c30d8-19fc-4939-94c7-17dc5e46f476'},
{email: 'john.doe@example.com'}
]
})
};
fetch('https://api.folk.app/v1/reminders/{reminderId}', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));import requests
url = "https://api.folk.app/v1/reminders/{reminderId}"
payload = {
"name": "Reminder on John Doe",
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000
RRULE:FREQ=WEEKLY;INTERVAL=1",
"assignedUsers": [{ "id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476" }, { "email": "john.doe@example.com" }]
}
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/reminders/{reminderId}")
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 \"name\": \"Reminder on John Doe\",\n \"recurrenceRule\": \"DTSTART;TZID=Europe/Paris:20250717T090000\\nRRULE:FREQ=WEEKLY;INTERVAL=1\",\n \"assignedUsers\": [\n {\n \"id\": \"usr_a45c30d8-19fc-4939-94c7-17dc5e46f476\"\n },\n {\n \"email\": \"john.doe@example.com\"\n }\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/reminders/{reminderId}"
payload := strings.NewReader("{\n \"name\": \"Reminder on John Doe\",\n \"recurrenceRule\": \"DTSTART;TZID=Europe/Paris:20250717T090000\\nRRULE:FREQ=WEEKLY;INTERVAL=1\",\n \"assignedUsers\": [\n {\n \"id\": \"usr_a45c30d8-19fc-4939-94c7-17dc5e46f476\"\n },\n {\n \"email\": \"john.doe@example.com\"\n }\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/reminders/{reminderId}",
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([
'name' => 'Reminder on John Doe',
'recurrenceRule' => 'DTSTART;TZID=Europe/Paris:20250717T090000
RRULE:FREQ=WEEKLY;INTERVAL=1',
'assignedUsers' => [
[
'id' => 'usr_a45c30d8-19fc-4939-94c7-17dc5e46f476'
],
[
'email' => 'john.doe@example.com'
]
]
]),
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": "rmd_91118b73-5a75-480b-b8e3-a33671c35cdc",
"name": "Reminder on John Doe",
"entity": {
"id": "per_55175e81-9a52-4ac3-930e-82792c23499b",
"entityType": "person",
"fullName": "John Doe"
},
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1",
"visibility": "public",
"assignedUsers": [
{
"id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476",
"fullName": "John Doe",
"email": "john.doe@example.com"
}
],
"nextTriggerTime": "2025-07-17T09:00:00.000Z",
"lastTriggerTime": "2025-05-17T09:00:00.000Z",
"createdBy": {
"id": "usr_bc984b3f-0386-434d-82d7-a91eb6badd71",
"fullName": "John Doe",
"email": "john.doe@example.com"
},
"createdAt": "2021-01-01T00: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"
}
}Recurrence rule
The recurrence rules format is based on the iCalendar standard. However, we don’t support the full spec, but only a subset of the features. The format of the recurrence must be the following:DTSTART;TZID=<timezone>:<date>T<time>
RRULE:<recurrence parameters>
DTSTART;TZID=Europe/Paris:20250717T090000
RRULE:FREQ=WEEKLY;INTERVAL=1
DTSTART and RRULE lines.In JSON encoding, the newline is represented as \n. The previous example would be encoded as:{
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1"
}
- No repeat:
RRULE:COUNT=1 - Every weekday:
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;INTERVAL=1 - Every week:
RRULE:FREQ=WEEKLY;INTERVAL=1 - Every 2 weeks:
RRULE:FREQ=WEEKLY;INTERVAL=2 - Every month:
RRULE:FREQ=MONTHLY;INTERVAL=1 - Every quarter:
RRULE:FREQ=MONTHLY;INTERVAL=3 - Every year:
RRULE:FREQ=YEARLY;INTERVAL=1
BAD_REQUEST error will be returned.Visibility
The visibility of the reminder can be set topublic or private.
public: The reminder is visible to all users in the workspace.private: The reminder is visible only to the current user.
public, you can provide a list of users to be notified when the reminder is triggered.
If the visibility is changed to private, the current user is automatically notified.
When changing the visibility of the reminder, the assigned users can be affected in the following way:
- from
privatetopublic: The assigned users is automatically set to the current user. - from
publictoprivate: The assigned users is kept as the current user, unless you also provide a new list of users to be notified.
Authorizations
API key for authentication
Path Parameters
The ID of the reminder to update.
40Body
The name of the reminder.
255"Reminder on John Doe"
The recurrence rule of the reminder. The recurrence rule is a string that follows the iCalendar format specified in RFC 5545. We support only a subset of the iCalendar format:
DTSTART;TZID=<timezone>:<date>T<time>
RRULE:<recurrence parameters>
Only the following recurrence parameters are supported:
- No repeat:
RRULE:COUNT=1 - Every weekday:
RRULE:FREQ=WEEKLY;BYDAY=MO,TU,WE,TH,FR;INTERVAL=1 - Every week:
RRULE:FREQ=WEEKLY;INTERVAL=1 - Every 2 weeks:
RRULE:FREQ=WEEKLY;INTERVAL=2 - Every month:
RRULE:FREQ=MONTHLY;INTERVAL=1 - Every quarter:
RRULE:FREQ=MONTHLY;INTERVAL=3 - Every year:
RRULE:FREQ=YEARLY;INTERVAL=1
Supplying any other type of recurrence will result in a validation error.
150"DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1"
The visibility of the reminder.
public: The reminder is visible to all users in the workspace.private: The reminder is visible only to the current user.
public, private A list of workspace users to be notified when the reminder is triggered. Only required for public reminders. For private reminders, this field must be omitted and the current user is automatically notified.
1 - 50 elements- Option 1
- Option 2
Show child attributes
Show child attributes
[
{
"id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476"
},
{ "email": "john.doe@example.com" }
]
Response
The updated reminder in the workspace.
A reminder linked to an entity.
Show child attributes
Show child attributes
{
"id": "rmd_91118b73-5a75-480b-b8e3-a33671c35cdc",
"name": "Reminder on John Doe",
"entity": {
"id": "per_55175e81-9a52-4ac3-930e-82792c23499b",
"entityType": "person",
"fullName": "John Doe"
},
"recurrenceRule": "DTSTART;TZID=Europe/Paris:20250717T090000\nRRULE:FREQ=WEEKLY;INTERVAL=1",
"visibility": "public",
"assignedUsers": [
{
"id": "usr_a45c30d8-19fc-4939-94c7-17dc5e46f476",
"fullName": "John Doe",
"email": "john.doe@example.com"
}
],
"nextTriggerTime": "2025-07-17T09:00:00.000Z",
"lastTriggerTime": "2025-05-17T09:00:00.000Z",
"createdBy": {
"id": "usr_bc984b3f-0386-434d-82d7-a91eb6badd71",
"fullName": "John Doe",
"email": "john.doe@example.com"
},
"createdAt": "2021-01-01T00:00:00.000Z"
}
["This field is deprecated"]