Harvest

Learn how to use Harvest with Composio

Overview

SLUG: HARVEST

Description

Harvest is a time-tracking and invoicing tool designed for teams and freelancers, helping them log billable hours, manage projects, and streamline payments

Authentication Details

client_id
stringRequired
client_secret
stringRequired
full
stringDefaults to https://api.harvestapp.com/v2Required
oauth_redirect_uri
stringDefaults to https://backend.composio.dev/api/v1/auth-apps/add
scopes
stringDefaults to harvest:read,harvest:write

Connecting to Harvest

Create an auth config

Use the dashboard to create an auth config for the Harvest toolkit. This allows you to connect multiple Harvest accounts to Composio for agents to use.

1

Select App

Navigate to Harvest.

2

Configure Auth Config Settings

Select among the supported auth schemes of and configure them here.

3

Create and Get auth config ID

Click “Create Harvest Auth Config”. After creation, copy the displayed ID starting with ac_. This is your auth config ID. This is not a sensitive ID — you can save it in environment variables or a database. This ID will be used to create connections to the toolkit for a given user.

Connect Your Account

Using OAuth2

1from composio import Composio
2
3# Replace these with your actual values
4harvest_auth_config_id = "ac_YOUR_HARVEST_CONFIG_ID" # Auth config ID created above
5user_id = "0000-0000-0000" # UUID from database/application
6
7composio = Composio()
8
9
10def authenticate_toolkit(user_id: str, auth_config_id: str):
11 connection_request = composio.connected_accounts.initiate(
12 user_id=user_id,
13 auth_config_id=auth_config_id,
14 )
15
16 print(
17 f"Visit this URL to authenticate Harvest: {connection_request.redirect_url}"
18 )
19
20 # This will wait for the auth flow to be completed
21 connection_request.wait_for_connection(timeout=15)
22 return connection_request.id
23
24
25connection_id = authenticate_toolkit(user_id, harvest_auth_config_id)
26
27# You can also verify the connection status using:
28connected_account = composio.connected_accounts.get(connection_id)
29print(f"Connected account: {connected_account}")

Tools

Executing tools

To prototype you can execute some tools to see the responses and working on the Harvest toolkit’s playground

For code examples, see the Tool calling guide and Provider examples.

Tool List

Tool Name: Create Client

Description

Tool to create a new client. Use after gathering client details to register a new client in Harvest.

Action Parameters

address
currency
is_active
name
stringRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Client Contact

Description

Tool to create a new client contact. Use when you need to add a contact under an existing client. Call after you've retrieved or confirmed the client_id.

Action Parameters

client_id
integerRequired
email
fax
first_name
stringRequired
last_name
phone_mobile
phone_office
title

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Estimate

Description

Tool to create a new estimate. Use after gathering client and line item details.

Action Parameters

client_id
integerRequired
currency
discount
issue_date
line_items
notes
number
purchase_order
subject
tax
tax2

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Estimate Item Category

Description

Tool to create a new estimate item category in Harvest. Use after deciding to categorize line items within an estimate.

Action Parameters

name
stringRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Estimate Message

Description

Tool to create a new message for an estimate. Use when you have an estimate ID and want to send a message or run an event (send, accept, decline, re-open) on the estimate.

Action Parameters

body
estimate_id
integerRequired
event_type
recipients
send_me_a_copy
subject

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Expense

Description

Tool to create a new expense entry. Use when recording costs against projects. Ensure either units or total_cost is provided.

Action Parameters

billable
expense_category_id
integerRequired
notes
project_id
integerRequired
receipt
spent_date
stringRequired
total_cost
units
user_id

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Invoice

Description

Tool to create a new invoice. Use when you have gathered all invoice details and need to bill a client in Harvest.

Action Parameters

client_id
integerRequired
currency
discount
due_date
issue_date
line_items
arrayRequired
notes
number
purchase_order
state
subject
tax
tax2

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Invoice Item Category

Description

Tool to create a new invoice item category. Use after you have decided on the category name to register it in Harvest.

Action Parameters

name
stringRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Invoice Message

Description

Tool to create a new message for an invoice. Use after confirming the invoice ID when you need to notify a client with invoice details.

Action Parameters

attach_pdf
body
event_type
include_link_to_client_invoice
invoice_id
integerRequired
recipients
send_me_a_copy
subject
thank_you

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Invoice Payment

Description

Tool to create a new payment on an invoice. Use when recording a payment against an existing invoice.

Action Parameters

amount
Required
invoice_id
integerRequired
notes
paid_at
paid_date
send_thank_you

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Project

Description

Tool to create a new project. Use after confirming the client exists.

Action Parameters

bill_by
budget
budget_by
budget_is_monthly
client_id
integerRequired
code
cost_budget
cost_budget_include_expenses
ends_on
fee
hourly_rate
is_active
is_billable
is_fixed_fee
name
stringRequired
notes
notify_when_over_budget
over_budget_notification_percentage
show_budget_to_all
starts_on

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Task

Description

Tool to create a new task. Use after identifying task details to register it in Harvest.

Action Parameters

billable_by_default
default_hourly_rate
is_active
is_default
name
stringRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create Time Entry

Description

Tool to create a new time entry. Use when logging hours for a project by specifying start/end times or duration.

Action Parameters

ended_time
external_reference
hours
notes
project_id
integerRequired
spent_date
stringRequired
started_time
task_id
integerRequired
user_id

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Create User

Description

Tool to create a new user. Use after gathering user details to invite them to Harvest.

Action Parameters

access_roles
cost_rate
default_hourly_rate
email
stringRequired
first_name
stringRequired
has_access_to_all_future_projects
is_active
is_contractor
last_name
stringRequired
roles
timezone
weekly_capacity

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Client

Description

Tool to delete a client. Use when you need to remove a client that has no associated projects, invoices, or estimates. Call after confirming the client_id exists and has no dependent resources.

Action Parameters

client_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Client Contact

Description

Tool to delete a client contact. Use when you need to remove a contact that is no longer relevant. Call after confirming the contact_id exists.

Action Parameters

contact_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Estimate

Description

Tool to delete an estimate. Use when you need to remove an estimate that is no longer needed. Call after confirming the estimate_id exists and has no dependent resources.

Action Parameters

estimate_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Estimate Message

Description

Tool to delete an estimate message. Use when you need to remove a message from an estimate. Call after confirming estimate_id and message_id are correct.

Action Parameters

estimate_id
integerRequired
message_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Invoice

Description

Tool to delete an invoice. Use when you need to remove an invoice that has no associated payments. Call after confirming the invoice_id exists.

Action Parameters

invoice_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Invoice Item Category

Description

Tool to delete an invoice item category. Use when you need to remove an obsolete or incorrect invoice item category. Call after confirming the invoice_item_category_id exists.

Action Parameters

invoice_item_category_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Invoice Message

Description

Tool to delete a message from an invoice. Use when you need to remove a specific message that is no longer relevant. Call after confirming the invoice_id and message_id.

Action Parameters

invoice_id
integerRequired
message_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Invoice Payment

Description

Tool to delete an invoice payment. Use when you need to remove a payment from an invoice after confirming payment details.

Action Parameters

invoice_id
integerRequired
payment_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Project

Description

Tool to delete a project. Use when you need to remove a project and all its associated time entries and expenses; invoices remain intact. Call after confirming the project_id exists.

Action Parameters

project_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Task

Description

Tool to delete a task. Use when you need to remove a task that has no associated time entries. Call after confirming the task_id exists and has no dependent time entries.

Action Parameters

task_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete Time Entry

Description

Tool to delete a time entry. Use when removing an existing time entry that is deletable (not closed or on archived projects/tasks). Call after confirming the time_entry_id exists.

Action Parameters

time_entry_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Delete User

Description

Tool to delete a user. Use when you need to remove a user that has no associated time entries or expenses. Call after confirming the user_id exists and has no dependent time entries or expenses.

Action Parameters

user_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Client

Description

Tool to retrieve a specific client by ID. Use when you need details of a client before invoicing or reporting.

Action Parameters

client_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Client Contact

Description

Tool to retrieve a specific client contact. Use when you have client_id and contact_id to fetch and verify contact details.

Action Parameters

client_id
integerRequired
contact_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Company Info

Description

Tool to retrieve information about the authenticated user's company. Use after authentication to fetch company settings for display or configuration.

Action Parameters

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Estimate

Description

Tool to retrieve a specific estimate by ID. Use after confirming the estimate ID. Example: "Get estimate with ID 123456".

Action Parameters

estimate_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Invoice

Description

Tool to retrieve a specific invoice by ID. Use when you need the full details of an invoice after selecting or creating it. Example: 'Get invoice with ID 13150378.'

Action Parameters

invoice_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Project

Description

Tool to retrieve a specific Harvest project by ID. Use when you have a project ID and need its details.

Action Parameters

project_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Task

Description

Tool to retrieve a specific task by ID. Use when you have a task ID and need its detailed information.

Action Parameters

task_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get Time Entry

Description

Tool to retrieve a single time entry by ID. Use when you have a specific time entry ID and need its full details.

Action Parameters

time_entry_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Get User

Description

Tool to retrieve a specific user by ID. Use after obtaining a valid user ID (for example via List Users). Example: "Get details of user 3230547".

Action Parameters

user_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Client Contacts

Description

Tool to list client contacts. Use when you need to retrieve contacts with optional filtering and pagination.

Action Parameters

client_id
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Clients

Description

Tool to list clients. Use when you need to retrieve a paginated list of clients from Harvest. Ensure you have a valid access token in metadata before calling.

Action Parameters

is_active
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Estimate Messages

Description

Tool to list messages for an estimate. Use after obtaining an estimate ID to retrieve associated messages, supports pagination and filtering by update time.

Action Parameters

estimate_id
integerRequired
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Expense Categories

Description

Tool to list expense categories. Use when you need to retrieve a paginated list of expense categories, optionally filtering by active status or last update timestamp.

Action Parameters

is_active
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Invoice Item Categories

Description

Tool to retrieve invoice item categories. Use when you need to fetch a paginated list of invoice item categories in Harvest.

Action Parameters

page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Invoice Messages

Description

Tool to list messages associated with a given invoice. Use when you need to retrieve invoice messages with optional filtering by update time and pagination.

Action Parameters

invoice_id
integerRequired
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Invoice Payments

Description

Tool to retrieve payments for a specific invoice. Use when you need to list all payments applied to an invoice after confirming the invoice exists.

Action Parameters

invoice_id
integerRequired
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Invoices

Description

Tool to list invoices. Use when you need to retrieve invoices filtered by client, project, date range, or state. Example: 'List invoices for client 5735776 from 2023-01-01 to 2023-01-31.'

Action Parameters

client_id
from_date
page
per_page
project_id
state
to_date
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List projects

Description

Tool to list projects. Use when you need to retrieve a paginated list of projects from Harvest. Ensure a valid access token is present in metadata before calling.

Action Parameters

client
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Tasks

Description

Tool to list tasks. Use when you need to retrieve a paginated list of tasks from Harvest. Ensure you have a valid access token in metadata before calling.

Action Parameters

is_active
is_default
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Time Entries

Description

Tool to retrieve a list of time entries. Use when you need to fetch tracked hours with filters or date ranges for reporting or invoicing. Example: "List time entries for project 123 between 2023-01-01 and 2023-01-31".

Action Parameters

client_id
external_reference_id
from_date
is_billed
is_running
page
per_page
project_id
task_id
to
updated_since
user_id

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: List Users

Description

Tool to list users. Use when you need to retrieve a paginated list of users from Harvest.

Action Parameters

is_active
page
per_page
updated_since

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Client

Description

Tool to update an existing client. Use after retrieving client details to modify its properties. Supports partial updates; omit fields to leave them unchanged.

Action Parameters

address
client_id
integerRequired
currency
is_active
name

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Client Contact

Description

Tool to update a client contact. Use when you have a contact_id and need to modify its details.

Action Parameters

contact_id
integerRequired
email
first_name
last_name
phone_mobile
phone_office
title

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Company Info

Description

Tool to update information about the company. Use to modify company settings such as name, timezone, or formatting options. Use after obtaining current settings to apply changes.

Action Parameters

color_scheme
currency
decimal_symbol
name
thousands_separator
timezone
week_start_day

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Estimate

Description

Tool to update an existing estimate. Use when you need to modify specific fields of an estimate; omit parameters to leave other fields unchanged.

Action Parameters

client_id
currency
discount
estimate_id
integerRequired
issue_date
line_items
notes
number
purchase_order
subject
tax
tax2

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Estimate Item Category

Description

Tool to update an estimate item category. Use after retrieving the category to change its name.

Action Parameters

estimate_item_category_id
integerRequired
name

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Expense

Description

Tool to update an existing expense. Use after retrieving an expense to modify project, category, date, cost, or delete a receipt; omit fields to leave unchanged.

Action Parameters

billable
delete_receipt
expense_category_id
expense_id
integerRequired
notes
project_id
spent_date
total_cost
units

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Invoice

Description

Tool to update an existing invoice. Use after retrieving invoice details to modify its fields. Supports partial updates; omit fields to leave unchanged.

Action Parameters

client_id
currency
discount
due_date
estimate_id
invoice_id
integerRequired
issue_date
line_items
notes
number
payment_options
payment_term
purchase_order
retainer_id
subject
tax
tax2

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Project

Description

Tool to update an existing project. Use when you need to modify one or more fields of a project by its ID. Invoke after confirming the project ID and desired changes.

Action Parameters

bill_by
budget
budget_by
budget_is_monthly
client_id
code
cost_budget
cost_budget_include_expenses
ends_on
fee
hourly_rate
is_active
is_billable
is_fixed_fee
name
notes
notify_when_over_budget
over_budget_notification_percentage
project_id
integerRequired
show_budget_to_all
starts_on

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Task

Description

Tool to update an existing task. Use after retrieving task details to modify its attributes such as name, billing defaults, or status. Supports partial updates; omit fields to leave them unchanged.

Action Parameters

billable_by_default
default_hourly_rate
is_active
is_default
name
task_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update Time Entry

Description

Tool to update an existing time entry. Use after retrieving the entry to adjust hours, notes, project, or task details. Supports partial updates; omit fields to leave unchanged.

Action Parameters

ended_time
hours
notes
project_id
spent_date
started_time
task_id
time_entry_id
integerRequired

Action Response

data
objectRequired
error
successful
booleanRequired

Tool Name: Update User

Description

Tool to update an existing user. Use when you need to modify a user's profile or settings after confirming the user ID.

Action Parameters

access_roles
email
first_name
has_access_to_all_future_projects
is_active
is_contractor
last_name
roles
timezone
user_id
integerRequired
weekly_capacity

Action Response

data
objectRequired
error
successful
booleanRequired