Todoist
Extend the Todoist platform with our powerful APIs.
Todoist Sync API v5.3 makes it easy to retrieve and sync data. It's great if you want to implement a client that stores all of the data locally.

For the Sync API you should always make POST requests and use HTTPS.

Our Sync API has only three entry points:

Recommended workflow with the API

This is the recommend way to work with the API.

Creating and updating the full model (on login or relaunch of your app):

Updating changes and getting updated data (iterative sync):

/TodoistSync/v5.3/get

Used to retrieve data (both all and only updated). Do note that at this time only Projects, Labels, Filters, DayOrders supports partially fetching, this is because only these will grow a lot, the other data is small and does not change that much.
Required parameters:
seq_no:
Sequence number. On the initial request you should pass 0. On all other requests you should pass the last seq_no you recieved from the server.
Optional parameters:
day_orders_timestamp:
The /get and /syncAndGetUpdated requests return DayOrdersTimestamp that specifies when the day orders were last updated. If you omit day_orders_timestamp then all the day orders will be fetched by /get request and none of then will be fetched by /syncAndGetUpdated request. If you specify day_orders_timestamp then day orders will be returned if your timestamp is different from the servers.
If you send day_orders_timestamp and the day orders have not been updated then the server won't return the DayOrders entry at all.
include_notification_settings:
Include notification settings (SettingsNotifications), the same data as /API/getNotificationSettings returns. This is needed on platforms that implement native notifications.
resource_types:
An optional parameter which is useful if you don't need a complete result of /get and /syncAndGetUpdated, but want to have just a subset. It can be useful for speeding up the load of most important user's data (like the list of projects and tasks) and to get the rest of the data asynchronously later on. It should be a JSON-encoded list of strings. For example, ["projects", "labels", "filters"]. Below is the list of recognizable values for strings:
  • projects for the list of projects and tasks
  • labels for the list of labels
  • day_orders for the list of day orders
  • filters for the list of filters
  • reminders for the list of reminders
  • collaborators for the list of collaborators
  • notes for the list of notes
  • live_notifications for the list of live notifications
  • share_invitations for the list of invitations
api_token:
User's API token (returned on successful login from /API/Users/login). Else the session cookie is used.
Curl example:
                    curl -X POST -d "api_token=..." https://api.todoist.com/TodoistSync/v5.3/get
                    curl -X POST -d 'api_token=...&seq_no=0' https://api.todoist.com/TodoistSync/v5.3/get
                    
Successful return:
HTTP 200 OK with a JSON object of the data:
                    {
                        "Projects": [ ... ],

                        "Items": [ ... ],

                        "Labels":   [ ... ],

                        "Filters":   [ ... ],

                        "Reminders":   [ ... ],

                        "Collaborators":  [ ... ],
                        "CollaboratorStates":   [ ... ],
                        "LiveNotifications": [],

                        "DayOrders":   { ... },
                        "DayOrdersTimestamp":   "1322399993.1",

                        "Settings": { ... },
                        "SettingsNotifications": { ... }, (only if include_notification_settings is set)
                        "User": {...}
                    }
                    
Explanation of data returned:
User:
A JSON object with a user's information. Only included if seq_no is different.
                        Example:
                        {
                           "start_day":1,
                           "start_page":"7 days, overdue",
                           "date_format":1,
                           "is_premium":true,
                           "sort_order":0,
                           "full_name":"Amir Salihefendic",
                           "mobile_number":"...",
                           "mobile_host":"elsewhere",
                           "timezone":"America\/Santiago",
                           "id":1,
                           "time_format":0,
                           "premium_until":"Mon, 20 Nov 2017 16:02:13 +0000",
                           "completed_count":267,
                           "join_date":null,
                           "default_reminder":"mobile",
                           "email":"amix@amix.dk"
                        }
                        
Projects:
A list of JSON objects of projects.
                        Example:
                        [{
                          "user_id": 1,
                          "name": "Babu",
                          "color": 2,
                          "collapsed": 0,
                          "item_order": 1,
                          "cache_count": 13,
                          "indent": 1,
                          "id": 455831,
                          "last_updated": "1325774561.4",
                          "items": [...]
                        }, ...]
                        
Labels:
A JSON list of objects (including things like color, id etc.)
                        Example:
                        [ { "color":4, "count":0, "uid":1, "id":721, "name":"followup" }, ... ]
                        
Filters:
A JSON list of custom filters
                        Example:
                        [ { "name":"Priority 1", "query":"q1", "id":1212, "user_id":1, "item_order":1 }, ... ]
                        
DayOrders:
An object specifying the order of items in daily agenda.
                        Example:
                        {"12345": 1, "12346": 2, "12347": 2, "12348": -1}
                        
If DayOrdersTimestamp is sent and day orders have not been updated then DayOrders won't be returned at all!
DayOrdersTimestamp:
A string specifying when day orders where last updated. Use this to not fetch day orders on every request.
                        Example:
                            "1344642994.1"
                        
Reminders:
A list containing all reminders for all items in the project.
                        Example:
                        [
                            {"item_id": 12346, "service": "email", "minute_offset": 30}, ...
                        ]
                        
Collaborators:
An object containing all collaborators for all shared projects. The "projects" field contains the list of all shared projects, where the user acts as one of collaborators.
                        [
                            {
                             "avatar_big": "...",
                             "avatar_medium": "...",
                             "avatar_small": "...",
                             "email": "foo@example.com",
                             "full_name": "Foo",
                             "id": 228,
                             "image_id": null,
                             "timezone": "Europe/Kaliningrad"
                            },
                            ...
                        ]
                        
CollaboratorsStates:
A list specifying the state of each collaborator in each project. The state can be invited, active, inactive, deleted
                            [ { "project_id" : 1578355,
                                    "seq_no" : 190225,
                                    "state" : "active",
                                    "user_id" : 254900
                                  },
                                  { "project_id" : 1578355,
                                    "seq_no" : 190223,
                                    "state" : "active",
                                    "user_id" : 255476
                                  },
                                  { "project_id" : 1578350,
                                    "seq_no" : 190164,
                                    "state" : "inactive",
                                    "user_id" : 254900
                                  },
                                  { "project_id" : 1578350,
                                    "seq_no" : 190163,
                                    "state" : "deleted",
                                    "user_id" : 255476
                                  },
                                  ...
                            ]
                        
LiveNotifications:
A list of notifications for the user. On the initial request (seq_no=0) all notifications are returned. Afterwards only the updated.
For more info about notifications see our Standard API.
                        [
                            { "created" : 1385393856.28,
                                "from_uid" : 254900,
                                "is_deleted" : 0,
                                "item_id" : 11558557,
                                "meta_invitation_id" : null,
                                "note_id" : 3362,
                                "notification_key" : "note_added_3362",
                                "notification_type" : "note_added",
                                "project_id" : 1578355,
                                "seq_no" : 190270
                              },
                              { "created" : 1385393853.5899999,
                                "from_uid" : 254900,
                                "is_deleted" : 0,
                                "item_id" : 11558557,
                                "meta_invitation_id" : null,
                                "note_id" : 3360,
                                "notification_key" : "note_added_3360",
                                "notification_type" : "note_added",
                                "project_id" : 1578355,
                                "seq_no" : 190266
                              },

                              ...
                          ]
                        
LiveNotificationsLastRead:
What is the last seq_no the user has seen? This is used to implement unread notifications.
Settings:
Includes user's settings as a JSON object, including things like start page query and timezone information. Only included if seq_no is different.
                        Example:
                        {
                            "START_PAGE":"7 days, overdue",
                            "AMPM":false, "SORT_ORDER":0, "US_DATES":false,
                            "TIMEZONE":"America/Santiago"
                        }
                        
SettingsNotifications:
The same data as /API/getNotificationSettings returns. This is needed on platforms that implement native notifications. Only included if seq_no is different.
                        Example:
                        {
                            "user_removed_from_project": {"notify_push": true, "notify_email": true},
                            "item_completed": {"notify_push": true, "notify_email": true},
                            ...
                        }
                        

/TodoistSync/v5.3/sync

/TodoistSync/v5.3/sync takes a list of JSON object commands which specify which changes should be done to the model. These changes could be adding projects, deleting tasks, adding notes etc.

It supports two big features which can make syncing easier:

Required parameters:
items_to_sync:
A list of JSON object commands. These commands are specified later in the documentation.
                    Example:
                    [{
                         "type": "project_add",
                         "temp_id": "$1326467493134",
                         "timestamp": 1326467500523,
                         "args": {
                           "name": "Test",
                           "item_order": 1,
                           "indent": 1,
                           "color": 1
                         }
                      },
                      {
                         "type": "project_update",
                         "timestamp": 1326467500573,
                         "args": {
                           "id": "$1326467493134",
                           "name": "Test new",
                           "item_order": 5,
                           "color": 2
                         }
                    }]
                    
api_token:
User's API token (returned on successful login from /API/Users/login). Else the session cookie is used.
Curl example:
                    curl -X POST -d 'api_token=...&items_to_sync=[{ "type": "project_add", "temp_id": "$1326467493134", "timestamp": 1326467500523, "args": { "name": "Test", "item_order": 1, "indent": 1, "color": 1 } }]' https://api.todoist.com/TodoistSync/v5.3/sync
                    
Successful return:
HTTP 200 OK with a JSON object of temporary id to real id mappings:
                    {
                        "$1326467493134": 232323,
                        ...,
                        "$1326467493152": 2323234
                    }
                    
Error return:
Same as successful return, but with an extra errors mapping that specifies which commands were not processed correctly:
                    {
                        "$1326467493134": 232323,
                        ...,
                        {"errors": ["Could not be processed (ignored!): {'args': {'blah': 'blah'}, 'type': 'item_update'}"]},
                        ...,
                        "$1326467493152": 2323234
                    }
                    

/TodoistSync/v5.3/syncAndGetUpdated

syncAndGetUpdated is a combined call that syncs updates and fetches the latest data. This is useful because you don't have to do 2 requests.
Required parameters:
api_token:
User's API token (returned on successful login from /API/Users/login). Else the session cookie is used.
Optional parameters:
items_to_sync:
A list of JSON object commands. It's the items_to_sync parameter of /v5.3/sync call.
seq_no:
Sequence number. On the initial request you should pass 0. On all other requests you should pass the last seq_no you recieved from the server.
day_orders_timestamp:
A string value specifying when day_orders where last updated. It's the DayOrdersTimestamp parameter of /v5.3/get call. Please see that documentation for further details.
include_notification_settings:
Include notification settings (SettingsNotifications), the same data as /API/getNotificationSettings returns. This is needed on platforms that implement native notifications.
Curl example:
                        curl -X POST -d 'api_token=...&items_to_sync=[{ "type": "project_add", "temp_id": "$1326467493134", "timestamp": 1326467500523, "args": { "name": "Test", "item_order": 1, "indent": 1, "color": 1 } }]' https://api.todoist.com/TodoistSync/v5.3/syncAndGetUpdated
                    
Successful return:
HTTP 200 OK with a JSON object of temporary id to real id mappings:
                    {
                        "TempIdMapping": {
                            "$1326467493134": 232323,
                        },

                        "Projects": [
                            ... Data of the updated projects, same as  /v5.3/get ...
                        ],

                        "Items": [
                            ... Data of the updated items, same as  /v5.3/get ...
                        ],

                        "Settings": {
                            ... Same data as /v5.3/get ...
                        },

                        "SettingsNotifications": {
                            ...  (only if include_notification_settings is set)
                        .},

                        "User": {
                            ... Same data as /v5.3/get ...
                        },

                        "SyncErrors": [
                            ... Only set if some of the updates could not be processed ...
                        ],

                        "Labels":
                            ... Updated labels ...
                        ,

                        "Filters":
                            ... Updated filters ...
                        ,

                        "DayOrdersTimestamp":   "1833298299.1",
                        "DayOrders":
                            ... Only sent if DayOrdersTimestamp is sent and your DayOrdersTimestamp is different from the backends ...

                    }
                    

Why do I need to supply timestamps?

timestamp should be a unix timestamp of when the command was created. This is used for duplication protection, i.e. we want to ensure that same command isn't executed twice! This check works by keeping track of command types, temporary ids and timestamps. By just supplying timestamps the system does these checks automatically and will ignore duplicated commands!

How does temporary ids work?

Your application will use temporary ids and the Sync API has special support for them. We suggest that you use unix timestamps to generate these ids to give them uniquness (maybe also prefixing them with a special number). An example shows how temporary ids can be used and referenced:

            [{
              "type": "project_add",
              "temp_id": "$1326467493134",
              "args": {
                "name": "Test",
                "item_order": 1,
                "indent": 1,
                "color": 1
              },
              "timestamp": 1326467500523
            },
            {
              "type": "project_update",
              "args": {
                "id": "$1326467493134",
                "name": "Test new",
                "color": 2
              },
              "timestamp": 1326467500573
            }]
            

In the above example you can see that project_add command has a temp_id property - - which specifies which temporary id this new project has. project_update command later references this temporary id. The API will automatically resolve these ids.

Additionally /TodoistSync/v5.3/sync will return the real id of $1326467493134 in the result. Remember to update your local model with these real ids e.g.:

            {"$1326467493134": 21314212}
            

While the system remembers temporary ids and their mappings to real ids, it's important to use real ids when they are available to you (typically after a sync). This is important since the API only remembers the last 500 temporary ids for each user!

JSON object commands

Projects

project_add: Adding a project
                    {
                      "type": "project_add",
                      "temp_id": "$1326467493134",
                      "timestamp": 1326467500523,
                      "args": {
                        "name": "Test",
                        "color": 1,
                        "indent": 1,
                        "item_order": 1
                      }
                    }
                    
project_update: Updating a project
                    {
                      "type": "project_update",
                      "timestamp": 1326467976310,
                      "args": {
                        "name": "New name",
                        "indent": 1,
                        "color": 7,
                        "id": "$1326467493134"
                      }
                    }
                    
project_delete: Deleting projects
                    {
                      "type": "project_delete",
                      "timestamp": 1326468118911,
                      "args": {
                        "ids": [1272425]
                      }
                    }
                    
project_archive: Archive a project
Only available for premium users.
                    {
                      "type": "project_archive",
                      "timestamp": 1326468118912,
                      "args": {
                        "id": 1272426
                      }
                    }
                    
project_unarchive: Unarchive a project
Only available for premium users.
                    {
                    "type": "project_unarchive",
                      "timestamp": 1326468118913,
                      "args": {
                        "id": 1272426
                      }
                    }
                    
project_update_orders_indents: : Updating orders/indents of multiple projects at once
                    {
                       "type":"project_update_orders_indents",
                       "timestamp":1342922613464,
                       "args":{
                          "ids_to_orders_indents":"{\"15\":[22,2],\"1437\":[9,2],\"14681\":[26,2],\"20656\":[6,1],\"20657\":[8,2],\"20658\":[12,2],\"750222\":[10,2],\"1271770\":[23,1],\"1271816\":[27,1],\"1276938\":[21,1],\"1276944\":[25,1],\"1277096\":[24,1],\"1277097\":[2,1],\"1277098\":[3,1],\"1277099\":[1,1]}"
                       }
                    }
                    

Items

item_add: Adding a task
                    {
                      "type": "item_add",
                      "temp_id": "$1326468158202",
                      "timestamp": 1326468806307,
                      "args": {
                        "content": "Test",
                        "project_id": 1272426,
                        "indent": 1,
                        "priority": 1,
                        "date_string": "tom",
                        "due_date_utc": "2012-3-24T20:59",
                        "assigned_by_uid": 123,
                        "responsible_uid": 456,
                        "item_order": 1
                      }
                    }
                    
When passing date_string and due_date_utc they should be formatted as following:
  • date_string: Can be every day @ 10. Look at our reference to see which formats are supported
  • due_date_utc: Should be formatted as 'YYYY-M-DDT00:00', example: '2012-3-24T23:59'. Value of due_date_utc must be in UTC.
  • due_date: Alternative (backward compatible, not recommended) way of providing item due date. Format is the same as for due_date_utc, must be in UTC for due dates containing time fragments, and in the format 'YYYY-M-DDT23:59:59' (hardcoded timestamp) for whole-day entries.

If you want to pass in due dates note that date_string is required, while due_date_utc (due_date) can be omitted. If date_string is provided, it will be parsed as local timestamp, and converted to UTC internally, according to user profile settings.

Fields assigned_by_uid and responsible_uid are optional and make sense for shared projects only.

  • assigned_by_uid accepts 0 or any user id from the list of project collaborators. If value is unset or invalid it will automatically be set up by your uid.
  • responsible_uid accepts 0 or any user id from the list of project collaborators. If value is unset or invalid it will automatically be set up by null.

item_update: Updating a task
None of the properties are requried (i.e. you can only supply some of them). It's much fast to use item_update_orders_indents and item_update_day_orders if you need to do multiple updates of indents, item_orders or day_orders.
                    {
                      "type": "item_update",
                      "timestamp": 1326470294735,
                      "args": {
                        "content": "New task text",
                        "project_id": 1272426,
                        "indent": 1,
                        "priority": 1,
                        "date_string": "",
                        "due_date_utc": null,
                        "item_order": 5,
                        "day_order": 7,
                        "assigned_by_uid": 123,
                        "responsible_uid": 456,
                        "id": "$1326468158202"
                      }
                    }
                    
item_delete: Deleting tasks
                    {
                      "type": "item_delete",
                      "timestamp": 1326470379977,
                      "args": {
                        "ids": [11466961]
                      }
                    }
                    
item_move: Moving a task from one project to another
                    {
                      "type": "item_move",
                      "timestamp": 1326470524258,
                      "args": {
                        "project_items": {
                          "1272426": [11466963]
                        },
                        "to_project": 1272419
                      }
                    }
                    
item_complete: Completing a task
                    {
                      "type": "item_complete",
                      "timestamp": 1326470662137,
                      "args": {
                        "project_id": 1272426,
                        "ids": [11466964],
                        "force_history": 1
                      }
                    }
                    
item_uncomplete: Uncompleting a task
                    {
                      "type": "item_uncomplete",
                      "timestamp": 1326470707104,
                      "args": {
                        "project_id": 1272426,
                        "ids": [11466964],
                        "update_item_orders": 1
                      }
                    }
                    
item_uncomplete_update_meta: Restoring meta data about uncompleted items
ids_to_metas maps item_id: [in_history, checked, item_order].
                    {
                      "type": "item_uncomplete_update_meta",
                      "timestamp": 1326470707106,
                      {"args": {
                         "project_id": 1549556,
                         "ids_to_metas": "{\"11523968\": [0, 0, 1], \"11523969\": [0, 0, 2]}"
                      }
                    }
                    
item_update_date_complete: When completing/uncompleting a recurring task (needs special handling!)
                    {
                       "timestamp":1342920333612,
                       "args":{
                          "id":11482124,
                          "new_date_utc":"2012-7-25T23:59",
                          "date_string":"every day",
                          "is_forward":1
                       },
                       "type":"item_update_date_complete"
                    }
                    
is_forward indicates if it's a complete (1) or uncomplete (0). The reason why this is a special case is because we need to mark a recurring completion (and using item_update won't do this!) Argument new_date is a backward-compatible replacement for new_date_utc. It's treated the same way as due_date in item_update/item_add methods.
item_update_orders_indents: Updating orders/indents of multiple items at once
                    {
                       "type":"item_update_orders_indents",
                       "timestamp":1342920577620,
                       "args":{
                          "ids_to_orders_indents":"{\"11478113\":[2,1],\"11478114\":[1,1],\"11482125\":[4,1],\"11482126\":[3,1],\"11482127\":[5,1]}"
                       }
                    }
                    
item_update_day_orders: Updating day ordering on today or 7 days views
                    {
                       "type":"item_update_day_orders",
                       "timestamp":1342920577622,
                       "args":{
                          "ids_to_orders":"{\"11477867\":2,\"11478271\":3,\"11478272\":1}"
                       }
                    }
                    

Labels

label_register: Register a label
                    {
                      "type": "label_register",
                      "timestamp": 1326471017745,
                      "temp_id": "$1326470987640",
                      "args": {
                        "name": "home",
                        "color": 5
                      }
                    }
                    
label_delete: Delete a label
                    {
                      "type": "label_delete",
                      "timestamp": 1326471017756,
                      "args": {
                        "id": "$1326470987640"
                      }
                    }
                    
label_update: Updating a label
                    {
                      "type": "label_update",
                      "timestamp": 1326471017757,
                      "args": {
                          "id": "$1326470987640",
                          "name": "New name",
                          "color": 3
                      }
                    }
                    
name and color are optional (i.e. you can just update name or color).

Notes

Only available for premium users.
note_add: Add a note
Optionally args can take file_attachment (see example below).
                    {
                      "type": "note_add",
                      "timestamp": 1326471017748,
                      "temp_id": "$1326470987549",
                      "args": {
                        "item_id": "$1326470987649",
                        "content": "This is a test",
                        "file_attachment": {
                          "file_name": "document.txt",
                          "file_size": 1234,
                          "file_type": "text/plan",
                          "file_url": "http://example.com/path/to/document.txt",
                          "upload_state": "completed"
                        }
                      }
                    }
                    
note_update: Updating a note
Optionally args can take file_attachment (see example below).
                    {
                      "type": "note_update",
                      "timestamp": 1326471017749,
                      "args": {
                        "note_id": "$1326470987549",
                        "content": "This is a test",
                        "file_attachment": {
                          "file_name": "document.txt",
                          "file_size": 1234,
                          "file_type": "text/plan",
                          "file_url": "http://example.com/path/to/document.txt",
                          "upload_state": "completed"
                        }
                      }
                    }
                    
note_delete: Deleting a note
                    {
                      "type": "note_delete",
                      "timestamp": 1326471017759,
                      "args": {
                        "note_id": "$1326470987549",
                        "item_id": "$1326470987649"
                      }
                    }
                    
The "file_attachment" format

file_attachment attribute is a JSON object. The file attachment may point to a document, previously uploaded by the "/API/uploadFile" API method, or by any external resource. It has following attributes

Base attributes

file_name
The name of the file
file_size
The size of the file in bytes
file_type
MIME type
file_url
The URL where the file is located. Note that we don't cache the remote content on our servers and stream or expose files directly from third party resources. In particular this means that you should avoid providing links to non-encrypted (plain HTTP) respources, as exposing this files in Todoist may issue a browser warning.
upload_state
Upload completion state

Image attributes

If you upload an image, you may provide thumbnail paths to ensure Todoist handles them appropriately. Valid thumbnail information is a JSON array with URL, width in pixels, height in pixels. Ex.: ["http://example.com/img.jpg",400,300]. "Canonical" thumbnails (ones we create by /API/uploadFile API call) have following sizes: 96x96, 288x288, 528x528.

tn_l
Large thumbnail.
tn_m
Medium thumbnail.
tn_s
Small thumbnail.

Audio file attributes

If you upload an audio file, you may provide an extra attribute "file_duration" (duration of the audio file in seconds, integer). In the web interface the file is rendered back with a <audio> tag, so you should make sure it's supported in current web browsers. See supported media formats for the reference.

Filters

filter_add: Add a filter
                    {
                      "type": "filter_add",
                      "timestamp": 1426471017750,
                      "temp_id": "$1426470987550",
                      "args": {
                        "name": "Priority 1",
                        "query": "p1",
                        "item_order": 1
                      }
                    }
                    
filter_update: Update a filter
                    {
                      "type": "filter_update",
                      "timestamp": 1426471017751,
                      "args": {
                        "id": "$1426470987551",
                        "name": "Priority 2",
                        "query": "p2",
                      }
                    }
                    
filter_delete: Delete a filter
                    {
                      "type": "filter_delete",
                      "timestamp": 1426471017752,
                      "args": {
                        "id": "$1426470987551",
                      }
                    }
                    
filter_update_orders: Update orders of filters
                    {
                      "type": "filter_update_orders",
                      "timestamp": 1426471018852,
                      "args": {
                        "id_order_mapping":"{\"11477868\":1,\"11478274\":2,\"11478275\":3}"
                      }
                    }
                    

Reminders

Only available for premium users.

Every reminder has a notify_uid field which by default equals current user id. For shared projects reminder_add and reminder_update commands accept notify_uid when you can define any of id of this project collaborators.

reminder_add: Add a reminder
For a reminder with a relative timestamp (calculated as the offset from the item timestamp)
                    {
                      "type": "reminder_add",
                      "timestamp": 1426471017750,
                      "temp_id": "$1426470987550",
                      "args": {
                        "item_id": "$1326470987649",
                        "service": "email",
                        "minute_offset": 30
                      }
                    }
                    
For a reminder with an absolute timestamp. The due date should be converted to UTC timezone.
                    {
                      "type": "reminder_add",
                      "timestamp": 1426471017750,
                      "temp_id": "$1426470987550",
                      "args": {
                        "item_id": "$1326470987649",
                        "service": "email",
                        "due_date_utc": "2013-01-01T14:00",
                        "date_string": "tod @ 6pm"
                      }
                    }
                    
reminder_update: Update a reminder
                    {
                      "type": "reminder_update",
                      "timestamp": 1426471017751,
                      "args": {
                        "id": "$1426470987551",
                        "minute_offset": null,
                        "due_date_utc": "2013-01-01T15:00",
                        "date_string": "tod @ 7pm"
                      }
                    }
                    
reminder_delete: Delete a reminder
                    {
                      "type": "reminder_delete",
                      "timestamp": 1426471017752,
                      "args": {
                        "id": "$1426470987551",
                      }
                    }
                    

Live notifications

live_notifications_mark_as_read: Mark last read live notification
                {
                  "type": "live_notifications_mark_as_read",
                  "timestamp": 1426471017749,
                  "args": {
                    "seq_no": 2323232
                  }
                }
                

User

user_update: Update data of the logged in user
Supports the same arguments as /API/updateUser.
                {
                  "type": "user_update",
                  "timestamp": 1426471017751,
                  "args": {
                    "full_name": "Fluffy Dragon"
                  }
                }
                

Sharing

Commands related to sharing.
share_project: Share a project
The temp_id is the temporary id of the invited user.
                    {
                      "type": "share_project",
                      "temp_id": "$1426470987551",
                      "timestamp": 1426471017751,
                      "args": {
                        "project_id": "$1426470987551",
                        "message": "",
                        "email": "john@doe.com"
                      }
                    }
                    
delete_collaborator: Delete a person from a shared project
                    {
                      "type": "delete_collaborator",
                      "timestamp": 1426471017752,
                      "args": {
                        "project_id": "$1426470987551",
                        "email": "john@doe.com"
                      }
                    }
                    
accept_invitation: Accept an invitation
The secret can be fetched from the live notification.
                    {
                      "type": "accept_invitation",
                      "timestamp": 1426471017753,
                      "args": {
                        "invitation_id": 23232,
                        "invitation_secret": "2k3jsdkfjdkfjdf"
                      }
                    }
                    
reject_invitation: Reject an invitation
The secret can be fetched from the live notification.
                    {
                      "type": "reject_invitation",
                      "timestamp": 1426471017753,
                      "args": {
                        "invitation_id": 23232,
                        "invitation_secret": "2k3jsdkfjdkfjdf"
                      }
                    }
                    
delete_invitation: Delete an invitation
                    {
                      "type": "delete_invitation",
                      "timestamp": 1426471017753,
                      "args": {
                        "project_id": 23233
                      }
                    }
                    
take_ownership: Take the ownership of a shared project
                    {
                      "type": "take_ownership",
                      "timestamp": 1426471017753,
                      "args": {
                        "id": 23233
                      }
                    }
                    
biz_accept_invitation: Accept an invitation from Todoist for Business
The secret can be fetched from the live notification.
                    {
                      "type": "biz_accept_invitation",
                      "timestamp": 1426471017753,
                      "args": {
                        "invitation_id": 23232,
                        "invitation_secret": "2k3jsdkfjdkfjdf"
                      }
                    }
                    
biz_reject_invitation: Reject an invitation from Todoist for Business
The secret can be fetched from the live notification.
                    {
                      "type": "biz_reject_invitation",
                      "timestamp": 1426471017753,
                      "args": {
                        "invitation_id": 23232,
                        "invitation_secret": "2k3jsdkfjdkfjdf"
                      }
                    }