ThreadPage
All docs

Reminders

A reminder brings a thread or a note back to the person at a time they choose, once or on a repeat. It has no text, and only the person sees it. A thread has one general reminder, and each of its notes can have one.

View as Markdown

On this page
  1. The reminder object
  2. Read reminders
  3. Set a weekly reminder
  4. Replace a reminder
  5. Remove a reminder
  6. If it fails
  7. Next

The reminder object

  • thread_id, and note_id for a note’s reminder (null for the thread’s own).
  • rule: a wall date and time in the person’s own time zone, {date, time, repeat}, with date as YYYY-MM-DD and time as HH:MM. repeat is null for once, at a time in the future; otherwise every is day, weekday, week, month or year. A weekly rule takes interval 1 or 2. A monthly rule takes on: day (the default), last_day (the date must be its month’s last day) or weekday.
  • next_at and snooze_at: when it next comes due and, if the person snoozed it, until when.
  • due: whether it is due now.
  • set_by: the connection that set it, or null when the person did.
The reminder object
LevelReminders
Read onlyRead them.
Read and addRead them, set new ones, and replace or remove the ones it set (set_by is this connection).
Edit and organizeRead, set, replace and remove any.

Changing or removing a reminder the connection did not set, on Read and add, answers 403 edit_not_allowed. A reminder is the person’s alone, so it is not a write into a shared thread.

Read reminders

List a thread's reminders

GET /api/integrations/v1/threads/{thread_id}/reminders

The thread's general reminder and those on its notes, each with its rule, next time, whether it is due and set_by. Read only and up.

Requirements
RequirementValue
LevelsEdit and organize · Read and add · Read only
PlanPro with Sync. On Free, add to the Inbox instead (POST /inbox/notes).
MCPlist_reminders
Parameters
NameInType
thread_idpathuuid, required

Answer 200.

Answer fields
FieldType
remindersarray of object, required
curl
curl -m 30 "https://thread.page/api/integrations/v1/threads/$THREAD_ID/reminders" \
  -H "Authorization: Bearer $THREADPAGE_TOKEN"

Errors: read_not_allowed 403, unavailable 404.

Also the errors of every call, and pro_required or cloud_required without Pro and Sync.

Read the person's reminder on this thread

GET /api/integrations/v1/threads/{thread_id}/reminder

The person's own reminder here, or null. It has no text and nobody else sees it. Read only and up.

Requirements
RequirementValue
LevelsEdit and organize · Read and add · Read only
PlanPro with Sync. On Free, add to the Inbox instead (POST /inbox/notes).
MCPget_reminder
Parameters
NameInType
thread_idpathuuid, required

Answer 200.

Answer fields
FieldType
reminderobject or or null or null, required
curl
curl -m 30 "https://thread.page/api/integrations/v1/threads/$THREAD_ID/reminder" \
  -H "Authorization: Bearer $THREADPAGE_TOKEN"

Errors: read_not_allowed 403, unavailable 404.

Also the errors of every call, and pro_required or cloud_required without Pro and Sync.

Read the person's reminder on this note

GET /api/integrations/v1/notes/{note_id}/reminder

The person's own reminder here, or null. It has no text and nobody else sees it. Read only and up.

Requirements
RequirementValue
LevelsEdit and organize · Read and add · Read only
PlanPro with Sync. On Free, add to the Inbox instead (POST /inbox/notes).
MCPget_reminder
Parameters
NameInType
note_idpathuuid, required

Answer 200. Its fields are those under Read the person's reminder on this thread.

curl
curl -m 30 "https://thread.page/api/integrations/v1/notes/$NOTE_ID/reminder" \
  -H "Authorization: Bearer $THREADPAGE_TOKEN"

Errors: read_not_allowed 403, unavailable 404.

Also the errors of every call, and pro_required or cloud_required without Pro and Sync.

Set a weekly reminder

PUT /threads/{thread_id}/reminder sets the thread’s reminder; PUT /notes/{note_id}/reminder sets a note’s. The thread must accept notes from this connection.

Shell
OP=$(uuidgen)
curl -X PUT -m 30 --retry 3 --retry-all-errors https://thread.page/api/integrations/v1/threads/$THREAD_ID/reminder \
  -H "Authorization: Bearer $THREADPAGE_TOKEN" \
  -H "Operation-Id: $OP" \
  -H "Content-Type: application/json" \
  -d '{"rule": {"date": "2026-11-02", "time": "09:00", "repeat": {"every": "week", "interval": 1}}}'

The ChangeReceipt carries the reminder as set in reminder.

Set the person's reminder on this thread

PUT /api/integrations/v1/threads/{thread_id}/reminder

The MCP tool set_reminder. Without replace an existing reminder is never overwritten: 409 reminder_exists with it. Read and add sets new reminders and replaces only its own (set_by); Edit and organize, any. The thread must accept notes from this connection.

Requirements
RequirementValue
LevelsEdit and organize · Read and add
PlanPro with Sync. On Free, add to the Inbox instead (POST /inbox/notes).
IdempotencyOperation-Id header: one UUID per logical write, the same on every retry.
MCPset_reminder
Shared threadsOnly where the owner chose Allow here.
Parameters
NameInType
thread_idpathuuid, required
Body (application/json)
FieldTypeDescription
ruleobject, requiredA wall date and time in the person's own zone.
replacebooleantrue replaces the reminder already here; only when the person asked.

Answer 200.

Answer fields
FieldTypeDescription
operation_iduuid, required
statusaccepted, conflict, not_completed, required
kindnote.update, note.properties, note.move, note.trash, note.restore, note.restore_version, thread.create, thread.update, thread.archive, thread.unarchive, thread.trash, thread.restore, thread.move, folder.create, folder.rename, folder.move, folder.trash, folder.restore, reminder.set, reminder.remove, required
targetobject, required
revisioninteger or nullThe target's revision after the change (informational).
content_revisioninteger or nullA note's content revision after a content change.
accepted_atdate-time, required
urluri or null
thread_statusstringthread.update: the status the Thread has after the change, which is the replacement when the one you sent was deleted.
reminderobject or or null or nullreminder.set: the reminder as set; reminder.remove: null.
curl
OP=$(uuidgen)
curl -m 30 --retry 3 --retry-all-errors -X PUT "https://thread.page/api/integrations/v1/threads/$THREAD_ID/reminder" \
  -H "Authorization: Bearer $THREADPAGE_TOKEN" \
  -H "Operation-Id: $OP" \
  -H "Content-Type: application/json" \
  -d '{"rule":{"date":"2026-11-09","time":"09:00","repeat":{"every":"week"}}}'

Errors: write_not_allowed 403, 409, unavailable 404, invalid_json 400, invalid_rule 400, unsupported_media_type 415, operation_id_reused 409, shared_place_write 409, reminder_exists 409, thread_archived 409, entity_deleted 409, reminders_limit 422.

Also the errors of every call, and pro_required or cloud_required without Pro and Sync.

Set the person's reminder on this note

PUT /api/integrations/v1/notes/{note_id}/reminder

The MCP tool set_reminder. Without replace an existing reminder is never overwritten: 409 reminder_exists with it. Read and add sets new reminders and replaces only its own (set_by); Edit and organize, any. The thread must accept notes from this connection.

Requirements
RequirementValue
LevelsEdit and organize · Read and add
PlanPro with Sync. On Free, add to the Inbox instead (POST /inbox/notes).
IdempotencyOperation-Id header: one UUID per logical write, the same on every retry.
MCPset_reminder
Shared threadsOnly where the owner chose Allow here.
Parameters
NameInType
note_idpathuuid, required
Body (application/json)
FieldTypeDescription
ruleobject, requiredA wall date and time in the person's own zone.
replacebooleantrue replaces the reminder already here; only when the person asked.

Answer 200. Its fields are those under Set the person's reminder on this thread.

curl
OP=$(uuidgen)
curl -m 30 --retry 3 --retry-all-errors -X PUT "https://thread.page/api/integrations/v1/notes/$NOTE_ID/reminder" \
  -H "Authorization: Bearer $THREADPAGE_TOKEN" \
  -H "Operation-Id: $OP" \
  -H "Content-Type: application/json" \
  -d '{"rule":{"date":"2026-11-03","time":"14:30","repeat":null},"replace":true}'

Errors: write_not_allowed 403, 409, unavailable 404, invalid_json 400, invalid_rule 400, unsupported_media_type 415, operation_id_reused 409, shared_place_write 409, reminder_exists 409, thread_archived 409, entity_deleted 409, reminders_limit 422.

Also the errors of every call, and pro_required or cloud_required without Pro and Sync.

Replace a reminder

Without replace, an existing reminder is never overwritten: the answer is 409 reminder_exists with the reminder that is there. Send "replace": true only when the person asked to change it.

JSON
{"rule": {"date": "2026-11-03", "time": "08:30", "repeat": null}, "replace": true}

Remove a reminder

DELETE removes it. The person can bring it back in ThreadPage for a day. Where there is no reminder, the answer is 404 not_found.

Remove the person's reminder on this thread

DELETE /api/integrations/v1/threads/{thread_id}/reminder

The MCP tool remove_reminder; the person can bring it back in ThreadPage for a day. Read and add removes only its own (set_by); Edit and organize, any. No reminder here answers 404.

Requirements
RequirementValue
LevelsEdit and organize · Read and add
PlanPro with Sync. On Free, add to the Inbox instead (POST /inbox/notes).
IdempotencyOperation-Id header: one UUID per logical write, the same on every retry.
MCPremove_reminder
Shared threadsOnly where the owner chose Allow here.
Parameters
NameInType
thread_idpathuuid, required

Answer 200. Its fields are those under Set the person's reminder on this thread.

curl
OP=$(uuidgen)
curl -m 30 --retry 3 --retry-all-errors -X DELETE "https://thread.page/api/integrations/v1/threads/$THREAD_ID/reminder" \
  -H "Authorization: Bearer $THREADPAGE_TOKEN" \
  -H "Operation-Id: $OP"

Errors: edit_not_allowed 403, unavailable 404, not_found 404, operation_id_reused 409, shared_place_write 409.

Also the errors of every call, and pro_required or cloud_required without Pro and Sync.

Remove the person's reminder on this note

DELETE /api/integrations/v1/notes/{note_id}/reminder

The MCP tool remove_reminder; the person can bring it back in ThreadPage for a day. Read and add removes only its own (set_by); Edit and organize, any. No reminder here answers 404.

Requirements
RequirementValue
LevelsEdit and organize · Read and add
PlanPro with Sync. On Free, add to the Inbox instead (POST /inbox/notes).
IdempotencyOperation-Id header: one UUID per logical write, the same on every retry.
MCPremove_reminder
Shared threadsOnly where the owner chose Allow here.
Parameters
NameInType
note_idpathuuid, required

Answer 200. Its fields are those under Set the person's reminder on this thread.

curl
OP=$(uuidgen)
curl -m 30 --retry 3 --retry-all-errors -X DELETE "https://thread.page/api/integrations/v1/notes/$NOTE_ID/reminder" \
  -H "Authorization: Bearer $THREADPAGE_TOKEN" \
  -H "Operation-Id: $OP"

Errors: edit_not_allowed 403, unavailable 404, not_found 404, operation_id_reused 409, shared_place_write 409.

Also the errors of every call, and pro_required or cloud_required without Pro and Sync.

If it fails

Errors
CodeHTTPWhenWhat to doRetryable
edit_not_allowed403Changing a note this connection did not add, or a reminder it did not set, on Read and add; any change below Read and add.Add a new note instead, or give the person details.manage_url.No
reminder_exists409The person already has a reminder there and replace was not set.Send replace true only when the person asked to change it.No
invalid_rule400A reminder rule ThreadPage can't take, or a one-time reminder already past.Fix the rule as the reminder routes describe it.No
reminders_limit422The thread, or the person, has as many reminders as they may (details.scope).Tell the person.No
invalid_request400, 422A parameter, field or header is missing or has an unsupported value (a write without Operation-Id too), or the token was sent in the query string.Fix what the message names. Sending it unchanged fails again.No
not_found404No such request, subscription, delivery, endpoint, reminder or operation for this connection.Check the ID; it may have expired or been deleted.No
thread_archived409The thread is archived, so it takes no new notes.Unarchive it first, or ask the owner.No
entity_deleted409The item is in Trash.Restore it first, or ask the owner.No
operation_id_reused409The Operation-Id (MCP: operation_id) was already used with another body.If you are repeating a lost write, read GET /operations/{id} first. Otherwise use a new ID.No

Next