{"openapi":"3.1.0","info":{"title":"Everhour (BYOK) API","version":"0.1.0","description":"Everhour (BYOK) lets an AI assistant read your own Everhour data through the Everhour API with a key you supply (API key). Read-only: 11 tools (get_current_user, list_users, list_projects, list_project_tasks, search_tasks, list_time_records, list_project_time_records, list_team_timers, list_clients, list_invoices, list_assignments). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-everhour.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-everhour/docs"},"termsOfService":"https://connectorbay.com/byok-everhour/terms"},"servers":[{"url":"https://byok-everhour.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-everhour/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/get_current_user":{"post":{"operationId":"get_current_user","summary":"Show the Everhour user who owns the API key: id, name, role, status, type and time zone offset. Use for \"Which Everhour ","description":"Show the Everhour user who owns the API key: id, name, role, status, type and time zone offset. Use for \"Which Everhour user is my API key for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_current_userArguments","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 team members with id, name, role, status, type and groups; filter by name or email. Use for \"Who is on my Everh","description":"List the team members with id, name, role, status, type and groups; filter by name or email. Use for \"Who is on my Everhour team\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only users whose name or email contains this text.","title":"Query"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Maximum number of users to return.","title":"Limit"}},"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}},"/v1/tools/list_projects":{"post":{"operationId":"list_projects","summary":"List projects you can access with id, name, type, client id, assigned user ids and billing type; search by name or filte","description":"List projects you can access with id, name, type, client id, assigned user ids and billing type; search by name or filter by integration. Use for \"What projects do I have in Everhour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only projects whose name contains this text.","title":"Query"},"platform":{"anyOf":[{"enum":["ev","as","b3","b2","pv","gh","in","tr","jr"],"type":"string"},{"type":"null"}],"default":null,"description":"Only projects from this integration: ev (Everhour), as (Asana), b3 or b2 (Basecamp), pv (Pivotal), gh (GitHub), in (Insightly), tr (Trello), jr (Jira).","title":"Platform"},"limit":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many projects to return (default 100).","title":"Limit"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"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_project_tasks":{"post":{"operationId":"list_project_tasks","summary":"List the tasks of a project with status, due date, labels, tracked time and estimate. Set exclude_closed to hide complet","description":"List the tasks of a project with status, due date, labels, tracked time and estimate. Set exclude_closed to hide completed tasks. Use for \"What open tasks are in Everhour project ev:1234567890\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Everhour project id as returned by list_projects, for example 'ev:1234567890' or 'as:1234567890'.","maxLength":200,"title":"Project Id","type":"string"},"exclude_closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to leave out closed and completed tasks.","title":"Exclude Closed"},"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only tasks whose name contains this text.","title":"Query"},"limit":{"anyOf":[{"maximum":250,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"Tasks per page (1 to 250).","title":"Limit"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["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/search_tasks":{"post":{"operationId":"search_tasks","summary":"Search tasks across all projects by name, optionally inside one project or including closed tasks. Use for \"Find Everhou","description":"Search tasks across all projects by name, optionally inside one project or including closed tasks. Use for \"Find Everhour tasks about onboarding\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"description":"Text to search for in task names.","maxLength":100,"title":"Query","type":"string"},"project":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Limit the search to this project id.","title":"Project"},"search_in_closed":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to also search closed and completed tasks.","title":"Search In Closed"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"Maximum results (1 to 100).","title":"Limit"}},"required":["query"],"title":"search_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_time_records":{"post":{"operationId":"list_time_records","summary":"List time records of the whole team for a date range (today only when no dates are given): date, seconds tracked, user i","description":"List time records of the whole team for a date range (today only when no dates are given): date, seconds tracked, user id, task and comment. Time is in seconds. Use for \"How much time did my team log in Everhour last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Date in YYYY-MM-DD format. Start of the range.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Date in YYYY-MM-DD format. End of the range.","title":"To Date"},"limit":{"anyOf":[{"maximum":50000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1000,"description":"Maximum records per page (up to 50000).","title":"Limit"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"title":"list_time_recordsArguments","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_time_records":{"post":{"operationId":"list_project_time_records","summary":"List time records logged on one project by all users, optionally for a date range. Time is in seconds. Use for \"How much","description":"List time records logged on one project by all users, optionally for a date range. Time is in seconds. Use for \"How much time was logged on Everhour project ev:1234567890 this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Everhour project id as returned by list_projects, for example 'ev:1234567890' or 'as:1234567890'.","maxLength":200,"title":"Project Id","type":"string"},"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Date in YYYY-MM-DD format. Start of the range.","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Date in YYYY-MM-DD format. End of the range.","title":"To Date"},"limit":{"anyOf":[{"maximum":50000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1000,"description":"Maximum records per page.","title":"Limit"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["project_id"],"title":"list_project_time_recordsArguments","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_team_timers":{"post":{"operationId":"list_team_timers","summary":"List the timers running now across the team: user, task, status, seconds tracked and start time. Use for \"Who is trackin","description":"List the timers running now across the team: user, task, status, seconds tracked and start time. Use for \"Who is tracking time in Everhour right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_team_timersArguments","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 clients with id, name and project ids; search by name. Use for \"Who are my Everhour clients\".","description":"List clients with id, name and project ids; search by name. Use for \"Who are my Everhour clients\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"query":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only clients whose name contains this text.","title":"Query"}},"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/list_invoices":{"post":{"operationId":"list_invoices","summary":"List invoices with client, status, issue and due dates, amounts and total time. Use for \"Which Everhour invoices are sti","description":"List invoices with client, status, issue and due dates, amounts and total time. Use for \"Which Everhour invoices are still unpaid\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_invoicesArguments","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_assignments":{"post":{"operationId":"list_assignments","summary":"List resource planner assignments and time off between dates: user, project, start and end date, hours per day. Use for ","description":"List resource planner assignments and time off between dates: user, project, start and end date, hours per day. Use for \"Who is scheduled on Everhour project ev:1234567890 next week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"type":{"anyOf":[{"enum":["assignment","time-off"],"type":"string"},{"type":"null"}],"default":null,"description":"Only this kind of entry: assignment or time-off.","title":"Type"},"project":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only assignments for this project id.","title":"Project"},"from_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries starting from this date (YYYY-MM-DD).","title":"From Date"},"to_date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries ending by this date (YYYY-MM-DD).","title":"To Date"}},"title":"list_assignmentsArguments","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}}}}