Developer Docs

REST API Reference

Complete reference for every REST endpoint. All requests use JSON and require a Bearer token unless noted otherwise.

REST API Reference

Base URL: https://api.trcr.pro/api/v1

All endpoints return JSON. Include the access token in the Authorization header:

Authorization: Bearer YOUR_ACCESS_TOKEN

Authentication

POST/auth/register

Create a new user account and receive tokens.

ParameterTypeRequiredDescription
emailstringRequiredUser email address
passwordstringRequiredMinimum 8 characters
namestringRequiredFull name
curl -X POST https://api.trcr.pro/api/v1/auth/register \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"secret123","name":"Jane Doe"}'
POST/auth/login

Authenticate with email and password.

ParameterTypeRequiredDescription
emailstringRequiredUser email
passwordstringRequiredUser password
curl -X POST https://api.trcr.pro/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com","password":"secret123"}'
POST/auth/refresh

Exchange a refresh token for a new access token. The old refresh token is invalidated.

ParameterTypeRequiredDescription
refresh_tokenstringRequiredCurrent refresh token
curl -X POST https://api.trcr.pro/api/v1/auth/refresh \
  -H "Content-Type: application/json" \
  -d '{"refresh_token":"REFRESH_TOKEN"}'
POST/auth/logout

Invalidate the refresh token.

ParameterTypeRequiredDescription
refresh_tokenstringRequiredRefresh token to invalidate
curl -X POST https://api.trcr.pro/api/v1/auth/logout \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"refresh_token":"REFRESH_TOKEN"}'
POST/auth/forgot-password

Initiate a password reset. Sends a reset link to the given email if an account exists.

ParameterTypeRequiredDescription
emailstringRequiredAccount email address
curl -X POST https://api.trcr.pro/api/v1/auth/forgot-password \
  -H "Content-Type: application/json" \
  -d '{"email":"user@example.com"}'
POST/auth/reset-password

Complete a password reset using the token from the reset email.

ParameterTypeRequiredDescription
tokenstringRequiredReset token from email link
passwordstringRequiredNew password (min 8 characters)
curl -X POST https://api.trcr.pro/api/v1/auth/reset-password \
  -H "Content-Type: application/json" \
  -d '{"token":"RESET_TOKEN","password":"newSecurePass123"}'
POST/auth/verify-email

Verify an email address using the token from the verification email.

ParameterTypeRequiredDescription
tokenstringRequiredVerification token from email
curl -X POST https://api.trcr.pro/api/v1/auth/verify-email \
  -H "Content-Type: application/json" \
  -d '{"token":"VERIFY_TOKEN"}'

User Profile

GET/users/me

Get the authenticated user's profile.

curl https://api.trcr.pro/api/v1/users/me -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/users/me

Update the authenticated user's profile.

ParameterTypeRequiredDescription
namestringOptionalFull name
timezonestringOptionalIANA timezone (e.g. America/New_York)
curl -X PUT https://api.trcr.pro/api/v1/users/me \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Jane Smith","timezone":"America/New_York"}'
POST/users/me/avatar/upload

Upload a new avatar image. Accepts multipart/form-data.

ParameterTypeRequiredDescription
filebinaryRequiredImage file (PNG, JPEG, WebP)
curl -X POST https://api.trcr.pro/api/v1/users/me/avatar/upload \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -F "file=@avatar.png;type=image/png"
DELETE/users/me/avatar

Remove the user's avatar.

curl -X DELETE https://api.trcr.pro/api/v1/users/me/avatar -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/users/me/password

Change the authenticated user's password.

ParameterTypeRequiredDescription
current_passwordstringRequiredCurrent password
new_passwordstringRequiredNew password (min 8 characters)
curl -X PUT https://api.trcr.pro/api/v1/users/me/password \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"current_password":"oldPass123","new_password":"newPass456"}'

Organizations

GET/organizations

List all organizations the authenticated user belongs to.

curl https://api.trcr.pro/api/v1/organizations -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/organizations

Create a new organization.

ParameterTypeRequiredDescription
namestringRequiredOrganization name
slugstringOptionalURL-friendly slug (auto-generated if omitted)
curl -X POST https://api.trcr.pro/api/v1/organizations \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Acme Corp"}'
GET/organizations/:id

Get a single organization by ID.

curl https://api.trcr.pro/api/v1/organizations/org_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/organizations/:id

Update an organization. Requires admin role.

ParameterTypeRequiredDescription
namestringOptionalNew name
slugstringOptionalNew slug
settingsobjectOptionalOrganization settings (timezone, currency, etc.)
curl -X PUT https://api.trcr.pro/api/v1/organizations/org_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Acme Corporation","settings":{"currency":"USD","timezone":"America/New_York"}}'
DELETE/organizations/:id

Delete an organization. Requires owner role. This is irreversible.

curl -X DELETE https://api.trcr.pro/api/v1/organizations/org_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/organizations/:id/logo/upload

Upload an organization logo. Accepts multipart/form-data.

ParameterTypeRequiredDescription
filebinaryRequiredImage file (PNG, JPEG, WebP)
curl -X POST https://api.trcr.pro/api/v1/organizations/org_abc123/logo/upload \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -F "file=@logo.png;type=image/png"
DELETE/organizations/:id/logo

Remove the organization logo.

curl -X DELETE https://api.trcr.pro/api/v1/organizations/org_abc123/logo -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Projects

GET/projects

List all projects in the current organization.

ParameterTypeRequiredDescription
pagenumberOptionalPage number (default 1)
per_pagenumberOptionalItems per page (default 25, max 100)
statusstringOptionalFilter by status: active, archived
searchstringOptionalSearch by project name
curl "https://api.trcr.pro/api/v1/projects?status=active&per_page=10" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/projects

Create a new project.

ParameterTypeRequiredDescription
namestringRequiredProject name
descriptionstringOptionalProject description
client_idstringOptionalAssociated client ID
colorstringOptionalHex color code
billablebooleanOptionalWhether time entries are billable (default true)
hourly_ratenumberOptionalDefault hourly rate in cents
curl -X POST https://api.trcr.pro/api/v1/projects \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Website Redesign","client_id":"cli_abc","billable":true,"hourly_rate":15000}'
GET/projects/:id

Get a single project.

curl https://api.trcr.pro/api/v1/projects/prj_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/projects/:id

Update a project.

ParameterTypeRequiredDescription
namestringOptionalProject name
descriptionstringOptionalDescription
statusstringOptionalactive or archived
client_idstringOptionalClient ID
colorstringOptionalHex color
billablebooleanOptionalBillable flag
hourly_ratenumberOptionalHourly rate in cents
curl -X PUT https://api.trcr.pro/api/v1/projects/prj_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"archived"}'
DELETE/projects/:id

Delete a project and all associated data.

curl -X DELETE https://api.trcr.pro/api/v1/projects/prj_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/projects/:id/members

List members assigned to a project.

curl https://api.trcr.pro/api/v1/projects/prj_abc123/members -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/projects/:id/members

Add a member to a project.

ParameterTypeRequiredDescription
user_idstringRequiredUser ID to add
rolestringOptionalProject role: manager, member (default member)
curl -X POST https://api.trcr.pro/api/v1/projects/prj_abc123/members \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"user_id":"usr_xyz","role":"member"}'
DELETE/projects/:id/members/:userId

Remove a member from a project.

curl -X DELETE https://api.trcr.pro/api/v1/projects/prj_abc123/members/usr_xyz -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Project Statistics

GET/projects/stats

Get task counts (total and done) for all projects in the organization.

curl https://api.trcr.pro/api/v1/projects/stats -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Dashboard Summary

GET/dashboard/summary

Get a dashboard summary for the current user: total tasks, completed tasks, overdue count, and overdue urgent tasks.

curl https://api.trcr.pro/api/v1/dashboard/summary -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Tasks

Tasks may carry an optional start_date and due_date (both nullable, formatted YYYY-MM-DD). start_date is the task's start and due_date is its end — together they render a task as a start→due bar on the Gantt chart. Both fields are included in the task response. start_date must be on or before due_date; otherwise the request fails with 400 Bad Request and the message start_date must be on or before due_date.

GET/tasks

List tasks with filtering and pagination.

ParameterTypeRequiredDescription
project_idstringOptionalFilter by project
assignee_idstringOptionalFilter by assignee
statusstringOptionalFilter: open, in_progress, done, closed
prioritystringOptionalFilter: low, medium, high, urgent
label_idsstringOptionalComma-separated label IDs
group_idstringOptionalFilter by task group
searchstringOptionalFull-text search
pagenumberOptionalPage number
per_pagenumberOptionalItems per page (max 100)
sortstringOptionalSort: created_at, updated_at, priority, position
orderstringOptionalasc or desc
curl "https://api.trcr.pro/api/v1/tasks?project_id=prj_abc&status=open&sort=priority&order=desc" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/tasks

Create a new task.

ParameterTypeRequiredDescription
titlestringRequiredTask title
descriptionstringOptionalMarkdown description
project_idstringRequiredProject ID
assignee_idstringOptionalAssigned user ID
statusstringOptionalInitial status (default open)
prioritystringOptionallow, medium, high, urgent (default medium)
start_datestringOptionalISO 8601 date (YYYY-MM-DD). The task start; must be on or before due_date
due_datestringOptionalISO 8601 date (YYYY-MM-DD). The task end
label_idsstring[]OptionalArray of label IDs
estimated_hoursnumberOptionalEstimated hours
group_idstringOptionalTask group ID
complexitynumberOptionalComplexity: 1 (trivial), 2 (easy), 3 (medium), 5 (hard), 8 (complex)
progressnumberOptionalProgress percentage (0-100)
curl -X POST https://api.trcr.pro/api/v1/tasks \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Implement login page",
    "project_id": "prj_abc",
    "assignee_id": "usr_xyz",
    "priority": "high",
    "start_date": "2026-04-01",
    "due_date": "2026-04-15"
  }'
GET/tasks/:id

Get a single task with all details.

curl https://api.trcr.pro/api/v1/tasks/tsk_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/tasks/:id

Update a task. Only provided fields are changed.

ParameterTypeRequiredDescription
titlestringOptionalTask title
descriptionstringOptionalMarkdown description
statusstringOptionalopen, in_progress, done, closed
prioritystringOptionallow, medium, high, urgent
assignee_idstringOptionalAssigned user ID (null to unassign)
start_datestringOptionalISO 8601 date (null to remove). Must be on or before due_date
due_datestringOptionalISO 8601 date (null to remove)
label_idsstring[]OptionalReplace all labels
estimated_hoursnumberOptionalEstimated hours
group_idstringOptionalTask group ID (moves task to group)
complexitynumberOptionalComplexity: 1, 2, 3, 5, 8 (null to clear)
progressnumberOptionalProgress percentage 0-100
curl -X PUT https://api.trcr.pro/api/v1/tasks/tsk_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"done","priority":"low"}'
DELETE/tasks/:id

Delete a task.

curl -X DELETE https://api.trcr.pro/api/v1/tasks/tsk_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Task Comments

GET/tasks/:id/comments

List comments on a task.

curl https://api.trcr.pro/api/v1/tasks/tsk_abc123/comments -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/tasks/:id/comments

Add a comment to a task.

ParameterTypeRequiredDescription
bodystringRequiredComment text (Markdown supported)
curl -X POST https://api.trcr.pro/api/v1/tasks/tsk_abc123/comments \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"body":"Looks good, merging now."}'
DELETE/tasks/:id/comments/:commentId

Delete a comment. Only the author or an admin can delete.

curl -X DELETE https://api.trcr.pro/api/v1/tasks/tsk_abc123/comments/cmt_xyz -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Task Checklists

Each checklist item is a single row with a title, completed flag, and position. Items are created individually via POST, toggled via PUT .../toggle, and removed via DELETE.

GET/tasks/:id/checklists

List checklist items for a task, ordered by position.

curl https://api.trcr.pro/api/v1/tasks/tsk_abc123/checklists -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/tasks/:id/checklists

Create a checklist item on a task. Requires manage_tasks permission.

ParameterTypeRequiredDescription
titlestringRequiredItem text (max 255 characters)
curl -X POST https://api.trcr.pro/api/v1/tasks/tsk_abc123/checklists \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Write unit tests"}'
PUT/tasks/checklists/:itemId/toggle

Toggle a checklist item between completed and not completed. Any org member may call this — no manage_tasks permission required.

curl -X PUT https://api.trcr.pro/api/v1/tasks/checklists/chk_item_001/toggle -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
DELETE/tasks/checklists/:itemId

Delete a checklist item. Requires manage_tasks permission.

curl -X DELETE https://api.trcr.pro/api/v1/tasks/checklists/chk_item_001 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Task Dependencies

Dependencies model blocked/blocks relationships between tasks. The dependency_type field is either blocks (the current task blocks depends_on_id) or blocked_by (the current task is blocked by depends_on_id).

GET/tasks/:id/dependencies

List all dependencies for a task (both directions). Each item includes a nested depends_on task object.

curl https://api.trcr.pro/api/v1/tasks/tsk_abc123/dependencies -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/tasks/:id/dependencies

Add a dependency link. Requires manage_tasks permission.

ParameterTypeRequiredDescription
depends_on_idstringRequiredID of the related task
dependency_typestringRequiredblocks or blocked_by
curl -X POST https://api.trcr.pro/api/v1/tasks/tsk_abc123/dependencies \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"depends_on_id":"tsk_xyz789","dependency_type":"blocked_by"}'
DELETE/tasks/:id/dependencies/:dependencyId

Remove a dependency link by its dependency record ID. Requires manage_tasks permission.

curl -X DELETE https://api.trcr.pro/api/v1/tasks/tsk_abc123/dependencies/dep_001 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/task-dependencies

List every task dependency in the organization in a single call — useful for rendering the Gantt chart without one request per task. Requires org membership; returns only edges where both endpoint tasks are visible to the caller (admins see all; members see edges within their accessible projects).

curl https://api.trcr.pro/api/v1/task-dependencies -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Each item is { id, task_id, depends_on_id, dependency_type, created_at } where dependency_type is blocks or blocked_by. Unlike the per-task endpoint, the bulk list omits the nested depends_on task object.

Task Labels

POST/tasks/:id/labels

Add a label to a task.

ParameterTypeRequiredDescription
label_idstringRequiredLabel ID
curl -X POST https://api.trcr.pro/api/v1/tasks/tsk_abc123/labels \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"label_id":"lbl_bug"}'
DELETE/tasks/:id/labels/:labelId

Remove a label from a task.

curl -X DELETE https://api.trcr.pro/api/v1/tasks/tsk_abc123/labels/lbl_bug -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Task Status

PUT/tasks/:id/status

Update only the status of a task. Triggers email and in-app notifications for the task reporter and all assignees (excluding the user who made the change). Requires manage_tasks permission.

ParameterTypeRequiredDescription
statusstringRequiredNew status: open, in_progress, done, closed
curl -X PUT https://api.trcr.pro/api/v1/tasks/tsk_abc123/status \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"status":"done"}'

When this endpoint is called, the task reporter and all assignees (except the caller) receive a task_status_changed in-app notification and an email (if email notifications are enabled for that type). The notification's datafield includes a link property in the format /tasks?task=TASK_IDwhich opens the task detail panel directly when navigated to in the app.

Task Reorder

PUT/tasks/:id/reorder

Move a task to a specific position within its group or column. Requires manage_tasks permission.

ParameterTypeRequiredDescription
positionintegerRequiredNew 0-based position index
group_idstringOptionalMove to a different task group (optional)
curl -X PUT https://api.trcr.pro/api/v1/tasks/tsk_abc123/reorder \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"position":2}'

Task Groups

Task groups organize tasks into columns or sections within a project board. Each project can have multiple groups, and tasks are assigned to a group via their group_id.

GET/projects/:id/task-groups

List all task groups for a project, ordered by position.

curl https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/projects/:id/task-groups

Create a new task group in a project.

ParameterTypeRequiredDescription
namestringRequiredGroup name
curl -X POST https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Backlog"}'
PUT/projects/:id/task-groups/:groupId

Update a task group.

ParameterTypeRequiredDescription
namestringOptionalNew group name
curl -X PUT https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups/grp_001 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Sprint Backlog"}'
DELETE/projects/:id/task-groups/:groupId

Delete a task group. Tasks in this group are moved to the default group.

curl -X DELETE https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups/grp_001 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/projects/:id/task-groups/reorder

Reorder all task groups within a project.

ParameterTypeRequiredDescription
orderstring[]RequiredArray of group IDs in the desired order
curl -X PUT https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups/reorder \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"order":["grp_002","grp_001","grp_003"]}'

Collapsed Task Groups

Track which task groups the user has collapsed on their board. This state is per-user, per-project.

GET/projects/:id/task-groups/collapsed

Get the list of collapsed task group IDs for the current user.

curl https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups/collapsed -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/projects/:id/task-groups/collapsed/bulk

Set the full list of collapsed task groups for the current user (replaces previous state). Maximum 200 group IDs.

ParameterTypeRequiredDescription
group_idsstring[]RequiredArray of group IDs to mark as collapsed
curl -X PUT https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups/collapsed/bulk \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"group_ids":["grp_001","grp_003"]}'
POST/projects/:id/task-groups/:groupId/toggle-collapsed

Toggle a single task group's collapsed state for the current user.

curl -X POST https://api.trcr.pro/api/v1/projects/prj_abc123/task-groups/grp_001/toggle-collapsed -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Task Statuses

Custom task statuses let you define your own workflow pipeline per organization. Each status has a code, label, color, position, and optional workflow automation (terminal state, auto-advance, next-status transitions).

GET/task-statuses

List all custom task statuses in the organization, ordered by position.

curl https://api.trcr.pro/api/v1/task-statuses -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/task-statuses

Create a custom task status.

ParameterTypeRequiredDescription
codestringRequiredUnique status code (e.g. qa_review)
labelstringRequiredDisplay label (e.g. QA Review)
colorstringRequiredHex color code
is_terminalbooleanOptionalMark as a done/completed state (default false)
supports_progressbooleanOptionalAllow progress tracking in this status (default false)
progress_editablebooleanOptionalAllow users to manually edit progress (default false)
on_completestringOptionalAction when progress hits 100%: auto_advance or none
next_status_codestringOptionalCode of the next status in the pipeline
curl -X POST https://api.trcr.pro/api/v1/task-statuses \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"code":"qa_review","label":"QA Review","color":"#8b5cf6","supports_progress":true,"on_complete":"auto_advance","next_status_code":"done"}'
PUT/task-statuses/:id

Update a task status.

ParameterTypeRequiredDescription
labelstringOptionalDisplay label
colorstringOptionalHex color
is_terminalbooleanOptionalDone state flag
supports_progressbooleanOptionalProgress tracking
on_completestringOptionalauto_advance or none
next_status_codestringOptionalNext status code
curl -X PUT https://api.trcr.pro/api/v1/task-statuses/ts_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"label":"Code Review","color":"#6366f1"}'
DELETE/task-statuses/:id

Delete a custom task status. Tasks using this status are moved to the default status.

curl -X DELETE https://api.trcr.pro/api/v1/task-statuses/ts_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/task-statuses/reorder

Reorder task statuses.

ParameterTypeRequiredDescription
orderstring[]RequiredArray of status IDs in the desired order
curl -X POST https://api.trcr.pro/api/v1/task-statuses/reorder \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"order":["ts_001","ts_002","ts_003"]}'

Task Recurrences

Recurring tasks automatically create a new task when the current one is completed. Define a recurrence pattern (daily, weekly, monthly, or custom cron) on any task.

POST/tasks/:id/recurrence

Create a recurrence rule for a task.

ParameterTypeRequiredDescription
recurrence_patternstringRequiredPattern: daily, weekly, monthly, or a cron expression
curl -X POST https://api.trcr.pro/api/v1/tasks/tsk_abc123/recurrence \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"recurrence_pattern":"weekly"}'
GET/tasks/:id/recurrence

Get the recurrence rule for a task.

curl https://api.trcr.pro/api/v1/tasks/tsk_abc123/recurrence -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/recurrences/:id

Update a recurrence rule.

ParameterTypeRequiredDescription
recurrence_patternstringOptionalNew pattern: daily, weekly, monthly, or cron expression
curl -X PUT https://api.trcr.pro/api/v1/recurrences/rec_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"recurrence_pattern":"monthly"}'
DELETE/recurrences/:id

Stop a recurrence. The current task remains but no new occurrences will be created.

curl -X DELETE https://api.trcr.pro/api/v1/recurrences/rec_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Time Entries

POST/time-entries/start

Start a new timer. Only one timer can be active per user.

ParameterTypeRequiredDescription
project_idstringOptionalProject ID (nullable)
task_idstringOptionalTask ID
descriptionstringOptionalWhat are you working on?
billablebooleanOptionalOverride project billable setting
curl -X POST https://api.trcr.pro/api/v1/time-entries/start \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"project_id":"prj_abc","description":"Working on API docs"}'
POST/time-entries/:id/stop

Stop the running timer by its ID and finalize the time entry.

curl -X POST https://api.trcr.pro/api/v1/time-entries/te_abc123/stop -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/time-entries

List time entries with filters.

ParameterTypeRequiredDescription
project_idstringOptionalFilter by project
user_idstringOptionalFilter by user
fromstringOptionalStart date (ISO 8601)
tostringOptionalEnd date (ISO 8601)
billablebooleanOptionalFilter by billable status
runningbooleanOptionalFilter running timers only
pagenumberOptionalPage number
per_pagenumberOptionalItems per page
curl "https://api.trcr.pro/api/v1/time-entries?from=2026-03-01&to=2026-03-31&project_id=prj_abc" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/time-entries

Create a manual time entry (not using the timer). Both started_at and stopped_at are required.

ParameterTypeRequiredDescription
project_idstringOptionalProject ID
task_idstringOptionalTask ID
descriptionstringOptionalDescription
started_atstringRequiredISO 8601 datetime
stopped_atstringRequiredISO 8601 datetime
billablebooleanOptionalBillable flag
hourly_ratenumberOptionalOverride hourly rate (decimal)
curl -X POST https://api.trcr.pro/api/v1/time-entries \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "project_id": "prj_abc",
    "description": "Client meeting",
    "started_at": "2026-03-28T09:00:00Z",
    "stopped_at": "2026-03-28T10:30:00Z",
    "billable": true
  }'
PUT/time-entries/:id

Update a time entry. To explicitly clear project_id or task_id, pass null.

ParameterTypeRequiredDescription
descriptionstringOptionalDescription
project_idstring | nullOptionalProject ID (null to clear)
task_idstring | nullOptionalTask ID (null to clear)
started_atstringOptionalStart time (ISO 8601)
stopped_atstringOptionalEnd time (ISO 8601)
billablebooleanOptionalBillable flag
hourly_ratenumberOptionalOverride hourly rate
curl -X PUT https://api.trcr.pro/api/v1/time-entries/te_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"description":"Updated description","billable":false,"started_at":"2026-03-28T09:00:00Z","stopped_at":"2026-03-28T10:30:00Z"}'
GET/time/current

Get the currently running timer for the authenticated user. Returns null if no timer is active.

curl https://api.trcr.pro/api/v1/time/current -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/time-entries/:id

Get a single time entry by ID. Admins may fetch any entry in the organization; non-admin members may only fetch their own entries.

curl https://api.trcr.pro/api/v1/time-entries/te_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
DELETE/time-entries/:id

Delete a time entry.

curl -X DELETE https://api.trcr.pro/api/v1/time-entries/te_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Invoices

GET/invoices

List invoices with filters.

ParameterTypeRequiredDescription
client_idstringOptionalFilter by client
statusstringOptionaldraft, sent, paid, overdue, void
fromstringOptionalIssue date from
tostringOptionalIssue date to
pagenumberOptionalPage number
per_pagenumberOptionalItems per page
curl "https://api.trcr.pro/api/v1/invoices?status=sent&client_id=cli_abc" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/invoices

Create a new invoice.

ParameterTypeRequiredDescription
client_idstringRequiredClient ID
project_idstringOptionalProject ID
due_datestringRequiredDue date (ISO 8601)
currencystringOptionalCurrency code (default org currency)
notesstringOptionalNotes displayed on invoice
tax_ratenumberOptionalTax percentage (e.g. 21 for 21%)
curl -X POST https://api.trcr.pro/api/v1/invoices \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"client_id":"cli_abc","due_date":"2026-04-30","tax_rate":21}'
GET/invoices/:id

Get a single invoice with line items.

curl https://api.trcr.pro/api/v1/invoices/inv_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/invoices/:id

Update an invoice (only in draft status).

ParameterTypeRequiredDescription
due_datestringOptionalDue date
notesstringOptionalNotes
tax_ratenumberOptionalTax rate
discountnumberOptionalDiscount percentage
curl -X PUT https://api.trcr.pro/api/v1/invoices/inv_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"notes":"Payment due within 30 days","discount":10}'
DELETE/invoices/:id

Delete a draft invoice.

curl -X DELETE https://api.trcr.pro/api/v1/invoices/inv_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Invoice Line Items

POST/invoices/:id/line-items

Add a line item to an invoice.

ParameterTypeRequiredDescription
descriptionstringRequiredLine item description
quantitynumberRequiredQuantity (e.g. hours)
unit_pricenumberRequiredUnit price in cents
time_entry_idsstring[]OptionalLink to time entries
curl -X POST https://api.trcr.pro/api/v1/invoices/inv_abc123/line-items \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"description":"Frontend development","quantity":10.5,"unit_price":15000}'
PUT/invoices/:id/line-items/:itemId

Update a line item.

ParameterTypeRequiredDescription
descriptionstringOptionalDescription
quantitynumberOptionalQuantity
unit_pricenumberOptionalUnit price in cents
curl -X PUT https://api.trcr.pro/api/v1/invoices/inv_abc123/line-items/li_001 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"quantity":12}'
DELETE/invoices/:id/line-items/:itemId

Remove a line item.

curl -X DELETE https://api.trcr.pro/api/v1/invoices/inv_abc123/line-items/li_001 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Invoice Actions

POST/invoices/:id/generate

Auto-generate line items from unbilled time entries for the invoice's project and client.

ParameterTypeRequiredDescription
fromstringOptionalStart date filter
tostringOptionalEnd date filter
curl -X POST https://api.trcr.pro/api/v1/invoices/inv_abc123/generate \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"from":"2026-03-01","to":"2026-03-31"}'
POST/invoices/:id/send

Send the invoice to the client via email. Changes status to sent.

ParameterTypeRequiredDescription
tostring[]OptionalOverride recipient emails (defaults to client contacts)
messagestringOptionalCustom email message
curl -X POST https://api.trcr.pro/api/v1/invoices/inv_abc123/send \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"message":"Please find attached invoice for March."}'
POST/invoices/:id/mark-paid

Mark an invoice as paid.

ParameterTypeRequiredDescription
paid_atstringOptionalPayment date (default now)
payment_methodstringOptionalbank_transfer, credit_card, cash, other
curl -X POST https://api.trcr.pro/api/v1/invoices/inv_abc123/mark-paid \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"payment_method":"bank_transfer"}'

Clients

GET/clients

List all clients in the organization.

ParameterTypeRequiredDescription
searchstringOptionalSearch by name or email
pagenumberOptionalPage number
per_pagenumberOptionalItems per page
curl "https://api.trcr.pro/api/v1/clients?search=acme" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/clients

Create a new client.

ParameterTypeRequiredDescription
namestringRequiredClient/company name
emailstringOptionalPrimary email
phonestringOptionalPhone number
addressobjectOptionalAddress: {street, city, state, zip, country}
currencystringOptionalPreferred currency
hourly_ratenumberOptionalDefault hourly rate in cents
notesstringOptionalInternal notes
curl -X POST https://api.trcr.pro/api/v1/clients \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Acme Corp","email":"billing@acme.com","currency":"USD","hourly_rate":15000}'
GET/clients/:id

Get a single client.

curl https://api.trcr.pro/api/v1/clients/cli_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/clients/:id

Update a client.

ParameterTypeRequiredDescription
namestringOptionalClient name
emailstringOptionalEmail
phonestringOptionalPhone
addressobjectOptionalAddress object
currencystringOptionalCurrency
hourly_ratenumberOptionalHourly rate in cents
notesstringOptionalInternal notes
curl -X PUT https://api.trcr.pro/api/v1/clients/cli_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"hourly_rate":17500}'
DELETE/clients/:id

Delete a client.

curl -X DELETE https://api.trcr.pro/api/v1/clients/cli_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Client Contacts

GET/clients/:id/contacts

List contacts for a client.

curl https://api.trcr.pro/api/v1/clients/cli_abc123/contacts -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/clients/:id/contacts

Add a contact to a client.

ParameterTypeRequiredDescription
namestringRequiredContact name
emailstringOptionalContact email
phonestringOptionalContact phone
rolestringOptionalJob title or role
curl -X POST https://api.trcr.pro/api/v1/clients/cli_abc123/contacts \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"John Smith","email":"john@acme.com","role":"CTO"}'
PUT/clients/:id/contacts/:contactId

Update a contact.

curl -X PUT https://api.trcr.pro/api/v1/clients/cli_abc123/contacts/cnt_001 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"phone":"+1-555-0123"}'
DELETE/clients/:id/contacts/:contactId

Remove a contact.

curl -X DELETE https://api.trcr.pro/api/v1/clients/cli_abc123/contacts/cnt_001 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Client Activities

GET/clients/:id/activities

List activity log for a client (meetings, calls, notes).

ParameterTypeRequiredDescription
typestringOptionalFilter: meeting, call, email, note
pagenumberOptionalPage number
curl "https://api.trcr.pro/api/v1/clients/cli_abc123/activities?type=meeting" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/clients/:id/activities

Log an activity for a client.

ParameterTypeRequiredDescription
typestringRequiredmeeting, call, email, note
titlestringRequiredActivity title
descriptionstringOptionalDetails
datestringOptionalActivity date (default now)
curl -X POST https://api.trcr.pro/api/v1/clients/cli_abc123/activities \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"type":"meeting","title":"Quarterly review","description":"Discussed Q1 progress"}'

Payments

GET/payments

List all payments.

ParameterTypeRequiredDescription
client_idstringOptionalFilter by client
invoice_idstringOptionalFilter by invoice
fromstringOptionalDate from
tostringOptionalDate to
pagenumberOptionalPage number
curl "https://api.trcr.pro/api/v1/payments?client_id=cli_abc" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/payments

Record a payment.

ParameterTypeRequiredDescription
invoice_idstringRequiredInvoice ID
amountnumberRequiredAmount in cents
methodstringOptionalbank_transfer, credit_card, cash, other
paid_atstringOptionalPayment date (default now)
notesstringOptionalPayment notes
curl -X POST https://api.trcr.pro/api/v1/payments \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"invoice_id":"inv_abc","amount":157500,"method":"bank_transfer"}'
GET/payments/:id

Get a single payment.

curl https://api.trcr.pro/api/v1/payments/pay_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/payments/:id

Update a payment record.

ParameterTypeRequiredDescription
amountnumberOptionalAmount in cents
methodstringOptionalPayment method
notesstringOptionalNotes
curl -X PUT https://api.trcr.pro/api/v1/payments/pay_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"notes":"Wire transfer ref #12345"}'
DELETE/payments/:id

Delete a payment record.

curl -X DELETE https://api.trcr.pro/api/v1/payments/pay_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Members

GET/members

List all members in the current organization.

ParameterTypeRequiredDescription
rolestringOptionalFilter by role: owner, admin, member
searchstringOptionalSearch by name or email
curl "https://api.trcr.pro/api/v1/members?role=admin" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/members/invite

Invite a new member to the organization via email.

ParameterTypeRequiredDescription
emailstringRequiredEmail to invite
rolestringOptionalRole: admin or member (default member)
curl -X POST https://api.trcr.pro/api/v1/members/invite \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"email":"newuser@example.com","role":"member"}'
PUT/members/:id

Update a member's role.

ParameterTypeRequiredDescription
rolestringRequiredNew role: admin or member
curl -X PUT https://api.trcr.pro/api/v1/members/mem_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"role":"admin"}'
DELETE/members/:id

Remove a member from the organization.

curl -X DELETE https://api.trcr.pro/api/v1/members/mem_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Labels

GET/labels

List all labels in the organization.

curl https://api.trcr.pro/api/v1/labels -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/labels

Create a new label.

ParameterTypeRequiredDescription
namestringRequiredLabel name
colorstringRequiredHex color code
curl -X POST https://api.trcr.pro/api/v1/labels \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"Bug","color":"#ef4444"}'
PUT/labels/:id

Update a label.

ParameterTypeRequiredDescription
namestringOptionalLabel name
colorstringOptionalHex color
curl -X PUT https://api.trcr.pro/api/v1/labels/lbl_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"color":"#f97316"}'
DELETE/labels/:id

Delete a label. Removes it from all tasks.

curl -X DELETE https://api.trcr.pro/api/v1/labels/lbl_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Milestones

Milestones are standalone, named date markers attached to a Space (project) and rendered on the Gantt chart. They are independent of any task and used to mark key dates such as launches, reviews, and deadlines. Each milestone carries a title, a target_date (formatted YYYY-MM-DD), a color (hex, defaults to #6366f1 when omitted), and an optional description. Reads require access to the Space; create, update, and delete require manage_tasks permission on the Space (admins and project managers qualify).

GET/organizations/:orgId/projects/:projectId/milestones

List a Space's milestones, ordered by target date.

curl https://api.trcr.pro/api/v1/organizations/org_abc123/projects/prj_abc123/milestones -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/organizations/:orgId/projects/:projectId/milestones

Create a milestone on a Space. Requires manage_tasks permission. Returns 201.

ParameterTypeRequiredDescription
titlestringRequiredMilestone title (1-255 characters)
target_datestringRequiredISO 8601 date (YYYY-MM-DD)
colorstringOptionalHex color code (defaults to #6366f1)
descriptionstringOptionalOptional description
curl -X POST https://api.trcr.pro/api/v1/organizations/org_abc123/projects/prj_abc123/milestones \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Public beta","target_date":"2026-07-01","color":"#22c55e","description":"optional"}'
GET/organizations/:orgId/milestones/:milestoneId

Get a single milestone.

curl https://api.trcr.pro/api/v1/organizations/org_abc123/milestones/mil_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/organizations/:orgId/milestones/:milestoneId

Update a milestone. Only provided fields are changed. Send description: null to clear it; omit a field to leave it unchanged. Requires manage_tasks permission.

ParameterTypeRequiredDescription
titlestringOptionalMilestone title (1-255 characters)
target_datestringOptionalISO 8601 date (YYYY-MM-DD)
colorstringOptionalHex color code
descriptionstringOptionalDescription (null to clear)
curl -X PUT https://api.trcr.pro/api/v1/organizations/org_abc123/milestones/mil_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title":"Public beta launch","target_date":"2026-07-08"}'
DELETE/organizations/:orgId/milestones/:milestoneId

Delete a milestone. Requires manage_tasks permission.

curl -X DELETE https://api.trcr.pro/api/v1/organizations/org_abc123/milestones/mil_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Chat

Channels

GET/chat/channels

List chat channels the user has access to.

curl https://api.trcr.pro/api/v1/chat/channels -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/chat/channels

Create a new chat channel.

ParameterTypeRequiredDescription
namestringRequiredChannel name
descriptionstringOptionalChannel description
is_privatebooleanOptionalPrivate channel (default false)
member_idsstring[]OptionalInitial member IDs
curl -X POST https://api.trcr.pro/api/v1/chat/channels \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"name":"engineering","is_private":false}'
PUT/chat/channels/:id

Update a channel.

ParameterTypeRequiredDescription
namestringOptionalChannel name
descriptionstringOptionalDescription
curl -X PUT https://api.trcr.pro/api/v1/chat/channels/ch_abc123 \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"description":"Engineering team discussions"}'
DELETE/chat/channels/:id

Delete a channel. Requires admin role.

curl -X DELETE https://api.trcr.pro/api/v1/chat/channels/ch_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Messages

GET/chat/channels/:id/messages

List messages in a channel with pagination.

ParameterTypeRequiredDescription
beforestringOptionalCursor: message ID to load messages before
limitnumberOptionalNumber of messages (default 50, max 100)
curl "https://api.trcr.pro/api/v1/chat/channels/ch_abc123/messages?limit=20" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/chat/channels/:id/messages

Send a message to a channel.

ParameterTypeRequiredDescription
contentstringRequiredMessage text (Markdown supported)
reply_tostringOptionalMessage ID to reply to (for threads)
curl -X POST https://api.trcr.pro/api/v1/chat/channels/ch_abc123/messages \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"content":"Deployment complete!"}'
DELETE/chat/channels/:id/messages/:msgId

Delete a message.

curl -X DELETE https://api.trcr.pro/api/v1/chat/channels/ch_abc123/messages/msg_001 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Reactions

POST/chat/messages/:msgId/reactions

Add a reaction to a message.

ParameterTypeRequiredDescription
emojistringRequiredEmoji code (e.g. thumbsup)
curl -X POST https://api.trcr.pro/api/v1/chat/messages/msg_001/reactions \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"emoji":"thumbsup"}'
DELETE/chat/messages/:msgId/reactions/:emoji

Remove your reaction from a message.

curl -X DELETE https://api.trcr.pro/api/v1/chat/messages/msg_001/reactions/thumbsup -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/search

Unified search across all entities (tasks, projects, clients, time entries, invoices).

ParameterTypeRequiredDescription
qstringRequiredSearch query
typestringOptionalFilter by entity type: task, project, client, time_entry, invoice
limitnumberOptionalMax results (default 20, max 50)
curl "https://api.trcr.pro/api/v1/search?q=website+redesign&type=task&limit=10" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Reports

GET/reports/timesheet

Timesheet report -- hours tracked per user per day.

ParameterTypeRequiredDescription
fromstringRequiredStart date
tostringRequiredEnd date
user_idstringOptionalFilter by user
project_idstringOptionalFilter by project
client_idstringOptionalFilter by client
descriptionstringOptionalFilter by time entry description (partial match)
invoice_idstringOptionalOptional UUID. When set, restricts the report to time entries linked to this invoice.
group_bystringOptionalday, week, month (default day)
curl "https://api.trcr.pro/api/v1/reports/timesheet?from=2026-03-01&to=2026-03-31&group_by=week" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/reports/revenue

Revenue report -- invoiced and paid amounts over time.

ParameterTypeRequiredDescription
fromstringRequiredStart date
tostringRequiredEnd date
client_idstringOptionalFilter by client
group_bystringOptionalmonth, quarter (default month)
curl "https://api.trcr.pro/api/v1/reports/revenue?from=2026-01-01&to=2026-12-31&group_by=quarter" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/reports/utilization

Team utilization report -- percentage of available hours tracked.

ParameterTypeRequiredDescription
fromstringRequiredStart date
tostringRequiredEnd date
user_idstringOptionalFilter by user
invoice_idstringOptionalOptional UUID. When set, restricts the report to time entries linked to this invoice.
target_hoursnumberOptionalTarget hours per day (default 8)
curl "https://api.trcr.pro/api/v1/reports/utilization?from=2026-03-01&to=2026-03-31" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/reports/profitability

Profitability report -- revenue vs. cost per project or client.

ParameterTypeRequiredDescription
fromstringRequiredStart date
tostringRequiredEnd date
group_bystringOptionalproject, client (default project)
curl "https://api.trcr.pro/api/v1/reports/profitability?from=2026-01-01&to=2026-03-31&group_by=client" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Notifications

GET/notifications

List notifications for the authenticated user.

ParameterTypeRequiredDescription
unreadbooleanOptionalFilter unread only
pagenumberOptionalPage number
per_pagenumberOptionalItems per page
curl "https://api.trcr.pro/api/v1/notifications?unread=true" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/notifications/mark-read

Mark notifications as read.

ParameterTypeRequiredDescription
idsstring[]OptionalNotification IDs to mark (omit for all)
curl -X POST https://api.trcr.pro/api/v1/notifications/mark-read \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ids":["ntf_001","ntf_002"]}'
GET/notifications/preferences

Get notification preferences.

curl https://api.trcr.pro/api/v1/notifications/preferences -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
PUT/notifications/preferences

Update notification preferences. Each preference controls both in-app and email delivery independently.

ParameterTypeRequiredDescription
notification_typestringRequiredPreference to update: task_assigned, task_commented, task_status_changed, invoice_paid, chat_mentioned
email_enabledbooleanOptionalEnable email delivery for this type
push_enabledbooleanOptionalEnable push notification delivery
in_app_enabledbooleanOptionalEnable in-app notification delivery

The task_status_changed type controls emails sent when any task you are assigned to (or reported) changes status. Notifications include a data.linkfield (/tasks?task=TASK_ID) that opens the task detail panel in the app.

# Enable email for task status changes
curl -X PUT https://api.trcr.pro/api/v1/notifications/preferences \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"notification_type":"task_status_changed","email_enabled":true,"in_app_enabled":true}'

The TRCR app supports URL-based deep links that open specific views or panels directly. These are useful when building integrations that link back to the app from notifications, emails, or external tools.

Task Panel Deep Link

Append a ?task=TASK_ID query parameter to the tasks page URL to automatically open the task detail panel for that task:

https://app.trcr.pro/tasks?task=TASK_ID

This same format is used in the data.link field of task-related notifications (e.g. task_status_changed,task_assigned) so users can click directly to the relevant task.

// Build a deep link to a task
const taskLink = `https://app.trcr.pro/tasks?task=${taskId}`;

// Useful when composing webhook payloads or custom notifications:
const payload = {
  message: `Status changed to: done`,
  link: taskLink,
};

Files

Files are stored in S3-compatible object storage. All file endpoints are scoped to an organization. Allowed upload types: image/png, image/jpeg, image/gif, image/webp, application/pdf, text/plain, text/csv, application/zip, and Office document formats. Maximum file size is 50 MB.

POST/files/upload

Upload a file using multipart/form-data. Optionally attach to a task. Thumbnails are auto-generated for images.

ParameterTypeRequiredDescription
filebinaryRequiredFile field in the multipart form (any field name)
task_idstringOptionalQuery param: attach upload to this task ID
curl -X POST "https://api.trcr.pro/api/v1/files/upload?task_id=tsk_abc123" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -F "file=@screenshot.png;type=image/png"
GET/tasks/:id/attachments

List all attachments for a task, including presigned download URLs.

curl https://api.trcr.pro/api/v1/tasks/tsk_abc123/attachments -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/files/:id/url

Get a fresh presigned download URL for an attachment. URLs expire — call this endpoint to refresh them.

curl https://api.trcr.pro/api/v1/files/att_abc123/url -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
GET/files/:id/content

Redirect (307) to a fresh presigned URL for an attachment. Suitable for use directly in HTML image src attributes. Accepts auth via view ticket, Authorization header, or ?token= query param.

ParameterTypeRequiredDescription
ticketstringOptionalShort-lived view ticket (preferred for embedded images)
tokenstringOptionalFull JWT access token (legacy fallback)
# With view ticket (preferred for embedded images)
curl -L "https://api.trcr.pro/api/v1/files/att_abc123/content?ticket=VIEW_TICKET" -o image.png

# With Authorization header
curl -L https://api.trcr.pro/api/v1/files/att_abc123/content -H "Authorization: Bearer YOUR_ACCESS_TOKEN" -o image.png
POST/files/view-ticket

Issue a short-lived view ticket (60-second TTL) for authenticating embedded image requests. Use the ticket in the ?ticket= query param of the /files/:id/content endpoint. Preferred over passing a full JWT token in image src URLs.

curl -X POST https://api.trcr.pro/api/v1/files/view-ticket -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
DELETE/files/:id

Delete an attachment from storage and the database.

curl -X DELETE https://api.trcr.pro/api/v1/files/att_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Git Integration

GET/git/repositories

List connected Git repositories.

curl https://api.trcr.pro/api/v1/git/repositories -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/git/repositories

Connect a Git repository.

ParameterTypeRequiredDescription
providerstringRequiredgithub or gitlab
repo_urlstringRequiredRepository URL
project_idstringOptionalLink to a TRCR project
curl -X POST https://api.trcr.pro/api/v1/git/repositories \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"provider":"github","repo_url":"https://github.com/acme/app","project_id":"prj_abc"}'
DELETE/git/repositories/:id

Disconnect a repository.

curl -X DELETE https://api.trcr.pro/api/v1/git/repositories/repo_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"
POST/git/webhooks

Register a webhook for Git events (push, PR, etc.).

ParameterTypeRequiredDescription
repository_idstringRequiredRepository ID
eventsstring[]RequiredEvents: push, pull_request, branch_created
urlstringRequiredWebhook callback URL
secretstringOptionalWebhook secret for signature verification
curl -X POST https://api.trcr.pro/api/v1/git/webhooks \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"repository_id":"repo_abc","events":["push","pull_request"],"url":"https://yourapp.com/hooks/git"}'

Audit Logs

GET/audit-logs

List audit log entries. Requires admin role.

ParameterTypeRequiredDescription
user_idstringOptionalFilter by acting user
actionstringOptionalFilter by action (e.g. created, updated, deleted)
entity_typestringOptionalFilter by entity type (task, project, invoice, etc.)
entity_idstringOptionalFilter by entity ID
fromstringOptionalDate from
tostringOptionalDate to
pagenumberOptionalPage number
per_pagenumberOptionalItems per page
curl "https://api.trcr.pro/api/v1/audit-logs?entity_type=invoice&action=created&from=2026-03-01" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Each audit log entry contains:

{
  "id": "log_abc123",
  "user_id": "usr_xyz",
  "user_name": "Jane Doe",
  "action": "created",
  "entity_type": "invoice",
  "entity_id": "inv_abc123",
  "changes": {
    "status": { "from": null, "to": "draft" }
  },
  "ip_address": "203.0.113.1",
  "created_at": "2026-03-28T14:30:00Z"
}