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_TOKENAuthentication
Create a new user account and receive tokens.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Required | User email address | |
| password | string | Required | Minimum 8 characters |
| name | string | Required | Full 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"}'Authenticate with email and password.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Required | User email | |
| password | string | Required | User password |
curl -X POST https://api.trcr.pro/api/v1/auth/login \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com","password":"secret123"}'Exchange a refresh token for a new access token. The old refresh token is invalidated.
| Parameter | Type | Required | Description |
|---|---|---|---|
| refresh_token | string | Required | Current refresh token |
curl -X POST https://api.trcr.pro/api/v1/auth/refresh \
-H "Content-Type: application/json" \
-d '{"refresh_token":"REFRESH_TOKEN"}'Invalidate the refresh token.
| Parameter | Type | Required | Description |
|---|---|---|---|
| refresh_token | string | Required | Refresh 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"}'Initiate a password reset. Sends a reset link to the given email if an account exists.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Required | Account email address |
curl -X POST https://api.trcr.pro/api/v1/auth/forgot-password \
-H "Content-Type: application/json" \
-d '{"email":"user@example.com"}'Complete a password reset using the token from the reset email.
| Parameter | Type | Required | Description |
|---|---|---|---|
| token | string | Required | Reset token from email link |
| password | string | Required | New 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"}'Verify an email address using the token from the verification email.
| Parameter | Type | Required | Description |
|---|---|---|---|
| token | string | Required | Verification 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 the authenticated user's profile.
curl https://api.trcr.pro/api/v1/users/me -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update the authenticated user's profile.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Full name |
| timezone | string | Optional | IANA 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"}'Upload a new avatar image. Accepts multipart/form-data.
| Parameter | Type | Required | Description |
|---|---|---|---|
| file | binary | Required | Image 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"Remove the user's avatar.
curl -X DELETE https://api.trcr.pro/api/v1/users/me/avatar -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Change the authenticated user's password.
| Parameter | Type | Required | Description |
|---|---|---|---|
| current_password | string | Required | Current password |
| new_password | string | Required | New 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
List all organizations the authenticated user belongs to.
curl https://api.trcr.pro/api/v1/organizations -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Create a new organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Organization name |
| slug | string | Optional | URL-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 a single organization by ID.
curl https://api.trcr.pro/api/v1/organizations/org_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update an organization. Requires admin role.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | New name |
| slug | string | Optional | New slug |
| settings | object | Optional | Organization 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 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"Upload an organization logo. Accepts multipart/form-data.
| Parameter | Type | Required | Description |
|---|---|---|---|
| file | binary | Required | Image 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"Remove the organization logo.
curl -X DELETE https://api.trcr.pro/api/v1/organizations/org_abc123/logo -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Projects
List all projects in the current organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
| page | number | Optional | Page number (default 1) |
| per_page | number | Optional | Items per page (default 25, max 100) |
| status | string | Optional | Filter by status: active, archived |
| search | string | Optional | Search by project name |
curl "https://api.trcr.pro/api/v1/projects?status=active&per_page=10" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Create a new project.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Project name |
| description | string | Optional | Project description |
| client_id | string | Optional | Associated client ID |
| color | string | Optional | Hex color code |
| billable | boolean | Optional | Whether time entries are billable (default true) |
| hourly_rate | number | Optional | Default 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 a single project.
curl https://api.trcr.pro/api/v1/projects/prj_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update a project.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Project name |
| description | string | Optional | Description |
| status | string | Optional | active or archived |
| client_id | string | Optional | Client ID |
| color | string | Optional | Hex color |
| billable | boolean | Optional | Billable flag |
| hourly_rate | number | Optional | Hourly 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 a project and all associated data.
curl -X DELETE https://api.trcr.pro/api/v1/projects/prj_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"List members assigned to a project.
curl https://api.trcr.pro/api/v1/projects/prj_abc123/members -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Add a member to a project.
| Parameter | Type | Required | Description |
|---|---|---|---|
| user_id | string | Required | User ID to add |
| role | string | Optional | Project 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"}'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 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 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.
List tasks with filtering and pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
| project_id | string | Optional | Filter by project |
| assignee_id | string | Optional | Filter by assignee |
| status | string | Optional | Filter: open, in_progress, done, closed |
| priority | string | Optional | Filter: low, medium, high, urgent |
| label_ids | string | Optional | Comma-separated label IDs |
| group_id | string | Optional | Filter by task group |
| search | string | Optional | Full-text search |
| page | number | Optional | Page number |
| per_page | number | Optional | Items per page (max 100) |
| sort | string | Optional | Sort: created_at, updated_at, priority, position |
| order | string | Optional | asc 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"Create a new task.
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | string | Required | Task title |
| description | string | Optional | Markdown description |
| project_id | string | Required | Project ID |
| assignee_id | string | Optional | Assigned user ID |
| status | string | Optional | Initial status (default open) |
| priority | string | Optional | low, medium, high, urgent (default medium) |
| start_date | string | Optional | ISO 8601 date (YYYY-MM-DD). The task start; must be on or before due_date |
| due_date | string | Optional | ISO 8601 date (YYYY-MM-DD). The task end |
| label_ids | string[] | Optional | Array of label IDs |
| estimated_hours | number | Optional | Estimated hours |
| group_id | string | Optional | Task group ID |
| complexity | number | Optional | Complexity: 1 (trivial), 2 (easy), 3 (medium), 5 (hard), 8 (complex) |
| progress | number | Optional | Progress 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 a single task with all details.
curl https://api.trcr.pro/api/v1/tasks/tsk_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update a task. Only provided fields are changed.
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | string | Optional | Task title |
| description | string | Optional | Markdown description |
| status | string | Optional | open, in_progress, done, closed |
| priority | string | Optional | low, medium, high, urgent |
| assignee_id | string | Optional | Assigned user ID (null to unassign) |
| start_date | string | Optional | ISO 8601 date (null to remove). Must be on or before due_date |
| due_date | string | Optional | ISO 8601 date (null to remove) |
| label_ids | string[] | Optional | Replace all labels |
| estimated_hours | number | Optional | Estimated hours |
| group_id | string | Optional | Task group ID (moves task to group) |
| complexity | number | Optional | Complexity: 1, 2, 3, 5, 8 (null to clear) |
| progress | number | Optional | Progress 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 a task.
curl -X DELETE https://api.trcr.pro/api/v1/tasks/tsk_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Task Comments
List comments on a task.
curl https://api.trcr.pro/api/v1/tasks/tsk_abc123/comments -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Add a comment to a task.
| Parameter | Type | Required | Description |
|---|---|---|---|
| body | string | Required | Comment 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 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.
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"Create a checklist item on a task. Requires manage_tasks permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | string | Required | Item 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"}'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 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).
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"Add a dependency link. Requires manage_tasks permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
| depends_on_id | string | Required | ID of the related task |
| dependency_type | string | Required | blocks 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"}'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"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
Add a label to a task.
| Parameter | Type | Required | Description |
|---|---|---|---|
| label_id | string | Required | Label 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"}'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
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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| status | string | Required | New 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
Move a task to a specific position within its group or column. Requires manage_tasks permission.
| Parameter | Type | Required | Description |
|---|---|---|---|
| position | integer | Required | New 0-based position index |
| group_id | string | Optional | Move 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.
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"Create a new task group in a project.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Group 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"}'Update a task group.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | New 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 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"Reorder all task groups within a project.
| Parameter | Type | Required | Description |
|---|---|---|---|
| order | string[] | Required | Array 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 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"Set the full list of collapsed task groups for the current user (replaces previous state). Maximum 200 group IDs.
| Parameter | Type | Required | Description |
|---|---|---|---|
| group_ids | string[] | Required | Array 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"]}'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).
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"Create a custom task status.
| Parameter | Type | Required | Description |
|---|---|---|---|
| code | string | Required | Unique status code (e.g. qa_review) |
| label | string | Required | Display label (e.g. QA Review) |
| color | string | Required | Hex color code |
| is_terminal | boolean | Optional | Mark as a done/completed state (default false) |
| supports_progress | boolean | Optional | Allow progress tracking in this status (default false) |
| progress_editable | boolean | Optional | Allow users to manually edit progress (default false) |
| on_complete | string | Optional | Action when progress hits 100%: auto_advance or none |
| next_status_code | string | Optional | Code 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"}'Update a task status.
| Parameter | Type | Required | Description |
|---|---|---|---|
| label | string | Optional | Display label |
| color | string | Optional | Hex color |
| is_terminal | boolean | Optional | Done state flag |
| supports_progress | boolean | Optional | Progress tracking |
| on_complete | string | Optional | auto_advance or none |
| next_status_code | string | Optional | Next 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 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"Reorder task statuses.
| Parameter | Type | Required | Description |
|---|---|---|---|
| order | string[] | Required | Array 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.
Create a recurrence rule for a task.
| Parameter | Type | Required | Description |
|---|---|---|---|
| recurrence_pattern | string | Required | Pattern: 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 the recurrence rule for a task.
curl https://api.trcr.pro/api/v1/tasks/tsk_abc123/recurrence -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update a recurrence rule.
| Parameter | Type | Required | Description |
|---|---|---|---|
| recurrence_pattern | string | Optional | New 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"}'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
Start a new timer. Only one timer can be active per user.
| Parameter | Type | Required | Description |
|---|---|---|---|
| project_id | string | Optional | Project ID (nullable) |
| task_id | string | Optional | Task ID |
| description | string | Optional | What are you working on? |
| billable | boolean | Optional | Override 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"}'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"List time entries with filters.
| Parameter | Type | Required | Description |
|---|---|---|---|
| project_id | string | Optional | Filter by project |
| user_id | string | Optional | Filter by user |
| from | string | Optional | Start date (ISO 8601) |
| to | string | Optional | End date (ISO 8601) |
| billable | boolean | Optional | Filter by billable status |
| running | boolean | Optional | Filter running timers only |
| page | number | Optional | Page number |
| per_page | number | Optional | Items 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"Create a manual time entry (not using the timer). Both started_at and stopped_at are required.
| Parameter | Type | Required | Description |
|---|---|---|---|
| project_id | string | Optional | Project ID |
| task_id | string | Optional | Task ID |
| description | string | Optional | Description |
| started_at | string | Required | ISO 8601 datetime |
| stopped_at | string | Required | ISO 8601 datetime |
| billable | boolean | Optional | Billable flag |
| hourly_rate | number | Optional | Override 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
}'Update a time entry. To explicitly clear project_id or task_id, pass null.
| Parameter | Type | Required | Description |
|---|---|---|---|
| description | string | Optional | Description |
| project_id | string | null | Optional | Project ID (null to clear) |
| task_id | string | null | Optional | Task ID (null to clear) |
| started_at | string | Optional | Start time (ISO 8601) |
| stopped_at | string | Optional | End time (ISO 8601) |
| billable | boolean | Optional | Billable flag |
| hourly_rate | number | Optional | Override 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 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 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 a time entry.
curl -X DELETE https://api.trcr.pro/api/v1/time-entries/te_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Invoices
List invoices with filters.
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_id | string | Optional | Filter by client |
| status | string | Optional | draft, sent, paid, overdue, void |
| from | string | Optional | Issue date from |
| to | string | Optional | Issue date to |
| page | number | Optional | Page number |
| per_page | number | Optional | Items per page |
curl "https://api.trcr.pro/api/v1/invoices?status=sent&client_id=cli_abc" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Create a new invoice.
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_id | string | Required | Client ID |
| project_id | string | Optional | Project ID |
| due_date | string | Required | Due date (ISO 8601) |
| currency | string | Optional | Currency code (default org currency) |
| notes | string | Optional | Notes displayed on invoice |
| tax_rate | number | Optional | Tax 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 a single invoice with line items.
curl https://api.trcr.pro/api/v1/invoices/inv_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update an invoice (only in draft status).
| Parameter | Type | Required | Description |
|---|---|---|---|
| due_date | string | Optional | Due date |
| notes | string | Optional | Notes |
| tax_rate | number | Optional | Tax rate |
| discount | number | Optional | Discount 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 a draft invoice.
curl -X DELETE https://api.trcr.pro/api/v1/invoices/inv_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Invoice Line Items
Add a line item to an invoice.
| Parameter | Type | Required | Description |
|---|---|---|---|
| description | string | Required | Line item description |
| quantity | number | Required | Quantity (e.g. hours) |
| unit_price | number | Required | Unit price in cents |
| time_entry_ids | string[] | Optional | Link 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}'Update a line item.
| Parameter | Type | Required | Description |
|---|---|---|---|
| description | string | Optional | Description |
| quantity | number | Optional | Quantity |
| unit_price | number | Optional | Unit 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}'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
Auto-generate line items from unbilled time entries for the invoice's project and client.
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string | Optional | Start date filter |
| to | string | Optional | End 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"}'Send the invoice to the client via email. Changes status to sent.
| Parameter | Type | Required | Description |
|---|---|---|---|
| to | string[] | Optional | Override recipient emails (defaults to client contacts) |
| message | string | Optional | Custom 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."}'Mark an invoice as paid.
| Parameter | Type | Required | Description |
|---|---|---|---|
| paid_at | string | Optional | Payment date (default now) |
| payment_method | string | Optional | bank_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
List all clients in the organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
| search | string | Optional | Search by name or email |
| page | number | Optional | Page number |
| per_page | number | Optional | Items per page |
curl "https://api.trcr.pro/api/v1/clients?search=acme" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Create a new client.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Client/company name |
| string | Optional | Primary email | |
| phone | string | Optional | Phone number |
| address | object | Optional | Address: {street, city, state, zip, country} |
| currency | string | Optional | Preferred currency |
| hourly_rate | number | Optional | Default hourly rate in cents |
| notes | string | Optional | Internal 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 a single client.
curl https://api.trcr.pro/api/v1/clients/cli_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update a client.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Client name |
| string | Optional | ||
| phone | string | Optional | Phone |
| address | object | Optional | Address object |
| currency | string | Optional | Currency |
| hourly_rate | number | Optional | Hourly rate in cents |
| notes | string | Optional | Internal 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 a client.
curl -X DELETE https://api.trcr.pro/api/v1/clients/cli_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Client Contacts
List contacts for a client.
curl https://api.trcr.pro/api/v1/clients/cli_abc123/contacts -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Add a contact to a client.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Contact name |
| string | Optional | Contact email | |
| phone | string | Optional | Contact phone |
| role | string | Optional | Job 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"}'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"}'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
List activity log for a client (meetings, calls, notes).
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Optional | Filter: meeting, call, email, note |
| page | number | Optional | Page number |
curl "https://api.trcr.pro/api/v1/clients/cli_abc123/activities?type=meeting" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Log an activity for a client.
| Parameter | Type | Required | Description |
|---|---|---|---|
| type | string | Required | meeting, call, email, note |
| title | string | Required | Activity title |
| description | string | Optional | Details |
| date | string | Optional | Activity 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
List all payments.
| Parameter | Type | Required | Description |
|---|---|---|---|
| client_id | string | Optional | Filter by client |
| invoice_id | string | Optional | Filter by invoice |
| from | string | Optional | Date from |
| to | string | Optional | Date to |
| page | number | Optional | Page number |
curl "https://api.trcr.pro/api/v1/payments?client_id=cli_abc" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Record a payment.
| Parameter | Type | Required | Description |
|---|---|---|---|
| invoice_id | string | Required | Invoice ID |
| amount | number | Required | Amount in cents |
| method | string | Optional | bank_transfer, credit_card, cash, other |
| paid_at | string | Optional | Payment date (default now) |
| notes | string | Optional | Payment 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 a single payment.
curl https://api.trcr.pro/api/v1/payments/pay_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update a payment record.
| Parameter | Type | Required | Description |
|---|---|---|---|
| amount | number | Optional | Amount in cents |
| method | string | Optional | Payment method |
| notes | string | Optional | Notes |
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 a payment record.
curl -X DELETE https://api.trcr.pro/api/v1/payments/pay_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Members
List all members in the current organization.
| Parameter | Type | Required | Description |
|---|---|---|---|
| role | string | Optional | Filter by role: owner, admin, member |
| search | string | Optional | Search by name or email |
curl "https://api.trcr.pro/api/v1/members?role=admin" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Invite a new member to the organization via email.
| Parameter | Type | Required | Description |
|---|---|---|---|
| string | Required | Email to invite | |
| role | string | Optional | Role: 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"}'Update a member's role.
| Parameter | Type | Required | Description |
|---|---|---|---|
| role | string | Required | New 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"}'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
List all labels in the organization.
curl https://api.trcr.pro/api/v1/labels -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Create a new label.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Label name |
| color | string | Required | Hex 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"}'Update a label.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Label name |
| color | string | Optional | Hex 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 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).
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"Create a milestone on a Space. Requires manage_tasks permission. Returns 201.
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | string | Required | Milestone title (1-255 characters) |
| target_date | string | Required | ISO 8601 date (YYYY-MM-DD) |
| color | string | Optional | Hex color code (defaults to #6366f1) |
| description | string | Optional | Optional 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 a single milestone.
curl https://api.trcr.pro/api/v1/organizations/org_abc123/milestones/mil_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| title | string | Optional | Milestone title (1-255 characters) |
| target_date | string | Optional | ISO 8601 date (YYYY-MM-DD) |
| color | string | Optional | Hex color code |
| description | string | Optional | Description (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 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
List chat channels the user has access to.
curl https://api.trcr.pro/api/v1/chat/channels -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Create a new chat channel.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Required | Channel name |
| description | string | Optional | Channel description |
| is_private | boolean | Optional | Private channel (default false) |
| member_ids | string[] | Optional | Initial 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}'Update a channel.
| Parameter | Type | Required | Description |
|---|---|---|---|
| name | string | Optional | Channel name |
| description | string | Optional | Description |
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 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
List messages in a channel with pagination.
| Parameter | Type | Required | Description |
|---|---|---|---|
| before | string | Optional | Cursor: message ID to load messages before |
| limit | number | Optional | Number 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"Send a message to a channel.
| Parameter | Type | Required | Description |
|---|---|---|---|
| content | string | Required | Message text (Markdown supported) |
| reply_to | string | Optional | Message 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 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
Add a reaction to a message.
| Parameter | Type | Required | Description |
|---|---|---|---|
| emoji | string | Required | Emoji 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"}'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"Search
Unified search across all entities (tasks, projects, clients, time entries, invoices).
| Parameter | Type | Required | Description |
|---|---|---|---|
| q | string | Required | Search query |
| type | string | Optional | Filter by entity type: task, project, client, time_entry, invoice |
| limit | number | Optional | Max 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
Timesheet report -- hours tracked per user per day.
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string | Required | Start date |
| to | string | Required | End date |
| user_id | string | Optional | Filter by user |
| project_id | string | Optional | Filter by project |
| client_id | string | Optional | Filter by client |
| description | string | Optional | Filter by time entry description (partial match) |
| invoice_id | string | Optional | Optional UUID. When set, restricts the report to time entries linked to this invoice. |
| group_by | string | Optional | day, 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"Revenue report -- invoiced and paid amounts over time.
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string | Required | Start date |
| to | string | Required | End date |
| client_id | string | Optional | Filter by client |
| group_by | string | Optional | month, 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"Team utilization report -- percentage of available hours tracked.
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string | Required | Start date |
| to | string | Required | End date |
| user_id | string | Optional | Filter by user |
| invoice_id | string | Optional | Optional UUID. When set, restricts the report to time entries linked to this invoice. |
| target_hours | number | Optional | Target 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"Profitability report -- revenue vs. cost per project or client.
| Parameter | Type | Required | Description |
|---|---|---|---|
| from | string | Required | Start date |
| to | string | Required | End date |
| group_by | string | Optional | project, 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
List notifications for the authenticated user.
| Parameter | Type | Required | Description |
|---|---|---|---|
| unread | boolean | Optional | Filter unread only |
| page | number | Optional | Page number |
| per_page | number | Optional | Items per page |
curl "https://api.trcr.pro/api/v1/notifications?unread=true" -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Mark notifications as read.
| Parameter | Type | Required | Description |
|---|---|---|---|
| ids | string[] | Optional | Notification 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 notification preferences.
curl https://api.trcr.pro/api/v1/notifications/preferences -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Update notification preferences. Each preference controls both in-app and email delivery independently.
| Parameter | Type | Required | Description |
|---|---|---|---|
| notification_type | string | Required | Preference to update: task_assigned, task_commented, task_status_changed, invoice_paid, chat_mentioned |
| email_enabled | boolean | Optional | Enable email delivery for this type |
| push_enabled | boolean | Optional | Enable push notification delivery |
| in_app_enabled | boolean | Optional | Enable 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}'Deep Links
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_IDThis 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.
Upload a file using multipart/form-data. Optionally attach to a task. Thumbnails are auto-generated for images.
| Parameter | Type | Required | Description |
|---|---|---|---|
| file | binary | Required | File field in the multipart form (any field name) |
| task_id | string | Optional | Query 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"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 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"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.
| Parameter | Type | Required | Description |
|---|---|---|---|
| ticket | string | Optional | Short-lived view ticket (preferred for embedded images) |
| token | string | Optional | Full 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.pngIssue 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 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
List connected Git repositories.
curl https://api.trcr.pro/api/v1/git/repositories -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Connect a Git repository.
| Parameter | Type | Required | Description |
|---|---|---|---|
| provider | string | Required | github or gitlab |
| repo_url | string | Required | Repository URL |
| project_id | string | Optional | Link 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"}'Disconnect a repository.
curl -X DELETE https://api.trcr.pro/api/v1/git/repositories/repo_abc123 -H "Authorization: Bearer YOUR_ACCESS_TOKEN"Register a webhook for Git events (push, PR, etc.).
| Parameter | Type | Required | Description |
|---|---|---|---|
| repository_id | string | Required | Repository ID |
| events | string[] | Required | Events: push, pull_request, branch_created |
| url | string | Required | Webhook callback URL |
| secret | string | Optional | Webhook 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
List audit log entries. Requires admin role.
| Parameter | Type | Required | Description |
|---|---|---|---|
| user_id | string | Optional | Filter by acting user |
| action | string | Optional | Filter by action (e.g. created, updated, deleted) |
| entity_type | string | Optional | Filter by entity type (task, project, invoice, etc.) |
| entity_id | string | Optional | Filter by entity ID |
| from | string | Optional | Date from |
| to | string | Optional | Date to |
| page | number | Optional | Page number |
| per_page | number | Optional | Items 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"
}