API Reference

The Throw It On The List site exposes a full REST API under the tiotl/v1 namespace. All routes are mounted at /wp-json/tiotl/v1/ on this site.

Authentication

Most endpoints require an authenticated user. Authentication is handled through the following mechanisms:

  • Cookie + Nonce — Used by the in-app frontend. Pass the X-WP-Nonce header (available in JS as tiotlData.nonce).
  • Application Passwords — Used by external integrations. Generate one via POST /applications and authenticate with HTTP Basic Auth.

Permission tiers used throughout the API:

  • Public — No authentication required.
  • Logged in — Any authenticated user.
  • List viewer — Read access to a specific list (owner, editor, viewer, or valid link/password share).
  • List editor — Write access to a list (owner or editor role).
  • List owner — Owner-only operations (settings, sharing, deletion).

Lists

Manage titl_list CPT entries — the top-level container for tasks.

MethodRouteDescriptionAuth
GET/listsList all lists accessible to the current user.Logged in
POST/listsCreate a new list. Body: title (required), description, color, icon, visibility, default_view, password_viewer, password_editor.Logged in
GET/lists/{id}Retrieve a single list.List viewer
PUT/PATCH/lists/{id}Update list metadata.List owner
DELETE/lists/{id}Permanently delete a list (cascades to states, items, activity).List owner
POST/lists/{id}/share/inviteInvite a user by username/email with a role.List owner
PATCH/lists/{id}/share/members/{user_id}Update a member’s role.List owner
DELETE/lists/{id}/share/members/{user_id}Remove a member from a list.List owner
POST/lists/{id}/share/tokenGenerate a public share token. Body: access (viewer or editor).List owner
POST/lists/{id}/unlockUnlock a password-protected list. Body: password.Public

States

Manage titl_state CPT entries — the kanban columns / workflow stages within a list.

MethodRouteDescriptionAuth
GET/lists/{list_id}/statesRetrieve all states for a list.List viewer
POST/lists/{list_id}/statesCreate a state. Body: name (required), color, icon, order, is_default, is_complete.List owner
PUT/PATCH/lists/{list_id}/states/{state_id}Update state name, color, icon, default, or complete flags.List owner
DELETE/lists/{list_id}/states/{state_id}Delete a state. Body: migrate_to_state_id if the state contains items.List owner
PUT/lists/{list_id}/states/reorderPersist column order. Body: order (array of state IDs).List owner

Items

Manage titl_item CPT entries — the individual tasks. Items belong to a list and live in a state.

MethodRouteDescriptionAuth
GET/lists/{list_id}/itemsList items in a list. Query: state_id, priority, tag, assignee, due, search, page, per_page.List viewer
POST/lists/{list_id}/itemsCreate an item. Body: title (required), description, state_id, priority_id, assignees, due_date.List editor
GET/lists/{list_id}/items/{item_id}Retrieve a single item.List viewer
PUT/PATCH/lists/{list_id}/items/{item_id}Update an item’s fields.List editor
DELETE/lists/{list_id}/items/{item_id}Delete an item permanently (cascades to attachments and comments).List owner
POST/lists/{list_id}/items/{item_id}/moveMove an item to a different state. Body: state_id.List editor
POST/lists/{list_id}/items/reorderReorder items within a state. Body: state_id, order.List editor
POST/lists/{list_id}/items/{item_id}/attachmentsUpload an image attachment (multipart).List editor
DELETE/lists/{list_id}/items/{item_id}/attachments/{attachment_id}Remove an image attachment.List editor
POST/lists/{list_id}/items/{item_id}/filesUpload a file attachment (multipart).List editor
DELETE/lists/{list_id}/items/{item_id}/files/{attachment_id}Remove a file attachment.List editor

My Items

Cross-list view of items assigned to the current user.

MethodRouteDescriptionAuth
GET/items/assignedItems assigned to current user across every list. Query: state_id, priority, tag, due, search, page, per_page.Logged in

Priorities

List-scoped titl_priority taxonomy terms.

MethodRouteDescriptionAuth
POST/lists/{list_id}/prioritiesCreate a priority. Body: name (required), color.List owner
PATCH/lists/{list_id}/priorities/{term_id}Update name and/or color.List owner
PUT/lists/{list_id}/priorities/reorderPersist priority order. Body: order (array of term IDs).List owner

Activity

Read the activity feed stored in the {prefix}titl_activity table.

MethodRouteDescriptionAuth
GET/lists/{id}/activityPaginated activity feed. Query: page, per_page (max 50).List viewer
GET/lists/{id}/activity/latestLatest activity ID — used for cheap freshness polling.List viewer

Notifications

In-app notification feed and per-user notification preferences.

MethodRouteDescriptionAuth
GET/notificationsRetrieve current user’s notifications.Logged in
GET/notifications/latestLatest notification ID + unread count for polling.Logged in
POST/notifications/{id}/readMark a single notification as read.Logged in
POST/notifications/read-allMark every notification as read.Logged in
GET/notifications/preferencesGet the current user’s notification preferences.Logged in
POST/notifications/preferencesUpdate preferences. Body: assigned, comment, invited, due_soon (booleans).Logged in

Invitations

Accept or decline pending list invitations.

MethodRouteDescriptionAuth
GET/invitations/pendingRetrieve pending invitations for the current user.Logged in
POST/invitations/{token}/acceptAccept a list invitation by token.Logged in
POST/invitations/{token}/declineDecline a list invitation by token.Logged in

Preferences

Per-user app preferences (default list, page URL map).

MethodRouteDescriptionAuth
GET/preferencesGet current user’s preferences.Logged in
PUT/PATCH/preferencesUpdate preferences. Body: default_list_id.Logged in

Profile

Read and update the current user’s WordPress profile.

MethodRouteDescriptionAuth
GET/profileGet the current user’s profile (name, email, avatar).Logged in
POST/profileUpdate profile. Body: first_name, last_name, display_name, email, current_password, new_password. Email and password changes require current_password.Logged in

Applications

Manage WordPress Application Passwords for the current user — used by external integrations to authenticate against the TIOTL API.

MethodRouteDescriptionAuth
GET/applicationsList the current user’s application passwords.Logged in
POST/applicationsCreate a new application password. Body: name (required), app_id (optional UUID).Logged in
DELETE/applications/{uuid}Revoke an application password.Logged in

Reference

  • REST namespace: tiotl/v1
  • Visibility values: private, invite, link, password
  • List role values: owner, editor, viewer
  • Default view values: checklist, kanban
  • CPT slugs: titl_list, titl_state, titl_item
  • Taxonomy slugs: titl_tag, titl_priority