Harvest integration | Zervanor
← All connectors

Harvest

Also an agent tool
productivity

Harvest time tracking & invoicing automation across the Harvest API v2: clients, contacts, projects, tasks, task/user assignments, time entries (CRUD + start/stop/restart), expenses + categories, invoices (+ line items, payments, messages), estimates (+ line items, messages), users (+ cost/billable rates), roles, company. Multi-header api_key auth (Authorization: Bearer + Harvest-Account-Id + static User-Agent; ADR-032 extra_headers). No native webhooks — polling trigger via updated_since (see compatibility.md harvest-02/03).

87 actions · 4 triggers

The Harvest integration lets you connect Harvest to your automations with 87 actions and 4 triggers — and every action is also a tool an AI agent can call. Examples: List Clients, Get Client, Create Client, Update Client, Delete Client. No blank-canvas wiring — connect it and use it in your workflows.

Every action below is also a tool an AI agent can call — the same pack powers your workflows and your agents.

Triggers 4

Events in Harvest that can start a workflow.

polling

New or updated client

Polls /v2/clients for clients updated since the last run.

polling

List Projects

List projects (GET /projects)

polling

New or updated time entry

Polls /v2/time_entries for entries updated since the last run.

polling

List Invoice Payments

List payments for an invoice (GET /invoices/{invoice_id}/payments)

Actions 87

What Zervanor can do in Harvest.

Projects15

GET

List Projects

List projects (GET /projects)

GET

Get Project

Retrieve a project by id (GET /projects/{project_id})

POST

Create Project

Create a project (POST /projects)

PATCH

Update Project

Update a project (PATCH /projects/{project_id})

DELETE

Delete Project

Delete a project (DELETE /projects/{project_id})

GET

List Project Task Assignments

List task assignments for a project (GET /projects/{project_id}/task_assignments)

GET

Get Task Assignment

Retrieve a project task assignment (GET /projects/{project_id}/task_assignments/{task_assignment_id})

POST

Create Task Assignment

Create a project task assignment (POST /projects/{project_id}/task_assignments)

PATCH

Update Task Assignment

Update a project task assignment (PATCH /projects/{project_id}/task_assignments/{task_assignment_id})

DELETE

Delete Task Assignment

Delete a project task assignment (DELETE /projects/{project_id}/task_assignments/{task_assignment_id})

GET

List Project User Assignments

List user assignments for a project (GET /projects/{project_id}/user_assignments)

GET

Get User Assignment

Retrieve a project user assignment (GET /projects/{project_id}/user_assignments/{user_assignment_id})

POST

Create User Assignment

Create a project user assignment (POST /projects/{project_id}/user_assignments)

PATCH

Update User Assignment

Update a project user assignment (PATCH /projects/{project_id}/user_assignments/{user_assignment_id})

DELETE

Delete User Assignment

Delete a project user assignment (DELETE /projects/{project_id}/user_assignments/{user_assignment_id})

Users12

GET

List Users

List users (GET /users)

GET

Get Current User

Retrieve the currently authenticated user (GET /users/me) — safe identity check

GET

Get User

Retrieve a user by id (GET /users/{user_id})

POST

Create User

Create a user (POST /users) — Admin only; first_name, last_name, email required

PATCH

Update User

Update a user (PATCH /users/{user_id})

DELETE

Delete User

Delete a user (DELETE /users/{user_id})

GET

List User Billable Rates

List billable rates for a user (GET /users/{user_id}/billable_rates)

GET

Get User Billable Rate

Retrieve a user billable rate (GET /users/{user_id}/billable_rates/{billable_rate_id})

POST

Create User Billable Rate

Create a billable rate for a user (POST /users/{user_id}/billable_rates) — amount required

GET

List User Cost Rates

List cost rates for a user (GET /users/{user_id}/cost_rates)

GET

Get User Cost Rate

Retrieve a user cost rate (GET /users/{user_id}/cost_rates/{cost_rate_id})

POST

Create User Cost Rate

Create a cost rate for a user (POST /users/{user_id}/cost_rates) — amount required

Invoices11

GET

List Invoices

List invoices (GET /invoices) — default per_page is 100

GET

Get Invoice

Retrieve an invoice by id (GET /invoices/{invoice_id})

POST

Create Invoice

Create an invoice — free-form (line_items) or from tracked time & expenses (line_items_import) (POST /invoices)

PATCH

Update Invoice

Update an invoice; create/update/delete line items via line_items[] (PATCH /invoices/{invoice_id})

DELETE

Delete Invoice

Delete an invoice (DELETE /invoices/{invoice_id})

GET

List Invoice Messages

List messages for an invoice (GET /invoices/{invoice_id}/messages)

POST

Create Invoice Message

Create & send an invoice message, or change invoice state via event_type (send | close | re-open | draft) (POST /invoices/{invoice_id}/messages)

DELETE

Delete Invoice Message

Delete an invoice message (DELETE /invoices/{invoice_id}/messages/{message_id})

GET

List Invoice Payments

List payments for an invoice (GET /invoices/{invoice_id}/payments)

POST

Create Invoice Payment

Create an invoice payment (POST /invoices/{invoice_id}/payments) — amount required

DELETE

Delete Invoice Payment

Delete an invoice payment (DELETE /invoices/{invoice_id}/payments/{payment_id})

Estimates8

GET

List Estimates

List estimates (GET /estimates)

GET

Get Estimate

Retrieve an estimate by id (GET /estimates/{estimate_id})

POST

Create Estimate

Create an estimate (POST /estimates) — client_id required; line items via line_items[]

PATCH

Update Estimate

Update an estimate; create/update/delete line items via line_items[] (PATCH /estimates/{estimate_id})

DELETE

Delete Estimate

Delete an estimate (DELETE /estimates/{estimate_id})

GET

List Estimate Messages

List messages for an estimate (GET /estimates/{estimate_id}/messages)

POST

Create Estimate Message

Create & send an estimate message, or change estimate state via event_type (send | accept | decline | re-open) (POST /estimates/{estimate_id}/messages)

DELETE

Delete Estimate Message

Delete an estimate message (DELETE /estimates/{estimate_id}/messages/{message_id})

Time Entries7

GET

List Time Entries

List time entries (GET /time_entries) — recommended polling trigger source

GET

Get Time Entry

Retrieve a time entry by id (GET /time_entries/{time_entry_id})

POST

Create Time Entry

Create a time entry via duration or start/end time (POST /time_entries). Required: project_id, task_id, spent_date. Provide hours (duration) or started_time/ended_time.

PATCH

Update Time Entry

Update a time entry (PATCH /time_entries/{time_entry_id})

DELETE

Delete Time Entry

Delete a time entry (DELETE /time_entries/{time_entry_id})

PATCH

Restart Time Entry

Restart a stopped time entry (PATCH /time_entries/{time_entry_id}/restart)

PATCH

Stop Time Entry

Stop a running time entry (PATCH /time_entries/{time_entry_id}/stop)

Clients5

GET

List Clients

List clients (safe identity/connectivity read — GET /clients)

GET

Get Client

Retrieve a client by id (GET /clients/{client_id})

POST

Create Client

Create a client (POST /clients) — only name required

PATCH

Update Client

Update a client (PATCH /clients/{client_id})

DELETE

Delete Client

Delete a client (DELETE /clients/{client_id})

Contacts5

GET

List Contacts

List client contacts (GET /contacts)

GET

Get Contact

Retrieve a contact by id (GET /contacts/{contact_id})

POST

Create Contact

Create a client contact (POST /contacts)

PATCH

Update Contact

Update a contact (PATCH /contacts/{contact_id})

DELETE

Delete Contact

Delete a contact (DELETE /contacts/{contact_id})

Expense Categories5

GET

List Expense Categories

List expense categories (GET /expense_categories)

GET

Get Expense Category

Retrieve an expense category by id (GET /expense_categories/{expense_category_id})

POST

Create Expense Category

Create an expense category (POST /expense_categories) — only name required

PATCH

Update Expense Category

Update an expense category (PATCH /expense_categories/{expense_category_id})

DELETE

Delete Expense Category

Delete an expense category (DELETE /expense_categories/{expense_category_id})

Expenses5

GET

List Expenses

List expenses (GET /expenses)

GET

Get Expense

Retrieve an expense by id (GET /expenses/{expense_id})

POST

Create Expense

Create an expense via JSON body, no receipt (POST /expenses). Receipt multipart upload deferred — see compatibility.md harvest-06.

PATCH

Update Expense

Update an expense via JSON body (PATCH /expenses/{expense_id}). delete_receipt boolean supported; multipart receipt upload deferred (harvest-06).

DELETE

Delete Expense

Delete an expense (DELETE /expenses/{expense_id})

Roles5

GET

List Roles

List roles (GET /roles) — Admin only

GET

Get Role

Retrieve a role by id (GET /roles/{role_id})

POST

Create Role

Create a role (POST /roles) — name required

PATCH

Update Role

Update a role (PATCH /roles/{role_id})

DELETE

Delete Role

Delete a role (DELETE /roles/{role_id})

Tasks5

GET

List Tasks

List tasks (GET /tasks)

GET

Get Task

Retrieve a task by id (GET /tasks/{task_id})

POST

Create Task

Create a task (POST /tasks) — Admin/Manager only, only name required

PATCH

Update Task

Update a task (PATCH /tasks/{task_id})

DELETE

Delete Task

Delete a task (DELETE /tasks/{task_id})

Company2

GET

Get Company

Retrieve the company for the authenticated account (GET /company)

PATCH

Update Company

Update company settings (PATCH /company)

Task Assignments1

GET

List All Task Assignments

List all task assignments across the company (GET /task_assignments)

User Assignments1

GET

List All User Assignments

List all user assignments across the company (GET /user_assignments)

Automations using Harvest

Build your own automation with Harvest in the visual builder.

Frequently asked questions

What can I automate with Harvest?

87 actions are available — for example: List Clients, Get Client, Create Client, Update Client, Delete Client, and more.

Which Harvest events can start a workflow?

4 triggers — for example: New or updated client, List Projects, New or updated time entry, List Invoice Payments.

Can Harvest be used as an AI agent tool?

Yes. Every Harvest action automatically becomes a tool an AI agent can call — the same pack powers both your workflows and your agents.

How is the Harvest integration modelled?

Harvest is modelled as a versioned connector pack, and the steps that need reasoning fall to first-party agents hosted in the same runtime as the workflows.