Everhour integration for AI agents.
Everhour integration for AI agents with secure authentication and server-side credential injection. Open Connector runs the OAuth, seals the token in an encrypted vault, and serves Everhour tools to your agent over MCP or a typed API — credentials injected server-side, every call audited, nothing leaving your infrastructure. Open source (AGPL-3.0) and self-hostable.
Real Everhour actions, managed and audited.
Your user connects Everhour once; your agent can then time tracking with built-in billing and budgeting. Set project budgets, track billable hours, and get threshold alerts—all inside Asana, ClickUp, Monday, Jira & more. Free trial — scoped to the OAuth permissions you grant and the tool allowlist you configure. Every action is least-privilege and written to a tamper-evident audit trail.
- 1
Your user grants Everhour access once (OAuth) — the token lands in the vault.
- 2
Your agent calls a tool over MCP or the typed API; Open Connector injects the credential server-side.
- 3
Every routed call appends a hash-chained audit record — nothing leaves your infra.
Supported Everhour tools.
101 tools are generated from the published Everhour catalog. Descriptions are plain text; each action remains subject to its configured authentication and tool allowlist.
Showing 101 tools. All published catalog entries are included in this page's server-rendered HTML.
- Add Attachment To Expense
- Attach a previously uploaded file (by its token from `POST /attachments`) to an existing expense.
- Expenses
- Add Time
- Add a time record (in seconds) for a user on a given task and date. **Upsert:** at most one time record exists per `(user, date, task)`. Posting again with the same combination updates the existing record's duration instead of creating a duplicate. To update a specific record by ID, use `PUT /time/{time_id}`. See [Dates](/dates-and-timezones) for accepted date and duration formats.
- Time Records
- Approve or Reject Approval Request
- Approve or reject an existing timesheet approval request. Use this endpoint to act on a request previously created with `POST /timesheets/{timesheet_id}/approval`. The response reflects the resulting approval state.
- Timesheets
- Approve Week/Request for Approval
- Submit a timesheet week for approval. The week's owner uses this endpoint to request review; an approver acts on the request via `PUT /timesheets/{timesheet_id}/approval`. The `timesheet_id` is the concatenation of `user_id` and a 4-digit `week_id` in `YYWW` format (no separator). Example: user `14856` for week `2535` (week 35 of 2025) → `timesheet_id = 148562535`. See the Timesheets overview for the full Week ID definition.
- Timesheets
- Archive/Unarchive Project
- Archive or unarchive a project. Archived projects are hidden from default listings but their data is preserved.
- Projects
- Clients Report
- Aggregated client report. Same filters and units as `GET /dashboards/projects` — see [Concepts](/concepts).
- Reports
- Clock In
- Clock a user in. Starts a new timecard segment at the current time.
- Timecards
- Clock Out
- Clock a user out. Closes the current timecard segment.
- Timecards
- Create Allocation
- Create a time-off allocation for a user and time-off type.
- Time Off
- Create Assignment
- Create a schedule assignment. To create time-off use `POST /resource-planner/assignments/time-off` instead.
- Schedule
- Create Attachment
- Upload a file and receive a one-time attachment token. The token can then be attached to an expense via `POST /expenses/{expense_id}/attachments` or included in `POST /expenses`.
- Expenses
- Create Category
- Create a new expense category.
- Expenses
- Create Client
- Create a new client. Names are not deduplicated — posting the same name creates another client.
- Clients
- Create Expense
- Log a new expense. Amounts are in cents (see [Concepts](/concepts)); attach files first via `POST /attachments` and reference their IDs in the request body.
- Expenses
- Create Field in Project
- Create a new custom field on a project.
- Custom Fields
- Create Invoice
- Create an invoice for a client. The invoice is generated from the client's tracked time over the requested date range — see [Dates](/dates-and-timezones).
- Invoices
- Create Project
- Create a new project. To copy from an existing template use the `template` or `publicTemplate` body field. To sync a project from a connected integration use `POST /projects/{project_id}/sync` instead.
- Projects
- Create Section
- Create a new section in a project.
- Projects
- Create Task
- Create a task in a project. For tasks coming from connected integrations, sync them via `POST /projects/{project_id}/sync` instead.
- Tasks
- Create Time Off Type
- Create a new time-off type.
- Time Off
- Create Webhook
- Register a new webhook subscription. **Handshake:** on create, Everhour sends a POST to the supplied `targetUrl` with an `X-Hook-Secret` header (HMAC-SHA512) and an empty body. The receiver must respond with a 2xx status to complete verification. Send `X-Skip-Handshake: 1` to skip verification when the receiver cannot participate. **Scope:** a webhook can listen across the whole team or be scoped to a single project. See [Webhooks](/webhooks) for event types, payload structure, and delivery semantics.
- Webhooks
- Delete Allocation
- Delete a time-off allocation.
- Time Off
- Delete Assignment
- Delete a schedule assignment. You can include an optional `reason` (max 1000 characters) in the request body.
- Schedule
- Delete Attachment
- Delete an attachment and its underlying file.
- Expenses
- Delete Category
- Delete an expense category. Expenses already assigned to it are kept but become uncategorized.
- Expenses
- Delete Client
- Delete a client.
- Clients
- Delete Client Budget
- Remove the budget attached to a client. The client itself is kept.
- Clients
- Delete Expense
- Delete an expense entry. Attached files are also removed.
- Expenses
- Delete Field
- Delete a custom field. Existing task values for that field are discarded.
- Custom Fields
- Delete Invoice
- Delete an invoice. Time records attached to the invoice are released and become billable again.
- Invoices
- Delete Project
- Delete a project, its tasks, and all associated time records. This is irreversible.
- Projects
- Delete Section
- Delete a section. Tasks in the section are kept but become section-less.
- Projects
- Delete Task
- Delete a task and all of its time records.
- Tasks
- Delete Task Estimate
- Remove a task's estimate.
- Tasks
- Delete Time Off Type
- Delete a time-off type. Existing time-off entries that reference it are kept.
- Time Off
- Delete Time Record
- Remove a time record by setting its duration to zero. The history trail is preserved; the row no longer appears in time listings, which filter for `time > 0`.
- Time Records
- Delete Timecard
- Delete a user's timecard entry for a specific date.
- Timecards
- Delete Webhook
- Delete a webhook subscription. Stops further deliveries; no event is sent for the deletion itself.
- Webhooks
- Discard Your Approval Request
- Retract the caller's previously submitted approval request for a week. The week returns to draft state.
- Timesheets
- Download Attachment
- Download the binary contents of an attachment by its token. The response is the raw file, not JSON.
- Expenses
- Estimates Report (deprecated)
- Legacy export of team estimates, returned as JSON. Requires admin access. Kept for backward compatibility; new integrations should use the dashboard reports.
- Reports
- Export Invoice to Xero/QB/FB
- Export an invoice to a connected external accounting system. Supports Xero, QuickBooks, and FreshBooks integrations — the destination must be linked to the team beforehand. An invoice can only be exported once; subsequent calls return an error.
- Invoices
- Get All Allocations
- List per-user time-off allocations (e.g. annual vacation balances).
- Time Off
- Get All Assignments
- List schedule assignments across the team. Supports filtering by date range, project, and member.
- Schedule
- Get All Categories
- List expense categories available in the team.
- Expenses
- Get All Clients
- Search Clients by Name using the query parameter.
- Clients
- Get All Expenses
- List expenses logged by the authenticated user.
- Expenses
- Get All Invoices
- List invoices in the team. Supports filtering by date and client.
- Invoices
- Get All Projects
- List projects the caller has access to. Use the `query` parameter to search by name and `limit`/`page` for pagination — see [Pagination](/pagination).
- Projects
- Get All Team Timers
- List the timers currently running across the team — one entry per active user.
- Timers
- Get All Time Records
- List time records across the entire team for a date range. When `from`/`to` are omitted, only the current day is returned. See [Dates](/dates-and-timezones).
- Time Records
- Get All Timecards
- List timecards across the team. Defaults to the last two weeks when no date range is provided — see [Dates](/dates-and-timezones).
- Timecards
- Get All Users
- List all members of the team. Supports `query` for name search and `limit` for pagination — see [Pagination](/pagination).
- Users
- Get All Webhooks
- List all webhook subscriptions created with your API key.
- Webhooks
- Get Client
- Retrieve a single client by ID.
- Clients
- Get Current User
- Retrieve the user that owns the API key, including personal settings (timezone, formats, API key).
- Users
- Get Invoice
- Retrieve a single invoice with its full line-item breakdown.
- Invoices
- Get Project
- Retrieve a single project. See [Concepts](/concepts) for the project model.
- Projects
- Get Project Fields Configuration
- List the custom fields configured on a project, in display order.
- Custom Fields
- Get Project Sections
- List sections (groupings of tasks) within a project.
- Projects
- Get Project Tasks
- List tasks in a project. By default all tasks are returned; set `exclude-closed=true` to hide closed/completed tasks. See [Pagination](/pagination) for `limit`/`page` rules.
- Tasks
- Get Project Time Records
- List time records logged against a single project, across all users and tasks.
- Time Records
- Get Running Timer
- Retrieve the authenticated user's currently running timer, or an empty timer payload if none is running.
- Timers
- Get Section
- Retrieve a single section by ID.
- Projects
- Get Task
- Retrieve a single task with its time totals, estimate, and custom fields.
- Tasks
- Get Task Time Records
- List time records logged against a single task, across all users.
- Time Records
- Get Team Timesheets
- List timesheet weeks across the team, grouped by user.
- Timesheets
- Get Time Off Types
- List the time-off types defined for the team (e.g. Vacation, Sick Leave).
- Time Off
- Get Timecard
- Retrieve a user's timecard for a specific date.
- Timecards
- Get User Time Records
- List time records for a single user. Supports the same filters as `GET /team/time`.
- Time Records
- Get User Timecards
- List timecards for a single user. Defaults to the last two weeks when no date range is provided.
- Timecards
- Get User Timesheets
- List timesheet weeks for a single user. The week id is the Monday date of the week (see [Dates](/dates-and-timezones)).
- Timesheets
- Get Webhook
- Retrieve a single webhook subscription.
- Webhooks
- Projects Report
- Aggregated project report. Returns time, billing, and budget figures grouped by project. Filter the result with `date.gte`, `date.lte`, `projectId`, `clientId`, and `memberId` query parameters — see [Dates](/dates-and-timezones) for parameter formats. Time columns are in seconds, amounts in cents (see [Concepts](/concepts)).
- Reports
- Refresh Invoice Line Items
- Refresh an invoice's line items from current time records. The invoice's billable items are rebuilt from the underlying time tracked against the invoice's client over its date range. Useful when time records have been added, edited, or deleted after the invoice was first generated.
- Invoices
- Reorder Fields
- Reorder a project's custom fields. Send the full list of field IDs in the desired order.
- Custom Fields
- Search Project Tasks
- Search tasks within a single project. Same query semantics as `GET /tasks/search`; `limit` must be between 1 and 100.
- Tasks
- Search Tasks
- Search tasks across all projects by name. The `limit` parameter must be between 1 and 100.
- Tasks
- Start Timer
- Start a timer for the authenticated user on a given task. Only one timer can run per user at a time. If the user already has a timer running on another task, that timer is stopped automatically before the new one starts; the stopped run is committed to a time record on its own date (the date the timer was started, which may not be today for cross-midnight runs). See [Concepts](/concepts) for timer semantics.
- Timers
- Stop Timer
- Stop the authenticated user's currently running timer. The accumulated duration is committed to a time record on the timer's task for the current date and returned in the response.
- Timers
- Sync Integration Project
- Sync new integration projects to Everhour. Traditionally, project sync relied on background jobs which could delay access to Everhour functionality. This endpoint allows instant synchronization of a project from a connected integration (like Trello, Asana, ClickUp, etc.) into Everhour. Useful for automation flows where you want to start working with a project immediately after creating it in your external tool. Safe to call multiple times — if the project already exists in Everhour, it simply returns it without creating duplicates. **Workflow** - Create a project in your external tool (Asana, Trello, etc.) and retrieve its ID. - Sync it to Everhour using this endpoint in Everhour API. - Proceed with other Everhour API actions — assign a budget, link a client, or set task estimates. Supported platform codes: as, b2, b3, bb, cl, gh, gl, in, li, mo, no, td, tw, tr, wr.
- Projects
- Time Report (deprecated)
- Legacy export of team time records, returned as JSON. Kept for backward compatibility; new integrations should use `GET /team/time` or the dashboard reports.
- Reports
- Update Allocation
- Update a time-off allocation's amount or period.
- Time Off
- Update Assignment
- Update an existing schedule assignment.
- Schedule
- Update Category
- Update an expense category.
- Expenses
- Update Client
- Update an existing client. Only the fields supplied in the body are modified.
- Clients
- Update Client Budget
- Create or replace the budget attached to a client. Send a complete budget object; partial updates are not supported.
- Clients
- Update Expense
- Update an existing expense entry.
- Expenses
- Update Field
- Update a custom field's name, type-specific options, or visibility.
- Custom Fields
- Update Invoice
- Update invoice metadata (notes, dates, custom totals). To change the lifecycle state, set `manualStatus` to `draft`, `sent`, or `paid`.
- Invoices
- Update Project
- Update project settings. To change budget or billable rate, use `PUT /projects/{project_id}/billing` instead.
- Projects
- Update Project Billing/Budget
- Set or update the project's budget, billable rate, and billing type in a single call. Amounts are in cents (see [Concepts](/concepts)).
- Projects
- Update Section
- Update a section's name or position.
- Projects
- Update Task
- Update task fields (name, status, due date, section, labels).
- Tasks
- Update Task Billing
- Set a task's billing rate or mark it non-billable. Requires admin access. The same values are returned on task responses when you pass `opts_include_billing=1`.
- Tasks
- Update Task Estimate
- Set or replace a task's estimate (in seconds). Send a complete estimate object; partial updates are not supported.
- Tasks
- Update Time Off Type
- Update a time-off type's name, color, or settings.
- Time Off
- Update Time Record
- Update a specific time record by ID. To add or upsert time, use `POST /time` instead.
- Time Records
- Update Timecard
- Update (or create, if missing) a user's timecard for a specific date. Suitable for manual edits — clock-in and clock-out have dedicated endpoints.
- Timecards
- Update Webhook
- Update a webhook's events or scope. The `targetUrl` cannot be changed and is ignored if sent; the handshake is repeated against the existing URL to confirm it is still reachable. Send `X-Skip-Handshake: 1` to skip it.
- Webhooks
- Users Report
- Aggregated member report. Same filters and units as `GET /dashboards/projects` — see [Concepts](/concepts).
- Reports
Everhour integration, answered
- How do AI agents use Everhour through Open Connector?
- Your user connects Everhour once with one of its cataloged authentication methods. Open Connector stores the credential in an encrypted vault and exposes Everhour tools to your agent over MCP or a typed API, with credentials injected server-side on each call.
- Is this a Everhour MCP server?
- Yes. Open Connector can serve Everhour as a named MCP server with a scoped allowlist and a per-user connection URL, so any MCP client can call Everhour actions with credentials injected server-side.
- Where do Everhour credentials live?
- In your own infrastructure. Open Connector keeps credentials in its own vault and injects them at call time, so they never leave your environment.
Give your agents Everhour — keep the keys.
Open source, self-hostable, with Everhour credentials that never leave your infrastructure. Run it from source today.