Timix.AI
REMOTE · API.TIMIX.AI · SCANNED AUG 3
Time tracking, live project budgets, and billing exports for service firms.
Available components
How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. How we score →
Endpoint Security89
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- Authorisation is enforced on tool calls, advertised via RFC 9728 protected-resource metadata. Discovery is public, which costs nothing: no tool can be invoked without a token. View diagnostics → Pass
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- HSTS check failed: the Strict-Transport-Security header is absent. See how to fix → View diagnostics → Fail
- DNSSEC check failed: this domain isn't protected by DNSSEC. See how to fix → View diagnostics → Fail
- The authorisation server offers only Dynamic Client Registration (RFC 7591), which MCP 2026-07-28 deprecated in favour of Client ID Metadata Documents. View diagnostics → Partial
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability63
- AI-judged instruction clarity (good).Pass
- Context-footprint check failed: tool/resource definitions use about 16024 tokens (~140/item across 114 items; 114 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management27
- Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
Capabilities60
- Spec-recency check failed: implements MCP spec 2025-06-18; the latest is 2026-07-28. See how to fix → Fail
Add this component to your MCP client. Where a client-specific snippet is available, pick your client below and copy it straight into your config; otherwise use the connection detail shown.
remote · api.timix.ai
claude mcp add --transport http ai-timix-time-tracking https://api.timix.ai/api/integration/v1/mcp
[mcp_servers.ai-timix-time-tracking] url = "https://api.timix.ai/api/integration/v1/mcp"
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"ai-timix-time-tracking": {
"type": "remote",
"url": "https://api.timix.ai/api/integration/v1/mcp",
"enabled": true
}
}
} openclaw mcp add ai-timix-time-tracking --url https://api.timix.ai/api/integration/v1/mcp --transport streamable-http
mcp_servers:
ai-timix-time-tracking:
url: "https://api.timix.ai/api/integration/v1/mcp" {
"mcpServers": {
"ai-timix-time-tracking": {
"type": "http",
"url": "https://api.timix.ai/api/integration/v1/mcp"
}
}
} The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 2 Aug 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 20 to 23. That category is still filling its 30-day observation window: 6 days of observed history at the previous scan, 7 at this one. The score rises as the window fills, whether or not the server changes.
- 31 Jul 26 +5
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 30 Jul 26 −2
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 29 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 7 to 10. That category is still filling its 30-day observation window: 2 days of observed history at the previous scan, 3 at this one. The score rises as the window fills, whether or not the server changes.
- 28 Jul 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.
- 27 Jul 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 26 Jul 26 69
First indexed and scored.
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 3 Aug 2026 · Probed https://api.timix.ai/api/integration/v1/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=api.timix.ai | CN=WR3,O=Google Trust Services,C=US | 1 Jul 2026 | 29 Sept 2026 | RSA 2048 | SHA256-RSA | 9a8126b91b1bfeb909ff0edf4643fc6a |
| SANs: api.timix.ai | ||||||
| CN=WR3,O=Google Trust Services,C=US (CA) | CN=GTS Root R1,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | RSA 2048 | SHA256-RSA | 7ff005a91568d63abc22861684aa4b5a |
| CN=GTS Root R1,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 19 Jun 2020 | 28 Jan 2028 | RSA 4096 | SHA256-RSA | 77bd0d6cdb36f91aea210fc4f058d30d |
DNSSEC insecure
Validation of api.timix.ai. — Not signed
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| ai. | present | 3799 | 8 | Verified |
| timix.ai. | absent | Unsigned (proven) parent-signed NSEC/NSEC3 proves an unsigned delegation |
Authentication Enforced and verified
The endpoint asked for a token and published valid RFC 9728 metadata describing how to get one.
| Result | Enforced and verified |
|---|---|
| Enforced | On tool calls |
| HTTP status | 200 |
WWW-Authenticate challenge Bearer resource_metadata="https://api.timix.ai/.well-known/oauth-protected-resource/api/integration/v1/mcp"
Bearer resource_metadata="https://api.timix.ai/.well-known/oauth-protected-resource/api/integration/v1/mcp" | Header | Value |
|---|---|
| content-security-policy | default-src 'self'; script-src 'self' 'nonce-CoIExtzimYUJeaGXSpwQ9Q==' 'self'; style-src 'self' 'nonce-CoIExtzimYUJeaGXSpwQ9Q==' https://fonts.googleapis.com; font-src 'self' https://fonts.gstatic.com; img-src 'self' data: https:; connect-src 'self' 'self' https://api.timix.ai wss://api.timix.ai; frame-ancestors 'none'; base-uri 'self'; form-action 'self'; upgrade-insecure-requests; |
| x-content-type-options | nosniff |
| x-frame-options | DENY |
| referrer-policy | strict-origin-when-cross-origin |
| permissions-policy | accelerometer=(), ambient-light-sensor=(), autoplay=(), battery=(), camera=(), display-capture=(), document-domain=(), encrypted-media=(), execution-while-not-rendered=(), execution-while-out-of-viewport=(), fullscreen=(self), geolocation=(), gyroscope=(), layout-animations=(self), legacy-image-formats=(), magnetometer=(), microphone=(), midi=(), navigation-override=(), oversized-images=(), payment=(), picture-in-picture=(), publickey-credentials-get=(), sync-xhr=(), usb=(), vr=(), wake-lock=(), screen-wake-lock=(), web-share=(), xr-spatial-tracking=() |
Protected resource metadata
| Document | https://api.timix.ai/.well-known/oauth-protected-resource/api/integration/v1/mcp |
|---|---|
| Retrieved | Yes |
| Resource | https://api.timix.ai/api/integration/v1/mcp |
| Authorisation server | https://api.timix.ai |
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://api.timix.ai/api/integration/v1/mcp | Verified | 200 | |
| http (plaintext) | http://api.timix.ai/api/integration/v1/mcp | HTTPS enforced | 302 | https://api.timix.ai/api/integration/v1/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability.
get_frame_order_utilization ~74
Report each frame order's contracted cap vs billed draw-down vs remaining, for both hours and amount, with utilization percentage. Optionally filtered by customer and/or status.
| Name | Type | Req | Description |
|---|---|---|---|
| customer_id | string | — | Filter by customer id (optional). |
| status | string | — | Filter by status: Open or Closed (optional). |
No output schema declared.
No examples provided.
get_hours_summary ~119
Get a summary of hours logged for a user or team over a date range
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | yes | End date for the summary period (ISO 8601 format, e.g. 2026-01-31) |
| scope | string | — | Scope of the summary: 'user' for individual user hours, 'team' for organization-wide overview. Defaults to 'user'. |
| start_date | string | yes | Start date for the summary period (ISO 8601 format, e.g. 2026-01-01) |
No output schema declared.
No examples provided.
get_import_template ~41
Return the CSV template for bulk-importing the work hierarchy (customers, projects, tasks, subtasks). Fill the template and call validate_import before commit_import.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
get_invoice ~35
Get the full details of a specific invoice by ID.
| Name | Type | Req | Description |
|---|---|---|---|
| invoice_id | string | yes | ID of the invoice to retrieve (required). |
No output schema declared.
No examples provided.
get_my_time_entries ~105
Get the current user's time entry analytics for a date range, including hours breakdown by project and customer, billable vs non-billable split, and target comparison
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | yes | End date for the analytics period (ISO 8601 format, e.g. 2026-01-31) |
| start_date | string | yes | Start date for the analytics period (ISO 8601 format, e.g. 2026-01-01) |
No output schema declared.
No examples provided.
get_project_status ~40
Get detailed project status including budget, hours, and task breakdown
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The unique identifier of the project to retrieve status for |
No output schema declared.
No examples provided.
get_project_team ~121
Get the people associated with a project: who is ASSIGNED to it (formally responsible / accountable) and the TOP CONTRIBUTORS by hours logged (who is actually doing the work and driving the budget/overrun). Use this to answer 'who is responsible for / working on a project', especially when a project is over budget. Budget-alert results include the project_id you can pass directly into this tool.
| Name | Type | Req | Description |
|---|---|---|---|
| project_id | string | yes | The unique identifier of the project. Resolve a project name to its ID with find_billing_work or list_projects first. |
No output schema declared.
No examples provided.
get_resource_utilization ~95
Get team resource utilization summary showing target hours, actual hours, billable hours, and utilization percentage for the organization
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | yes | End date for the utilization period (ISO 8601 format, e.g. 2026-01-31) |
| start_date | string | yes | Start date for the utilization period (ISO 8601 format, e.g. 2026-01-01) |
No output schema declared.
No examples provided.
get_unbilled_time ~38
Get a summary of unbilled time across the organization, including total hours, total amount, number of entries, and aging information
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
invite_user ~160
Invite a person to join your organization by email at a chosen role. The organization is fixed by your context - never pass an organization id. Valid roles: Admin, Finance, Manager, Member, Viewer (you can only invite at a role no more privileged than your own). The invitee receives an email with an acceptance link.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | Email address of the person to invite (required). | |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| role | string | yes | Role to grant on acceptance (required). One of: Admin, Finance, Manager, Member, Viewer. You cannot invite at a role more privileged than your own. |
No output schema declared.
No examples provided.
issue_invoice ~152
Issue a Draft invoice: assigns a gapless invoice number, locks the invoice as immutable, and marks source hours as Invoiced. IRREVERSIBLE — corrections require void + reissue. Call once with no token to preview; re-call with the returned confirm_token and an idempotency_key to commit.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_token | string | — | Token returned by the preview (call this tool once with no token to get it). Required to commit; expires in ~10 minutes. |
| idempotency_key | string | — | Required when committing (confirm_token present): retrying with the same key returns the original result instead of acting twice. |
| invoice_id | string | yes | Id of the Draft invoice to issue. |
No output schema declared.
No examples provided.
list_customers ~16
List all customers in the organization
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_favorites ~22
List the current user's saved time-entry favorites (quick-entry shortcuts).
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
list_invoices ~100
List invoices for your organization, optionally filtered by customer and status.
| Name | Type | Req | Description |
|---|---|---|---|
| customer_id | string | — | Optional: filter by customer ID. |
| page_number | integer | — | Page number, 1-based (default 1). |
| page_size | integer | — | Number of results per page (default 20, max 100). |
| status | string | — | Optional: filter by invoice status (e.g. Draft, Issued, Paid, Void). |
No output schema declared.
No examples provided.
list_my_time_entries ~152
List the current user's own individual time entries for a date range, with project name, task/subtask ids, hours, description, billable flag and status. Use this to see exactly what was logged (the per-entry detail), as opposed to aggregated totals.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | yes | End date of the range (ISO 8601 format, e.g. 2026-01-31) |
| limit | integer | — | Optional maximum number of entries to return (1-200, default 200). Entries are returned most-recent first. |
| start_date | string | yes | Start date of the range (ISO 8601 format, e.g. 2026-01-01) |
No output schema declared.
No examples provided.
list_projects ~37
List all projects in the organization with their status and budget information
| Name | Type | Req | Description |
|---|---|---|---|
| customer_id | string | — | Optional customer ID to filter projects by customer |
No output schema declared.
No examples provided.
list_recycle_bin ~88
List soft-deleted entities currently in the recycle bin, optionally filtered by entity type and paged.
| Name | Type | Req | Description |
|---|---|---|---|
| entity_type | string | — | Filter by type: Customer, Project, Task, or SubTask. Omit for all types. |
| page | number | — | 1-based page number (default 1). |
| page_size | number | — | Items per page (default 20). |
No output schema declared.
No examples provided.
list_scheduled_reports ~19
List all scheduled report definitions for the organization.
Input schema present but exposes no named parameters.
No output schema declared.
No examples provided.
log_time ~189
Create a single time entry on a subtask for the current user. Requires permission to log time.
| Name | Type | Req | Description |
|---|---|---|---|
| date | string | yes | Date of the work (ISO 8601 format, e.g. 2026-01-15). |
| hours | number | yes | Number of hours worked (greater than 0 and at most 24). |
| start_time | string | — | Optional start time of day in 24-hour HH:mm (e.g. "12:00"). Set this when the user gives a specific time or a time range (and put the range length in 'hours'); the entry then runs from this time for… |
| subtask_id | string | yes | Id of the subtask to log time against. All time entries are recorded at the subtask level. |
| text | string | — | Optional description of the work performed. |
No output schema declared.
No examples provided.
manage_user_work_schedule ~200
Manage YOUR OWN personal work schedule. action is one of: create, update, delete, assign (assign = make a schedule your active one). For update/delete/assign, provide schedule_id. default_hours is your standard daily hours (for a simple schedule). The organization is fixed by your context, and you can only manage your own schedule.
| Name | Type | Req | Description |
|---|---|---|---|
| action | string | yes | What to do (required): create, update, delete, or assign. |
| default_hours | number | — | Standard daily working hours for a simple schedule (e.g. 8). |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| is_active | boolean | — | Whether this schedule is active (create/update). |
| name | string | — | Optional schedule notes/name. |
| schedule_id | string | — | Id of your schedule (required for update, delete, assign). |
No output schema declared.
No examples provided.
mark_invoice_paid ~130
Mark an issued or sent invoice as Paid. Optionally record the paid amount and payment date. Returns a preview unless confirm=true is set.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | — | Set true to perform the action. Omit or false returns a preview only — nothing is written. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| invoice_id | string | yes | Id of the invoice to mark as paid. |
| paid_date | string | — | Optional payment date (ISO 8601). Defaults to today. |
No output schema declared.
No examples provided.
mark_time_invoiced ~137
Mark one or more time reports as invoiced, optionally linking them to an existing invoice. Requires Manager role or above.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | — | Set true to perform the action. Omit or false returns a preview only — nothing is written. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| invoice_id | string | — | Optional ID of an existing invoice to link these time reports to. |
| time_report_ids | array | yes | List of time report IDs to mark as invoiced (required, at least one). |
No output schema declared.
No examples provided.
move_project ~108
Move a billing project to a different customer within your organization. Both the project and the destination customer must belong to your organization. Requires Manager role or above.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| new_customer_id | string | yes | ID of the destination customer (required, must belong to your organization). |
| project_id | string | yes | ID of the project to move (required). |
No output schema declared.
No examples provided.
move_subtask ~112
Move a subtask to a different task within your organization. Both the subtask and the destination task must belong to your organization. Requires Manager role or above.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| new_task_id | string | yes | ID of the destination task (required, must belong to your organization). |
| subtask_id | string | yes | ID of the subtask to move (required). |
No output schema declared.
No examples provided.
move_task ~108
Move a task to a different billing project within your organization. Both the task and the destination project must belong to your organization. Requires Manager role or above.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| new_project_id | string | yes | ID of the destination project (required, must belong to your organization). |
| task_id | string | yes | ID of the task to move (required). |
No output schema declared.
No examples provided.
permanent_delete_entity ~196
Permanently and IRREVERSIBLY hard-delete an entity from the recycle bin. The entity and all its children are removed from the database — this cannot be undone. Requires Admin role. Call once with no token to preview; re-call with the returned confirm_token and an idempotency_key to commit. entity_type must be one of: Customer, Project, Task, SubTask.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_token | string | — | Token returned by the preview (call this tool once with no token to get it). Required to commit; expires in ~10 minutes. |
| entity_id | string | yes | Id of the recycle-bin entity to permanently delete. |
| entity_type | string | yes | Type of entity to permanently delete. One of: Customer, Project, Task, SubTask. |
| idempotency_key | string | — | Required when committing (confirm_token present): retrying with the same key returns the original result instead of acting twice. |
No output schema declared.
No examples provided.
recall_timesheet ~123
Withdraw your submitted timesheet for a given month back to Draft (un-submit), reopening entries for editing. Only valid while the period is Submitted — after approval ask a manager to reopen it. Supply year and month (1-12).
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| month | integer | yes | Calendar month to recall (1-12). |
| year | integer | yes | Calendar year of the month to recall (e.g. 2026). |
No output schema declared.
No examples provided.
reissue_invoice ~167
Void an issued invoice and clone it into a new editable Draft (void + reissue). The original is voided and retained for audit; the new Draft can be edited then re-issued. The void is IRREVERSIBLE. Call once with no token to preview; re-call with the returned confirm_token and an idempotency_key to commit.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_token | string | — | Token returned by the preview (call this tool once with no token to get it). Required to commit; expires in ~10 minutes. |
| idempotency_key | string | — | Required when committing (confirm_token present): retrying with the same key returns the original result instead of acting twice. |
| invoice_id | string | yes | Id of the issued invoice to void and reissue as a new Draft. |
No output schema declared.
No examples provided.
reject_timesheet ~178
Reject a submitted timesheet period, returning it to the reporter for correction. The period and its time reports revert to Rejected (editable). A rejection comment is required. Use confirm=true to proceed. Requires Manager or Admin/Owner role (Finance is excluded — timesheet approval is PM work, not finance).
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | yes | Rejection reason shown to the reporter. Required so they know what to fix. |
| confirm | boolean | — | Set true to perform the action. Omit or false returns a preview only — nothing is written. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| submission_period_id | string | yes | Id of the submission period to reject (from get_pending_approvals or list_approval_history). |
No output schema declared.
No examples provided.
remove_user ~143
Permanently remove an organization member. This action is IRREVERSIBLE — the user must be re-invited to rejoin. Returns a preview; re-call with the confirm_token and an idempotency_key to commit.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_token | string | — | Token returned by the preview (call this tool once with no token to get it). Required to commit; expires in ~10 minutes. |
| idempotency_key | string | — | Required when committing (confirm_token present): retrying with the same key returns the original result instead of acting twice. |
| org_user_id | string | yes | Id of the OrganizationUser record to remove (not the Firebase userId). |
No output schema declared.
No examples provided.
remove_user_from_customer ~127
Remove a user's assignment from a customer, revoking their access to the customer's projects and tasks. Requires confirm=true to proceed.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | — | Set true to perform the action. Omit or false returns a preview only — nothing is written. |
| customer_id | string | yes | Id of the customer to remove the user from. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| org_user_id | string | yes | OrganizationUsers.Id of the member to unassign. |
No output schema declared.
No examples provided.
remove_user_project ~147
Remove an organization member's assignment from a specific project. The user will no longer have direct visibility to that project (they may still see it via a customer assignment). Requires org_user_id and project_id. The organization is fixed by your context — never pass an organization id. You cannot target a user more privileged than yourself.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| org_user_id | string | yes | Id of the OrganizationUser to remove from the project (not the Firebase user id). |
| project_id | string | yes | Id of the project to remove the user from. |
No output schema declared.
No examples provided.
reopen_month ~160
Reopen a previously closed billing month, allowing time to be logged and edited again. Call once with no token to preview; re-call with the returned confirm_token and an idempotency_key to commit. Reversible only by closing the month again.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm_token | string | — | Token returned by the preview (call this tool once with no token to get it). Required to commit; expires in ~10 minutes. |
| idempotency_key | string | — | Required when committing (confirm_token present): retrying with the same key returns the original result instead of acting twice. |
| month | integer | yes | Calendar month to reopen (1-12). |
| year | integer | yes | Calendar year of the month to reopen (e.g. 2026). |
No output schema declared.
No examples provided.
reopen_timesheet ~194
Reopen a Submitted or Approved timesheet period for corrections. The period and its time reports revert to Rejected (editable), allowing the reporter to edit and resubmit. Use this when an approved period needs fixing. An optional comment can be provided. Use confirm=true to proceed. Requires Manager or Admin/Owner role (Finance is excluded — timesheet approval is PM work, not finance).
| Name | Type | Req | Description |
|---|---|---|---|
| comment | string | — | Optional comment explaining why the period is being reopened. Shown to the reporter. |
| confirm | boolean | — | Set true to perform the action. Omit or false returns a preview only — nothing is written. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| submission_period_id | string | yes | Id of the submission period to reopen (from get_pending_approvals or list_approval_history). |
No output schema declared.
No examples provided.
resend_invite ~99
Re-send a pending invitation email to the invitee and reset its status to Pending. Requires the invite_id (discover it via list of pending invites). The organization is fixed by your context — never pass an organization id.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| invite_id | string | yes | Id of the pending invitation to resend. |
No output schema declared.
No examples provided.
restore_entity ~125
Restore a soft-deleted entity (customer, project, task, or subtask) and all its children from the recycle bin. Requires Admin role. entity_type must be one of: Customer, Project, Task, SubTask.
| Name | Type | Req | Description |
|---|---|---|---|
| entity_id | string | yes | Id of the deleted entity to restore. |
| entity_type | string | yes | Type of entity to restore. One of: Customer, Project, Task, SubTask. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
No output schema declared.
No examples provided.
search ~77
Search the organization's work-structure entities (customers, projects, tasks, subtasks, users) by id or name. Returns a flat, assignment-scoped result list.
| Name | Type | Req | Description |
|---|---|---|---|
| limit | number | — | Maximum results to return (default 30). |
| query | string | yes | Search text — matches by entity id (prefix) and name (contains). |
No output schema declared.
No examples provided.
send_invoice ~111
Mark an issued invoice as Sent to the customer. The invoice must already be in Issued status. Returns a preview unless confirm=true is set.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | — | Set true to perform the action. Omit or false returns a preview only — nothing is written. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| invoice_id | string | yes | Id of the issued invoice to mark as sent. |
No output schema declared.
No examples provided.
set_budget_thresholds ~197
Set the organization-level budget alert thresholds. budget_warning_threshold_percent is the utilization % at which a project is flagged At-Risk; budget_critical_threshold_percent is the % at which it is flagged Over-Budget. The warning threshold must be strictly less than the critical threshold. Supply one or both — only the fields you provide are changed (PATCH semantics). The organization is fixed by your context — never pass an organization id.
| Name | Type | Req | Description |
|---|---|---|---|
| budget_critical_threshold_percent | integer | — | Utilization % at which a project is flagged Over-Budget (must be greater than the warning threshold, 2-100). |
| budget_warning_threshold_percent | integer | — | Utilization % at which a project is flagged At-Risk (must be less than the critical threshold, 1-99). |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
No output schema declared.
No examples provided.
set_custom_field_value ~226
Set the value of a custom field on a specific entity (a project, task, subtask, time report, or customer). The custom field must already be defined for that entity type. The organization is fixed by your context. You must have permission to update the target entity.
| Name | Type | Req | Description |
|---|---|---|---|
| entity | string | yes | The entity type (required). One of: billing_projects, billing_tasks, billing_sub_tasks, sub_tasks_time_reports, billing_customers. |
| entity_id | string | yes | Id of the specific entity instance to set the value on (required). Must be in your organization. |
| field_id | string | yes | The field_id of the custom field definition (required). Must be defined for this entity type. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| value | string | yes | The value to set, as a string. It is validated/coerced to the field's declared type (Number, Date, DateTime, or one of the list options). |
No output schema declared.
No examples provided.
set_org_work_schedule ~335
Create or update a named organization-level work schedule (a weekly working-time profile). Provide schedule_id to update an existing one, or omit it to create a new one. weekly_schedule is a JSON object mapping lowercase day names to a working window, e.g. {"monday":{"start":"09:00","end":"18:00"},"saturday":null}. The organization is fixed by your context. On update, only the fields you supply are changed.
| Name | Type | Req | Description |
|---|---|---|---|
| default_for_countries | string | — | Optional comma-separated ISO-2 country codes this profile is the default for, e.g. "US,CA". |
| first_day_of_week | integer | — | First day of the week: 0=Sunday .. 6=Saturday (1=Monday default). |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| is_active | boolean | — | Whether the profile is active. Defaults to true on create. |
| name | string | — | Schedule name (required when creating). |
| notes | string | — | Optional free-text notes. |
| schedule_id | string | — | Id of an existing schedule to UPDATE. Omit to CREATE a new one. |
| weekly_schedule | string | — | A JSON object (as a string) mapping lowercase day names (sunday..saturday) to a {"start":"HH:mm","end":"HH:mm"} window, or null for a non-working day. Example: {"monday":{"start":"09:00","end":"18:00… |
No output schema declared.
No examples provided.
set_user_cost_rate ~219
Set the internal hourly COST rate for one member of your organization (used for profit/margin reporting). The organization is fixed by your context - never pass an organization id. You cannot set your own cost rate. The rate value is never echoed back.
| Name | Type | Req | Description |
|---|---|---|---|
| currency | string | — | Optional ISO 4217 currency code (e.g. USD, EUR). Defaults to USD. |
| effective_from | string | — | Optional date this rate takes effect (YYYY-MM-DD). Defaults to today. |
| effective_to | string | — | Optional date this rate stops applying (YYYY-MM-DD). Omit for an open-ended rate. |
| hourly_rate | number | yes | The hourly cost rate, a positive number (required). |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| user_id | string | yes | Id (or Firebase UID) of the member whose cost rate is being set (required). Must be a member of your organization; cannot be yourself. |
No output schema declared.
No examples provided.
start_timer ~130
Start (or replace) your running timer on a subtask. There is at most one running timer per user; starting a new one replaces any existing. Stop it later with stop_timer to create a Draft time entry, or cancel it with cancel_timer to discard it. Supply subtask_id.
| Name | Type | Req | Description |
|---|---|---|---|
| description | string | — | Optional description of the work being tracked. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| subtask_id | string | yes | Id of the subtask to track time against. |
No output schema declared.
No examples provided.
stop_timer ~68
Stop your running timer. The elapsed time is computed and a Draft time entry is created automatically. Returns the created time entry. No arguments needed.
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
No output schema declared.
No examples provided.
submit_timesheet ~119
Submit your time entries for a given month for manager approval. Draft and Rejected entries in the month are transitioned to Submitted. A billing-closed month cannot be submitted. Supply year and month (1-12).
| Name | Type | Req | Description |
|---|---|---|---|
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| month | integer | yes | Calendar month to submit (1-12). |
| year | integer | yes | Calendar year of the month to submit (e.g. 2026). |
No output schema declared.
No examples provided.
suggest_holiday_profile ~165
Look up the official public/national holidays for a country (ISO-2 code, e.g. US, IL, GB) and year from an authoritative public source (Hebcal for Israel, Nager.Date for everywhere else). Returns a DRAFT list of holiday dates: each is either a full day off or a half/partial working day (with a start/end working window). Use this to PROPOSE a holiday profile — never invent holiday dates from memory. The dates returned are authoritative for that exact year.
| Name | Type | Req | Description |
|---|---|---|---|
| country | string | yes | ISO-2 country code (two letters), e.g. "US", "IL", "GB", "DE". |
| year | integer | yes | The calendar year to look up holidays for (e.g. 2026). |
No output schema declared.
No examples provided.
undo_write_off ~128
Reverse the most-recent write-off on a time report, restoring the written-off hours to the billable pool. The billing month must still be open. Requires Finance role or above.
| Name | Type | Req | Description |
|---|---|---|---|
| confirm | boolean | — | Set true to perform the action. Omit or false returns a preview only — nothing is written. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| time_report_id | string | yes | ID of the time report whose most-recent write-off should be reversed (required). |
No output schema declared.
No examples provided.
update_custom_field ~202
Update an existing custom field definition (title, type, options, or mandatory flag) in your organization. The organization is fixed by your context. You cannot change a field's field_id or the entity it applies to. Only the properties you supply are changed.
| Name | Type | Req | Description |
|---|---|---|---|
| field_definition_id | string | yes | Id of the custom field definition to update (required). Must belong to your organization. |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| is_mandatory | boolean | — | Whether a value is required when creating/updating the entity. |
| list_of_values | array | — | New options (for a ListOfValues field; at least one non-blank option). |
| title | string | — | New human-readable label. |
| type | string | — | New field data type. One of: String, Number, Date, DateTime, ListOfValues. |
No output schema declared.
No examples provided.
update_customer ~217
Update an existing billing customer in your organization. Only the fields you provide are changed; everything else is left as-is (PATCH semantics). Discover ids with find_billing_work - never ask the user for an id.
| Name | Type | Req | Description |
|---|---|---|---|
| contact_email | string | — | Primary contact email address. |
| contact_name | string | — | Primary contact person name. |
| contact_phone | string | — | Primary contact phone number. |
| country | string | — | Customer country. |
| currency | string | — | ISO 4217 currency code (e.g. USD, EUR). |
| customer_id | string | yes | Id of the customer to update (required). Must be a customer in your organization. |
| description | string | — | Customer description (max 200 characters). |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| name | string | — | New customer name (2-50 characters). |
| status | string | — | Customer status. One of: Active, Inactive. |
No output schema declared.
No examples provided.
update_draft_invoice ~189
Update editable fields on a DRAFT invoice (notes, internal notes, payment terms, payment instructions, due date, purchase order number). Only valid while the invoice is still a Draft.
| Name | Type | Req | Description |
|---|---|---|---|
| due_date | string | — | Due date override (ISO 8601). |
| idempotency_key | string | — | Optional caller-supplied key; retrying with the same key returns the original result instead of acting twice. |
| internal_notes | string | — | Internal notes (not on the printed invoice). |
| invoice_id | string | yes | Id of the draft invoice to update. |
| notes | string | — | Notes to appear on the invoice. |
| payment_instructions | string | — | Bank / payment instructions for the customer. |
| payment_terms | string | — | Payment terms, e.g. "Net 30". |
| purchase_order_number | string | — | Customer PO number to reference on the invoice. |
No output schema declared.
No examples provided.