Skip to content
esc
Type to search. Use ↑ ↓ to move, ↵ to open.
Developers

API reference

The Trackr API is REST over HTTPS with JSON bodies, under /api/v1 of your instance. It is the same API the iOS app and the CLI use.

Updated 10 Sept 2026 beta 4 min read

Conventions #

  • Base URL: https://<your-instance>/api/v1 (for the hosted product, https://app.trackr.dev/api/v1).
  • Authentication: Authorization: Bearer <token>. See Authentication.
  • Bodies and responses are JSON. Dates are ISO 8601 strings; calendar-day inputs such as plannedFor and a time log's date are YYYY-MM-DD.
  • Endpoints that create tasks, tickets, comments, messages and threads also accept multipart/form-data with a payload field holding the JSON and one or more attachments file parts.
  • Errors return a JSON object with a message and an HTTP status: 400 invalid input, 401 no session, 403 no permission, 404 not found or not visible.
  • Every endpoint enforces the same permissions as the web app.
list-my-tasks.sh bash
curl "https://app.trackr.dev/api/v1/tasks?scope=mine" \
  -H "Authorization: Bearer $TRACKR_TOKEN"
response json
{
	"tasks": [
		{
			"id": "SCM-1",
			"uuid": "7a4d…",
			"title": "Prepare CAD models for the fair",
			"status": "todo",
			"priority": "high",
			"type": "task",
			"estimate": 360,
			"due": "2026-09-12",
			"project": "3b9a…",
			"assignees": ["9c1e…"]
		}
	],
	"users": { "9c1e…": { "name": "Ertugul Kilic", "color": "#ff4867" } }
}

In list rows id is the human-readable reference and uuid the database id; use the uuid wherever a path expects :id. Assignees are user ids; the users map carries their display names.

Session #

MethodPathDescription
GET/instanceUnauthenticated probe. Returns { name, version, api, branding }.
GET/me{ user, capabilities, orgs, unreadCount, instances }.
GET PATCH/me/preferencesResolved preferences as { preferences }. PATCH merges a partial object.
PATCH/me/profileUpdate name and image.
GET POST/me/viewsSaved views / filters per page, shared with the web app. POST body { key, patch }.
GET/eventsServer-sent events stream. Emits invalidation hints (entity, inbox).
GET/search?q=Global search across tickets, tasks, projects, wiki and notes as { results }. Optional types, orgId.

Inbox #

MethodPathDescription
GET/inboxCursor-paged notification feed. Optional limit (≤ 100) and filter=unread.
GET/inbox/badgeUnread count only, as { unread }.
POST/inbox/readBody { all: true }, { id } or { entityType, entityId }.

Tasks #

MethodPathDescription
GET/tasks?scope=mine\|allList tasks as { tasks, users }. Default scope mine.
POST/tasksCreate. Body: title, projectKey, description, status, priority, type, due, estimate, tags, assigneeIds, dependsOnIds, plannedFor. Returns 201 { id, displayId }.
GET/tasks/:id{ task, attachments, authors, assignableUsers, canEdit, canComment }.
PATCH/tasks/:idUpdate any editable field, including checklist and dependsOnIds.
DELETE/tasks/:idDelete (requires project.tasks.delete.any).
POST/tasks/:id/commentsAdd a comment: { body }.
POST/tasks/:id/timeLog time: { minutes, date, note }.

Tickets #

MethodPathDescription
GET/tickets?segment=mine\|watched\|all&status=List tickets by last activity.
POST/ticketsCreate: { orgId, subject, description? }; agents may also set priority, category, assigneeIds. Returns 201 { id, displayId }.
GET/tickets/:idDetail with the full message timeline, attachments, linkedTasks and canInternalNote.
PATCH/tickets/:idAgent-only: status, priority, category, assigneeIds, tags.
DELETE/tickets/:idDelete.
POST/tickets/:id/messagesPublic reply, or { internal: true } for a staff note.
PUT/tickets/:id/checklistReplace the whole checklist array.
POST/tickets/:id/tasksConvert into a linked project task (team only).

Projects #

MethodPathDescription
GET/projectsProjects you can see.
GET/projects/:idProject summary.
GET POST/projects/:id/activityHistory feed as plain text, paged with offset; POST { body } adds a project comment.

Chat, notes, wiki #

MethodPathDescription
GET POST/chat/threads?orgId=Thread feed with tags and unread ids; POST { orgId, title, body }.
GET/chat/threads/:idMessages; marks the thread read.
POST/chat/threads/:id/messagesReply.
POST/notesQuick note: { title, body? } (internal team only).
GET/notes/list{ quick, meetings, shared } (internal team only).
GET/notes/:idRead a note (internal team only).
GET/wikiFlat tree as { pages }: id, parentId, title, icon, isFolder, sortOrder (internal team only).
GET/wiki/:id{ page } with the rendered bodyHtml (internal team only).

Devices #

MethodPathDescription
POST DELETE/push/tokensRegister { token, platform, deviceName? } or remove { token } a device token. platform: ios, android, ios-live-activity.

Meeting notes linked to a task are served outside /api/v1 at GET /api/tasks/:uuid/meetings (session token only, internal team).

Edit this page on GitHub