SelfManager API

Version 1.0.0 · OpenAPI description

Read and change your SelfManager tables from your own scripts and automations.

Keys. Make a personal API key in SelfManager, under My Profile, Connected apps, and send it with every request as Authorization: Bearer <key>. A key acts as you, with the permissions you gave it: read (read your tables, tasks, notes and comments); write (create tables and tasks, and change them); shared (add tasks, comments and notes in tables other people can see, and set deadlines there); journal (read your journal, and add to it with write). Keep it out of web pages and apps other people run: the API sends no CORS headers.

Ids. A table is addressed by the table_id every answer gives it: /v1/tables/ followed by that id. URL-encode each part.

Answers are JSON. A range of days, totals, the journal, a search and most lists answer a page at a time, and a range can be any length, years too: an answer with a cursor has more, so send the same request with that cursor for the next page. Other lists are bounded: what didn't fit is left out, and the answer says truncated: true with a hint. Text that people wrote (names, notes, comments) is plain text.

Changes take their values as one JSON object in the body, sent as application/json, at most 1 MiB. What a change writes is what SelfManager itself would write, and the table's log says it came through the API.

Retries. Send an Idempotency-Key header of your choosing (up to 200 characters) with a request that changes something. Sent again with the same key after the first has finished, the same request answers what it answered first and changes nothing twice. A first attempt that failed before it changed anything is forgotten, so sending it again runs it. A key is remembered for 24 hours, for the API key it came with and the kind of change (a table's two addresses are one kind). The same key with a different request is a 409, and so is one sent while the first is still running.

Limits. 120 requests a minute for an account, refused requests included, and within them, a minute: 10 searches; 10 requests that make or change many tables at once (making several tables, copying, moving or deleting a table, editing a repeating table, resetting a table's task times, opening a day); 20 deletes of one thing; 20 downloads; 30 docs read. Also 10,000 requests a day (UTC), and 8 at once. Past them the answer is 429 with Retry-After: the seconds to wait, until midnight UTC for the day's, 5 for too many at once. Each of SelfManager's servers counts on its own, so under load a burst may get further before a 429: don't count on it.

Prices, while Integration Credits are charged: Reading a day, a table or a list, ticking or editing tasks, pinning tables, editing a repeating table, opening a day's repeating tables, deleting, and reading a recording's transcript or a doc's text are free. Reading several days, which days have tables, or totals, searching, downloading a file, copying or moving a table (once it is done), and adding tables, repeating tables, tasks, comments, notes or a conversation saved to AI History, or adding to or rewriting a journal line, use 1 Integration Credit a request (each page of a long range is one). Tasks use 1 Integration Credit for every 25 added or part of 25, a new table's first 25 included, and making many tables at once 1 Integration Credit for every 10 tables or part of 10. Weekly credits reset on Monday (UTC). Each endpoint below says its own.

Errors are {"error": {"code", "message"}}; the message is written for a person. Every answer the API gives has an X-Request-Id header. A request that can't be taken at all (a body larger than 1 MiB, a compressed body, a path whose % doesn't begin a UTF-8 character) can be turned away before it reaches the API, with a plain-text 400, 413 or 415 and neither.

StatuscodeWhen
400invalid_requestA parameter is missing, wrong or unknown, or the address isn't well formed.
401unauthorizedNo key was sent, or it has expired, was revoked, or its account is gone.
402insufficient_creditsRequests use Integration Credits, and fewer are left than this one costs.
403forbiddenSelfManager's access rules refused it, or it is a change the API doesn't make (such as renaming a task in a table other people can see).
403insufficient_scopeThe key lacks a permission the request needs.
403not_in_betaThe API, or its webhooks, are in a private beta that doesn't include this account yet.
403plan_inactiveThe account has no active plan.
403viewer_roleYou are a viewer on that table, so you can't change it.
403writes_offChanges through the API aren't switched on.
404not_foundNo such table, task, file or webhook, or you can't see it; or no such endpoint.
405method_not_allowedThe endpoint doesn't take that method. Allow lists those it takes.
409conflictThat Idempotency-Key was used before, with another request.
409request_in_progressThe request with that Idempotency-Key is still running.
413too_largeThe body is larger than 1 MiB; usually turned away before it reaches the API, as plain text.
415unsupported_media_typeThe body isn't sent as application/json.
422cannot_applyThe request is fine, but the data's state prevents it.
429rate_limitedToo many requests in a minute or in a day, or the credits left are held by requests still running or webhook events still being sent. Retry-After says how long to wait.
500server_errorSomething failed on SelfManager's side. Quote request_id when you report it.
503unavailableThe API, or its webhooks, are switched off.
504timed_outA change stopped before it could run out of time. Nothing was half written: a request that makes many tables made some of them whole, and says how many. Send it again with the same Idempotency-Key to make the rest.

Endpoints

GET /v1/me Your SelfManager accountGET /v1/days Tables over several daysGET /v1/totals Totals over a rangeGET /v1/dates Days with tablesGET /v1/days/{date} Tables on a dayPOST /v1/days/{date}/open Open a dayGET /v1/tables/{date}/{table_key} One tableGET /v1/search Search your tablesGET /v1/pins Pinned tablesGET /v1/deadlines DeadlinesGET /v1/repeats Repeating tablesGET /v1/repeats/{repeat_id} One repeating tablePATCH /v1/repeats/{repeat_id} Change a repeating tableGET /v1/journal JournalGET /v1/ai-history Your AI HistoryPOST /v1/ai-history Save to AI HistoryGET /v1/ai-history/{conversation_id} One AI History conversationPOST /v1/tables Create a tablePOST /v1/tables/batch Create many tablesPOST /v1/tables/{date}/{table_key}/tasks Add tasksPATCH /v1/tables/{date}/{table_key}/tasks/{task_id} Update a taskPOST /v1/tables/{date}/{table_key}/tasks/{task_id}/complete Complete a taskPOST /v1/tables/{date}/{table_key}/tasks/{task_id}/reopen Reopen a taskPOST /v1/tables/{date}/{table_key}/comments Add a commentPOST /v1/tables/{date}/{table_key}/notes Add to a table's notesPOST /v1/journal/{date} Add to your journal

GET/v1/me

Your SelfManager account.

Whose key this is: display name, plan, today's date and the timezone used, what the key may do, and the Integration Credits its requests spend. When requests use them, it also says how many are left.

A key needs: read. Price: free.

Parameters

NameWhereType
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/me"

Answer

GET/v1/days

Tables over several days.

Tables over a range of any length (years too), by day, with progress and tracked time, a page at a time: when the answer has a cursor, ask again with the same arguments and that cursor for the next page. Days with no tables are left out. Set detail to tasks for their tasks too. Repeating tables that haven't been created yet appear with planned: true. For totals over a long range, GET /v1/totals is shorter.

A key needs: read. Price: 1 Integration Credit.

Parameters

NameWhereType
start_datequerystringA date as YYYY-MM-DD, from 2000 to 2099.
end_datequerystringA date as YYYY-MM-DD, from 2000 to 2099.
scopequery, optional"all", "mine", "shared"Whose tables: all (default), only yours, or only those shared with you.
detailquery, optional"summary", "tasks", "full"summary (default): tables only; tasks: their tasks too; full: their tasks with every field (when each was created and started, and by whom).
cursorquery, optionalstringThe cursor an earlier answer gave, with the same other arguments: where the next page starts.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/days?start_date=…&end_date=…"

Answer

GET/v1/totals

Totals over a range.

Totals over a range of any length (years too), per week or month: tables, tasks, completed tasks, completion and tracked time, also by table name. Every task counts as in GET /v1/days; repeating tables not created yet don't. Weeks or months with no tables are left out. A page at a time: when the answer has a cursor, ask again with the same arguments and that cursor. A period marked partial is split across pages: add up the parts with the same start.

A key needs: read. Price: 1 Integration Credit.

Parameters

NameWhereType
start_datequerystringA date as YYYY-MM-DD, from 2000 to 2099.
end_datequerystringA date as YYYY-MM-DD, from 2000 to 2099.
scopequery, optional"all", "mine", "shared"Whose tables: all (default), only yours, or only those shared with you.
group_byquery, optional"week", "month"week (Monday to Sunday) or month (the default).
cursorquery, optionalstringThe cursor an earlier answer gave, with the same other arguments: where the next page starts.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/totals?start_date=…&end_date=…"

Answer

GET/v1/dates

Days with tables.

The days that have tables, each once with how many tables it has, over any range: all time when no dates are given. Days from today on also count the repeating tables planned there and not made yet (planned), through end_date; without end_date, only today's: give end_date to see repeats planned ahead. Without start_date it starts at your first day with a table, or today if that's earlier (end_date, if earlier still); without end_date it runs through your last day with a table, or today if that's later. A page at a time: when the answer has a cursor, ask again with the same arguments and that cursor, and add up the pages' counts. GET /v1/days lists the tables themselves.

A key needs: read. Price: 1 Integration Credit.

Parameters

NameWhereType
start_datequery, optionalstringA date as YYYY-MM-DD, from 2000 to 2099.
end_datequery, optionalstringA date as YYYY-MM-DD, from 2000 to 2099.
scopequery, optional"all", "mine", "shared"Whose tables: all (default), only yours, or only those shared with you.
cursorquery, optionalstringThe cursor an earlier answer gave, with the same other arguments: where the next page starts.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/dates"

Answer

GET/v1/days/{date}

Tables on a day.

The tables on one day, with their tasks, progress and tracked time. Repeating tables that haven't been created yet appear with planned: true.

A key needs: read. Price: free.

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD. Or today, which needs your timezone to be known (see GET /v1/me).
scopequery, optional"all", "mine", "shared"Whose tables: all (default), only yours, or only those shared with you.
detailquery, optional"normal", "full"normal (default) keeps the answer small; full allows more tables, tasks and text.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/days/<date>"

Answer

POST/v1/days/{date}/open

Open a day.

Make the repeating tables planned for a day (planned: true in GET /v1/days/{date}), exactly as opening that day in SelfManager does, and answer with the day's tables and every task's id. Only your own repeating tables, only from today on; nothing else changes, and a table already made is left as it is.

A key needs: read, write. Price: free.

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD. Or today, which needs your timezone to be known (see GET /v1/me).
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  "https://api.selfmanager.ai/v1/days/<date>/open"

Answer

GET/v1/tables/{date}/{table_key}

One table.

One table with every task, your deadlines on it, its notes, and its comments if asked. Completion times are kept on tables that track time, and for tasks timed one by one on others.

A key needs: read. Price: free.

For a table that someone else owns: GET /v1/tables/{date}/{table_key}/{owner_tag}

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD.
table_keyaddressstringThe second part of the table's id, as every answer gives it (table_id is date/table_key).
owner_tagaddressstringThe third part of the id of a table someone else owns.
include_notesquery, optionalbooleanInclude the notes (default true).
include_commentsquery, optionalbooleanInclude comments (default false).
comments_limitquery, optionalintegerComments per page (default 20).
cursorquery, optionalstringcomments_cursor from a previous answer.
detailquery, optional"normal", "full"normal (default) keeps the answer small; full allows more tables, tasks and text.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/tables/<date>/<table_key>"

Answer

GET/v1/search

Search your tables.

Search the tables you own for a word or phrase (the exact text, in any case, not each word apart) in their name, description, tasks or notes, and in comments when fields includes comments, within a date window of any length (the last 30 days by default), newest first. One call looks through up to 1,000 tables: when the answer has a cursor, older tables in the window are left, so ask again with the same arguments and that cursor. It searches only tables you own: GET /v1/days/{date} and GET /v1/days read the ones others share with you.

A key needs: read. Price: 1 Integration Credit.

Parameters

NameWhereType
queryquerystringThe words to find.
fieldsquery, optionallist of "name", "description", "tasks", "notes", "comments"Where to look (default name, description, tasks and notes).
date_fromquery, optionalstringA date as YYYY-MM-DD, from 2000 to 2099.
date_toquery, optionalstringA date as YYYY-MM-DD, from 2000 to 2099.
limitquery, optionalintegerAt most this many tables (default 10).
cursorquery, optionalstringThe cursor an earlier answer gave, with the same other arguments: where the next page starts.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/search?query=…"

Answer

GET/v1/pins

Pinned tables.

Your pinned tables, in their order, with their date and progress.

A key needs: read. Price: free.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/pins"

Answer

GET/v1/deadlines

Deadlines.

Your deadlines, as the Deadlines page shows them: overdue, today, the next 7 days, later, or met. Grouping needs your timezone.

A key needs: read. Price: free.

Parameters

NameWhereType
filterquery, optional"overdue", "today", "week", "later", "completed", "all"Which deadlines (default all).
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/deadlines"

Answer

GET/v1/repeats

Repeating tables.

Your repeating tables: what repeats, how often, the next date, and whether it is paused. Each date it repeats on gets its own copy; changing one day's copy doesn't change the repeat. GET /v1/repeats/{repeat_id} reads one whole, and PATCH /v1/repeats/{repeat_id} changes it.

A key needs: read. Price: free.

Parameters

NameWhereType
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/repeats"

Answer

GET/v1/repeats/{repeat_id}

One repeating table.

One of your repeating tables whole: its schedule, and the name, description, tasks and notes each copy starts with, plus how many tables it has already made for today on. Its id comes from GET /v1/repeats.

A key needs: read. Price: free.

Parameters

NameWhereType
repeat_idaddressstringThe repeating table's id, as GET /v1/repeats gives it.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/repeats/<repeat_id>"

Answer

PATCH/v1/repeats/{repeat_id}

Change a repeating table.

Change a repeating table as SelfManager's Repeats page does: what each new copy starts with (name, description, the whole task list, notes as plain text that replaces them), the schedule, the end date (null removes it), or pause and resume it. Tables already made keep the old version unless also_update_future is true: then those for today on that nobody worked in, and nobody else can see, are updated too, never their notes. It never deletes a repeat or changes its start date.

Give at least one of name, description, tasks, notes, schedule, end_date, status and also_update_future.

A key needs: read, write. Price: free.

Parameters

NameWhereType
repeat_idaddressstringThe repeating table's id, as GET /v1/repeats gives it.
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X PATCH -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"name":"Call the bank"}' \
  "https://api.selfmanager.ai/v1/repeats/<repeat_id>"

Answer

GET/v1/journal

Journal.

Your daily journal (self messages) for one date, or a range of any length, a page at a time: when the answer has a cursor, ask again with the same arguments and that cursor. Without a date it uses today, which needs your timezone.

A key needs: read, journal. Price: free.

Parameters

NameWhereType
datequery, optionalstringA date as YYYY-MM-DD, from 2000 to 2099.
start_datequery, optionalstringA date as YYYY-MM-DD, from 2000 to 2099.
end_datequery, optionalstringA date as YYYY-MM-DD, from 2000 to 2099.
detailquery, optional"normal", "full"normal (default) keeps the answer small; full allows more tables, tasks and text.
cursorquery, optionalstringThe cursor an earlier answer gave, with the same other arguments: where the next page starts.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/journal"

Answer

GET/v1/ai-history

Your AI History.

The conversations saved in your AI History, newest first: SelfManager's AI Reviews, tables' AI chats, and those an assistant saved. Titles, kinds, dates and a short preview, a page at a time: when the answer has a cursor, ask again with it for older ones. GET /v1/ai-history/{conversation_id} reads one.

A key needs: read. Price: free.

Parameters

NameWhereType
cursorquery, optionalstringThe cursor an earlier answer gave: where the next page starts.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/ai-history"

Answer

POST/v1/ai-history

Save to AI History.

Save a review or a chat to your AI History in SelfManager, where it shows beside the app's own AI Reviews, marked as the API's. Plain text: entries in order, each user or assistant. It can't be changed or deleted through the API afterwards.

A key needs: read, write. Price: 1 Integration Credit.

Parameters

NameWhereType
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"title":"…","kind":"review","entries":[{"role":"user","text":"…"}]}' \
  "https://api.selfmanager.ai/v1/ai-history"

Answer

GET/v1/ai-history/{conversation_id}

One AI History conversation.

One conversation from your AI History, its entries in order as plain text (role user or assistant), a page of them at a time: when the answer has a cursor, ask again with it.

A key needs: read. Price: free.

Parameters

NameWhereType
conversation_idaddressstringThe conversation's id, as GET /v1/ai-history gives it.
cursorquery, optionalstringThe cursor an earlier answer gave: where the next page starts.
timezonequery, optionalstringOptional IANA timezone, such as Europe/Bucharest. Defaults to the one SelfManager stored for you.

Example

curl -H "Authorization: Bearer $SELFMANAGER_KEY" \
  "https://api.selfmanager.ai/v1/ai-history/<conversation_id>"

Answer

POST/v1/tables

Create a table.

Create one table of yours on a day, with up to 200 tasks and optional notes. For several tables, or one table on many days, use POST /v1/tables/batch: one call. To add tasks to a table that exists, use POST /v1/tables/{date}/{table_key}/tasks. Time isn't tracked unless track_time is true, as in the app. Give an Idempotency-Key header to make a retry safe.

A key needs: read, write. Price: 1 Integration Credit or more, by what it makes (Prices).

Parameters

NameWhereType
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"date":"…","name":"…"}' \
  "https://api.selfmanager.ai/v1/tables"

Answer

POST/v1/tables/batch

Create many tables.

Create up to 1,000 tables of yours in one request, on any days, several on one day too. Each entry is one table on its date, or the same table on each of its dates, with up to 200 tasks and optional notes, as POST /v1/tables makes them. The Idempotency-Key header is required: when a request times out, or answers 504 having run out of time, send it again with the same key to make what is missing, never anything twice.

A key needs: read, write. Price: 1 Integration Credit or more, by what it makes (Prices).

Parameters

NameWhereType
Idempotency-KeyheaderstringRequired here. An id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"tables":[{"name":"…"}]}' \
  "https://api.selfmanager.ai/v1/tables/batch"

Answer

POST/v1/tables/{date}/{table_key}/tasks

Add tasks.

Add up to 200 tasks at the end of a table. A repeating table that hasn't been created for that day yet is created first. In a table other people can see (one shared with you, one of yours you share, or one with an invitation waiting), the key needs the shared permission.

A key needs: read, write. Price: 1 Integration Credit or more, by what it makes (Prices).

For a table that someone else owns: POST /v1/tables/{date}/{table_key}/{owner_tag}/tasks

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD.
table_keyaddressstringThe second part of the table's id, as every answer gives it (table_id is date/table_key).
owner_tagaddressstringThe third part of the id of a table someone else owns.
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"tasks":[{"name":"…"}]}' \
  "https://api.selfmanager.ai/v1/tables/<date>/<table_key>/tasks"

Answer

PATCH/v1/tables/{date}/{table_key}/tasks/{task_id}

Update a task.

Rename a task, change its priority, or set its progress short of completed (POST /v1/tables/{date}/{table_key}/tasks/{task_id}/complete and POST /v1/tables/{date}/{table_key}/tasks/{task_id}/reopen change that). Progress canceled leaves a task out of the table's progress, and keeps it; deleting it is DELETE /v1/tables/{date}/{table_key}/tasks/{task_id}'s, where that is listed. Renaming works only in tables nobody else can read.

Give at least one of name, priority and progress.

A key needs: read, write. Price: free.

For a table that someone else owns: PATCH /v1/tables/{date}/{table_key}/{owner_tag}/tasks/{task_id}

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD.
table_keyaddressstringThe second part of the table's id, as every answer gives it (table_id is date/table_key).
task_idaddressstringThe task's id, as the table's tasks give it.
owner_tagaddressstringThe third part of the id of a table someone else owns.
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X PATCH -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"name":"Call the bank"}' \
  "https://api.selfmanager.ai/v1/tables/<date>/<table_key>/tasks/<task_id>"

Answer

POST/v1/tables/{date}/{table_key}/tasks/{task_id}/complete

Complete a task.

Mark a task completed, as ticking it in SelfManager does: its time, who completed it, its deadline and the table's log. Works on your tables and on tables shared with you where you're an admin or member, not a viewer. A task of a table with planned: true has no task_id until POST /v1/days/{date}/open makes that day's copies. A task already completed is left as it is.

A key needs: read, write. Price: free.

For a table that someone else owns: POST /v1/tables/{date}/{table_key}/{owner_tag}/tasks/{task_id}/complete

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD.
table_keyaddressstringThe second part of the table's id, as every answer gives it (table_id is date/table_key).
task_idaddressstringThe task's id, as the table's tasks give it.
owner_tagaddressstringThe third part of the id of a table someone else owns.
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  "https://api.selfmanager.ai/v1/tables/<date>/<table_key>/tasks/<task_id>/complete"

Answer

POST/v1/tables/{date}/{table_key}/tasks/{task_id}/reopen

Reopen a task.

Mark a completed task as not started again, as unticking it in SelfManager does. This deletes the time recorded for it, and brings its deadline back.

A key needs: read, write. Price: free.

For a table that someone else owns: POST /v1/tables/{date}/{table_key}/{owner_tag}/tasks/{task_id}/reopen

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD.
table_keyaddressstringThe second part of the table's id, as every answer gives it (table_id is date/table_key).
task_idaddressstringThe task's id, as the table's tasks give it.
owner_tagaddressstringThe third part of the id of a table someone else owns.
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  "https://api.selfmanager.ai/v1/tables/<date>/<table_key>/tasks/<task_id>/reopen"

Answer

POST/v1/tables/{date}/{table_key}/comments

Add a comment.

Add a comment, as you, to a table. Plain text; @mentions aren't sent. In a table other people can see (one shared with you, one of yours you share, or one with an invitation waiting), the key needs the shared permission.

A key needs: read, write. Price: 1 Integration Credit.

For a table that someone else owns: POST /v1/tables/{date}/{table_key}/{owner_tag}/comments

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD.
table_keyaddressstringThe second part of the table's id, as every answer gives it (table_id is date/table_key).
owner_tagaddressstringThe third part of the id of a table someone else owns.
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"text":"…"}' \
  "https://api.selfmanager.ai/v1/tables/<date>/<table_key>/comments"

Answer

POST/v1/tables/{date}/{table_key}/notes

Add to a table's notes.

Add text at the end of a table's notes: each line becomes a paragraph. The version before stays one undo away in SelfManager. In a table other people can see (one shared with you, one of yours you share, or one with an invitation waiting), the key needs the shared permission.

A key needs: read, write. Price: 1 Integration Credit.

For a table that someone else owns: POST /v1/tables/{date}/{table_key}/{owner_tag}/notes

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD.
table_keyaddressstringThe second part of the table's id, as every answer gives it (table_id is date/table_key).
owner_tagaddressstringThe third part of the id of a table someone else owns.
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"text":"…"}' \
  "https://api.selfmanager.ai/v1/tables/<date>/<table_key>/notes"

Answer

POST/v1/journal/{date}

Add to your journal.

Add text to a day's journal line (your self message for that day), after a space; line breaks become spaces.

A key needs: read, journal, write. Price: 1 Integration Credit.

Parameters

NameWhereType
dateaddressstringThe day, as YYYY-MM-DD. Or today, which needs your timezone to be known (see GET /v1/me).
Idempotency-Keyheader, optionalstringAn id of your choosing for this request. Sent again with the same one, the request answers what it answered first and changes nothing twice.

Body

Example

curl -X POST -H "Authorization: Bearer $SELFMANAGER_KEY" \
  -H "Idempotency-Key: a-key-of-your-own" \
  -H "Content-Type: application/json" \
  -d '{"text":"…"}' \
  "https://api.selfmanager.ai/v1/journal/<date>"

Answer