{"openapi":"3.1.0","info":{"title":"Tick (BYOK) API","version":"0.1.0","description":"Tick (BYOK) lets an AI assistant read your own Tick data through the Tick API with a key you supply (Tick API token (the api_token of your role, from GET /roles.json)). Read-only: 11 tools (list_projects, list_closed_projects, get_project, list_project_tasks, list_tasks, get_task, list_clients, get_client, list_entries, get_entry, list_users). The BYOK key travels with each request, is used for...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-tick.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-tick/docs"},"termsOfService":"https://connectorbay.com/byok-tick/terms"},"servers":[{"url":"https://byok-tick.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-tick/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_projects":{"post":{"operationId":"list_projects","summary":"List the open Tick projects with name, budget, billable flag, client and owner. Page-numbered. Use for \"Which projects a","description":"List the open Tick projects with name, budget, billable flag, client and owner. Page-numbered. Use for \"Which projects are open in Tick\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (up to 100 records per page).","title":"Page"}},"required":["subscription_id"],"title":"list_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_closed_projects":{"post":{"operationId":"list_closed_projects","summary":"List the closed Tick projects with name, budget, close date, client and owner. Page-numbered. Use for \"Which Tick projec","description":"List the closed Tick projects with name, budget, close date, client and owner. Page-numbered. Use for \"Which Tick projects have been closed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (up to 100 records per page).","title":"Page"}},"required":["subscription_id"],"title":"list_closed_projectsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_project":{"post":{"operationId":"get_project","summary":"Get one Tick project by id, including total hours logged. Use for \"Show Tick project 1 and its total hours\".","description":"Get one Tick project by id, including total hours logged. Use for \"Show Tick project 1 and its total hours\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"project_id":{"description":"Numeric project id from list_projects.","title":"Project Id","type":"integer"}},"required":["subscription_id","project_id"],"title":"get_projectArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_project_tasks":{"post":{"operationId":"list_project_tasks","summary":"List the open tasks of one Tick project with name, budget, position and billable flag. Page-numbered. Use for \"What task","description":"List the open tasks of one Tick project with name, budget, position and billable flag. Page-numbered. Use for \"What tasks are in Tick project 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"project_id":{"description":"Numeric project id from list_projects.","title":"Project Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (up to 100 records per page).","title":"Page"}},"required":["subscription_id","project_id"],"title":"list_project_tasksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_tasks":{"post":{"operationId":"list_tasks","summary":"List all open Tick tasks across projects with name, project, budget and billable flag. Page-numbered. Use for \"List all ","description":"List all open Tick tasks across projects with name, project, budget and billable flag. Page-numbered. Use for \"List all open tasks in Tick\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (up to 100 records per page).","title":"Page"}},"required":["subscription_id"],"title":"list_tasksArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_task":{"post":{"operationId":"get_task","summary":"Get one Tick task by id with name, project, budget and billable flag. Use for \"Show Tick task 11\".","description":"Get one Tick task by id with name, project, budget and billable flag. Use for \"Show Tick task 11\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"task_id":{"description":"Numeric task id from list_tasks.","title":"Task Id","type":"integer"}},"required":["subscription_id","task_id"],"title":"get_taskArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_clients":{"post":{"operationId":"list_clients","summary":"List the open (non-archived) Tick clients with name and last update. Page-numbered. Use for \"Who are our clients in Tick","description":"List the open (non-archived) Tick clients with name and last update. Page-numbered. Use for \"Who are our clients in Tick\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (up to 100 records per page).","title":"Page"}},"required":["subscription_id"],"title":"list_clientsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_client":{"post":{"operationId":"get_client","summary":"Get one Tick client by id with name and archive flag. Use for \"Show Tick client 7\".","description":"Get one Tick client by id with name and archive flag. Use for \"Show Tick client 7\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"client_id":{"description":"Numeric client id from list_clients.","title":"Client Id","type":"integer"}},"required":["subscription_id","client_id"],"title":"get_clientArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_entries":{"post":{"operationId":"list_entries","summary":"List Tick time entries between two dates with date, hours, notes, task and user. Optionally filter by project, task, use","description":"List Tick time entries between two dates with date, hours, notes, task and user. Optionally filter by project, task, user or billed state. Page-numbered. Use for \"How many hours were logged in Tick last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"start_date":{"description":"First day to include (YYYY-MM-DD).","maxLength":10,"title":"Start Date","type":"string"},"end_date":{"description":"Last day to include (YYYY-MM-DD).","maxLength":10,"title":"End Date","type":"string"},"project_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only entries of this project id.","title":"Project Id"},"task_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only entries of this task id.","title":"Task Id"},"user_id":{"anyOf":[{"type":"integer"},{"type":"null"}],"default":null,"description":"Only entries of this user id.","title":"User Id"},"billable":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for billable entries only, false for non-billable only.","title":"Billable"},"billed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for already-billed entries only, false for unbilled only.","title":"Billed"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (up to 100 records per page).","title":"Page"}},"required":["subscription_id","start_date","end_date"],"title":"list_entriesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_entry":{"post":{"operationId":"get_entry","summary":"Get one Tick time entry by id with date, hours, notes, task and user. Use for \"Show Tick time entry 501\".","description":"Get one Tick time entry by id with date, hours, notes, task and user. Use for \"Show Tick time entry 501\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"entry_id":{"description":"Numeric entry id from list_entries.","title":"Entry Id","type":"integer"}},"required":["subscription_id","entry_id"],"title":"get_entryArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_users":{"post":{"operationId":"list_users","summary":"List the users of the Tick subscription with name, email and timezone. Page-numbered. Use for \"Who are the users in our ","description":"List the users of the Tick subscription with name, email and timezone. Page-numbered. Use for \"Who are the users in our Tick account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subscription_id":{"description":"Your Tick subscription id (the number in your Tick URL, for example 123456 in tickspot.com/123456/).","title":"Subscription Id","type":"integer"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1 (up to 100 records per page).","title":"Page"}},"required":["subscription_id"],"title":"list_usersArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}