• Tools
Tools
  • Tools
loading...
No Results
  • AirDroid Business
    • Index
    • Clear app data and cache
    • Create a group
    • Delete groups
    • Disable lost mode
    • Error codes
    • Enable lost mode
    • Field reference
    • Get average screen time
    • Get account activities
    • Get a group
    • Get a group id by group name
    • Get a device by name
    • Get a device app by name
    • Get an activity log
    • Get all devices
    • Get all device apps
    • Get all devices with filter
    • Get device info push
    • Get device location report
    • Get device network connection history
    • Get device application usage duration
    • Get device application report
    • Get device online status report
    • Get device remote access report
    • Get data usage overview and trends
    • Get tag ids by tag names
    • Get top 10 apps by usage duration
    • Get top 10 data usage apps
    • Lock a device
    • Move devices to a group
    • Open app to foreground
    • Power off a device
    • Reboot device
    • Remote operation
    • Set tags
    • Turn off device screen
    • Unenroll a device
    • Update a device name
    • Update a device remark
    • Update a group name
    • Update a group remark
  • System Tools
    • Code
    • CSV
    • Crypto
    • Data Shaping
    • Date & Time
    • Delay
    • Documents
    • QRCode
    • Search&Crawl
    • Text
    • Xml
  • ActiveCampaign
  • Asana
  • AWS-S3
  • AWS Lambda
  • Appstore
  • BambooHR
  • Bitbucket
  • Brevo
  • Coda
  • ConvertKit
  • Clockify
  • DingTalk
  • Discourse
  • Discord
  • Dropbox
  • Elastic Security
  • FeiShu
  • Firecrawl
  • Freshdesk
  • Freshservice
  • Freshworks CRM
  • Gerrit
  • Gitlab
  • Github
  • Grafana
  • Google Ads
  • Google Docs
  • Google Drive
  • Google Gmail
  • Google Sheets
  • Google Analytics
  • Google Calendar
  • Google Developer
  • Harvest
  • HaloPSA
  • Hacker News
  • Hubspot
  • Help Scout
  • Intercom
  • Jira
  • Jenkins
  • Kafka
  • Linear
  • Lemlist
  • Mautic
  • MySQL
  • monday.com
  • Metabase
  • MailChimp
  • Microsoft Excel
  • Microsoft To Do
  • Microsoft Teams
  • Microsoft Outlook
  • Microsoft OneDrive
  • Microsoft Sharepoint
  • Notion
  • Nextcloud
  • Odoo
  • Ortto
  • Okta
  • PayPal
  • Paddle
  • Pipedrive
  • PostHog
  • PostgreSQL
  • OpenAI
  • Qdrant
  • QuickBooks
  • Redis
  • Slack
  • Strapi
  • Stripe
  • Splunk
  • Spotify
  • Shopify
  • SendGrid
  • Segment
  • ServiceNow
  • Trello
  • Twilio
  • Todoist
  • Telegram
  • Teambition
  • Webflow
  • Wikipedia
  • WordPress
  • WooCommerce
  • YouTube
  • Zulip
  • Zoom
  • Zendesk
  • Zammad
  • Zoho CRM
Home > Tools

Harvest

1. Overview

Harvest is a popular online tool for time tracking, invoicing, and project management, designed to help businesses and freelancers manage their projects, track time, and get paid. It provides insights into project budgets, team capacity, and overall business health.

With the GoInsight Harvest node, you can seamlessly integrate these functionalities into your automated workflows. This allows you to manage the entire lifecycle of your business operations, from client onboarding to final invoicing, directly within GoInsight. Key capabilities include:

  • Client and Contact Management: Create, retrieve, update, and delete client and contact information.
  • Project and Task Management: Automate the creation and administration of projects and their associated tasks.
  • Time and Expense Tracking: Log time entries and expenses for projects, ensuring accurate billing and budget monitoring.
  • Billing and Invoicing: Generate, update, and manage estimates and invoices for your clients.
  • User Administration: Add new users to your Harvest account and manage their details.

2. Prerequisites

Before using this node, you must have a valid Harvest account. Depending on the operations you wish to perform, you may also need administrator or project manager permissions to create and manage API credentials and access certain data.

3. Credentials

For a detailed guide on how to obtain and configure your credentials, please refer to our official documentation: Credentials Configuration Guide.

4. Supported Operations

Summary

This node primarily operates on resources such as Client, Company, Contact, Estimate, Expense, Invoice, Project, Task, Time Entry, and User.

Resource Operation Description
Client Create a Client Creates a new client in Harvest via the Harvest API v2.
Client Delete a Client Deletes a specific client in Harvest via the Harvest API v2.
Client Get Data of All Clients Retrieves a list of clients in Harvest via the Harvest API v2, supporting pagination and optional filters.
Client Get Data of a Client Retrieves a specific client by ID from Harvest via the Harvest API v2.
Client Update a Client Updates a specific client in Harvest via the Harvest API v2.
Company Retrieve the Company for the Currently Authenticated User Retrieves the company for the currently authenticated user via Harvest API v2.
Contact Create a Contact Creates a new contact in Harvest via the Harvest API v2.
Contact Delete a Contact Deletes a specific contact in Harvest via the Harvest API v2.
Contact Get Data of All Contacts Retrieves data of all contacts in Harvest via Harvest API v2, with optional limit and filters is_active, updated_since.
Contact Get Data of a Contact Retrieves a specific contact in Harvest via the Harvest API v2.
Contact Update a Contact Updates a specific contact in Harvest via the Harvest API v2.
Estimate Create an Estimate Creates a new estimate in Harvest via the Harvest API v2.
Estimate Delete an Estimate Deletes a specific estimate in Harvest via the Harvest API v2.
Estimate Get Data of All Estimates Retrieves data of all estimates in Harvest via Harvest API v2, with optional limit and filter updated_since.
Estimate Get Data of an Estimate Retrieves a specific estimate in Harvest via the Harvest API v2.
Estimate Update an Estimate Updates a specific estimate in Harvest via the Harvest API v2.
Expense Create an Expense Creates a new expense in Harvest via the Harvest API v2. Returns an expense object and a 201 Created response code if the call succeeded.
Expense Delete an Expense Delete an existing expense by its ID using Harvest API.
Expense Get Data of All Expenses Retrieve all expenses from Harvest API, with optional filters for date range, user, project, and client.
Expense Get Data of an Expense Retrieve a specific expense by its ID using Harvest API.
Expense Update an Expense Update an existing expense specified by its ID using Harvest API.
Invoice Create an Invoice Creates a new invoice object. Returns an invoice object and a 201 Created response code if the call succeeded.
Invoice Delete an Invoice Deletes a single invoice in Harvest specified by the invoice ID.
Invoice Get Data of All Invoices Retrieves a list of invoices in Harvest with pagination support.
Invoice Get Data of an Invoice Retrieves a specific invoice in Harvest by its invoice ID.
Invoice Update an Invoice Updates the specific invoice by setting the values of the parameters passed. Any parameters not provided will be left unchanged.
Project Create a Project Creates a new project in Harvest via the Harvest API v2. Returns a project object and a 201 Created response code if the call succeeded.
Project Delete a Project Deletes a project and any time entries or expenses tracked to it. Invoices associated with the project will not be deleted.
Project Get Data of All Projects Retrieves all projects from Harvest, including data from all pages of results.
Project Get Data of a Project Retrieve data of a specific project by its ID using Harvest API.
Project Update a Project Updates the specified Harvest project by setting the values of any passed parameters. Parameters not provided will remain unchanged.
Task Create a Task Creates a new task object in Harvest. Returns a task object and a 201 Created response code if the call succeeded.
Task Delete a Task Deletes the specified Harvest task by its ID. Deletion is only possible if the task has no time entries associated with it. Returns a 200 OK response code on success.
Task Get Data of All Tasks Retrieves all tasks from Harvest. This function will fetch pages of tasks until all pages have been retrieved.
Task Get Data of a Task Retrieves a specific task from Harvest by its ID.
Task Update a Task Updates the specified Harvest task by setting the values of any passed parameters. Parameters not provided will remain unchanged.
Time Entry Create a Time Entry Via Duration Creates a new time entry using duration for the Harvest account when duration tracking is enabled.
Time Entry Create a Time Entry Via Start And End Time Creates a new time entry using start and end time for the Harvest account when time tracking by interval.
Time Entry Delete a Time Entry Permanently deletes a time entry specified by its ID. This operation cannot be undone.
Time Entry Delete a Time Entry’s External Reference Deletes an external reference for a specific time entry in Harvest.
Time Entry Get Data of All Time Entries Retrieves all time entries for the Harvest account.
Time Entry Get Data of a Time Entry Retrieves a time entry by its ID for the Harvest account.
Time Entry Restart a Time Entry Restarts a time entry for the Harvest account, creating a new running time entry.
Time Entry Stop a Time Entry Stops a running time entry for the Harvest account, recording the end time.
Time Entry Update a Time Entry Updates specified fields of a time entry in Harvest, including ended_time, started_time, hours, and notes.
User Create a User Creates a new user object and sends an invitation email to the address specified in the email parameter. Returns a user object and a 201 Created response code if the call succeeded.
User Delete a User Deletes a user from the Harvest account specified by user ID. This operation cannot be undone.
User Get Data of All Users Retrieves all users for the Harvest account.
User Get Data of Authenticated User Retrieves the data of the authenticated user for the Harvest account.
User Get Data of a User Retrieves user data for a specified user in the Harvest account.
User Update a User Updates the specific user by setting the values of provided parameters. Any parameters not provided will remain unchanged.

Operation Details

Create a Client

Creates a new client in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Your Harvest account ID (numeric). You can find this in Harvest Settings → Account Info, or extract it from the API response of the OAuth2 authentication flow. Example: "123456"
  • Name: New client name. This will be displayed throughout Harvest and on invoices. Example: "Acme Corporation"

Options:

  • Currency: Currency code for invoicing this client. Use ISO 4217 codes (3 uppercase letters). Common values: USD (US Dollar), EUR (Euro), GBP (British Pound), CNY (Chinese Yuan). Leave empty to use your account's default currency. Example: "USD"
  • Address: The client's physical mailing address. Supports multi-line format (use

for line breaks). Typically includes street, city, state/province, postal code, and country. Example: "123 Main Street

Suite 400

San Francisco, CA 94103

USA"

  • Active: Whether the client is active and available for project assignments. Active clients appear in dropdown lists when creating projects. Default: true

Output:

  • Client (object): The created client object with key business fields:
  • id (integer): Unique client ID in Harvest. Use this ID for subsequent operations like updating or archiving the client.
  • name (string): Client name as displayed in Harvest and on invoices.
  • currency (string): ISO 4217 currency code (e.g., USD, EUR, CNY). Used for all invoices sent to this client.
  • active (boolean): Whether the client is active. Active clients appear in project assignment dropdowns.
  • address (string): Physical mailing address of the client. May contain newline characters (

) for multi-line addresses.

  • is_active (boolean): Alias for active field (some API versions use this).
  • created_at (string): ISO 8601 timestamp when the client was created (e.g., "2024-01-15T10:30:00Z").
  • updated_at (string): ISO 8601 timestamp of the last update to this client record.

Example: {"id": 5735774, "name": "Acme Corp", "currency": "USD", "active": true, "address": "123 Main St

San Francisco, CA 94103", "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-15T10:30:00Z"}

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete a Client

Deletes a specific client in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ClientId: The Client ID to be deleted. You can obtain this ID by calling Get Many Clients or Search Clients API. Example: "987654". WARNING: This operation permanently deletes the client and cannot be undone.

Output:

  • Deleted (bool): Indicates whether the client was successfully deleted.
  • True: Client was permanently deleted from Harvest.
  • False: Deletion failed. Check ErrorMessage for details (e.g., client not found, insufficient permissions, or network error).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Clients

Retrieves a list of clients in Harvest via the Harvest API v2, supporting pagination and optional filters.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Limit: Number of clients per page (per_page). Default is 10. Example: 50
  • IsActive: Filter to only return active clients. Set to true for active clients, false for inactive clients. Default is true.
  • UpdatedAt: Filter to return clients updated since this timestamp. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). Leave empty to get all clients. Example: "2024-01-01T00:00:00Z" or "2024-12-25T10:30:00+08:00"

Output:

  • Clients (object-array): Array of client objects. Each client contains: id (number, unique client identifier), name (string, client company name), is_active (boolean, whether the client is active), address (string, client address), currency (string, currency code like 'USD'), created_at (string, creation timestamp in ISO 8601 format), updated_at (string, last update timestamp in ISO 8601 format). Example: [{"id": 5735776, "name": "ABC Corp", "is_active": true, "currency": "USD", "created_at": "2017-06-26T20:41:00Z", "updated_at": "2017-06-26T20:42:00Z"}]
  • Pagination (object): Pagination metadata object containing: page (number, current page number), per_page (number, items per page), total_entries (number, total number of clients), total_pages (number, total number of pages), next_page (number or null, next page number), previous_page (number or null, previous page number). Example: {"page": 1, "per_page": 10, "total_entries": 50, "total_pages": 5, "next_page": 2, "previous_page": null}
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of a Client

Retrieves a specific client by ID from Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest account ID. You can find this in your Harvest account settings under 'Company Details' or obtain it from the response of List All Clients API call.
  • ClientId: The ID of the client you are retrieving. Can be obtained from List All Clients or Search Clients API. Example: "12345678"

Output:

  • Client (object): The retrieved client object with fields:
  • Id (integer): Client ID
  • Name (string): Client name
  • Currency (string): ISO currency code (e.g., USD, EUR, GBP)
  • Active (boolean): Whether the client is active
  • Address (string): Client address (optional)
  • Statement_Key (string): Statement key for the client (optional)
  • CreatedAt (string): Creation timestamp in ISO 8601 format (e.g., 2024-01-15T10:30:00Z)
  • UpdatedAt (string): Last update timestamp in ISO 8601 format (e.g., 2024-01-15T15:45:00Z)
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update a Client

Updates a specific client in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ClientId: The ID of the client to update. You can get this ID from the 'Get Many Clients' or 'Search Clients' action. Example: '5735776'

Options:

  • Name: New client name (optional). Leave empty to keep current name unchanged.
  • Currency: ISO 4217 currency code (3 letters, e.g., 'USD', 'EUR', 'GBP'). If provided, updates the client's billing currency. Leave empty to keep current currency unchanged.
  • Address: A textual representation of the client's physical address. May include new line characters. Leave empty to keep current address unchanged.
  • Active: Active status of the client. Set to false to archive the client (stops time tracking). Set to true to reactivate. Default: true (keep active).

Output:

  • Client (object): The updated client object returned by Harvest API. Key fields:
  • id (number): Client unique identifier
  • name (string): Client name
  • currency (string): ISO currency code (e.g., 'USD', 'EUR')
  • is_active (boolean): Whether the client is active
  • address (string): Physical address
  • created_at (string): Creation timestamp (ISO 8601)
  • updated_at (string): Last update timestamp (ISO 8601)

Example: {"id": 5735776, "name": "ABC Corp", "currency": "USD", "is_active": true, "address": "123 Main St", "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-16T14:20:00Z"}

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Retrieve the Company for the Currently Authenticated User

Retrieves the company for the currently authenticated user via Harvest API v2.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Output:

  • Company (object): The company object containing the following fields: id (integer): Company ID. name (string): Company name. base_currency (string): ISO currency code (e.g., USD, EUR). week_start_day (string): Day week starts (e.g., Monday, Sunday). wants_timestamp_timers (boolean): Whether timestamp timers are enabled. time_format (string): Time tracking format (decimal or hours_minutes). plan_type (string): Plan type (e.g., free, pro, enterprise). clock (string): Clock format (12h or 24h). decimal_symbol (string): Decimal symbol used. thousands_separator (string): Thousands separator. color_scheme (string): UI color scheme. weekly_capacity (integer): Weekly capacity in seconds. expense_feature (boolean): Whether expense tracking is enabled. invoice_feature (boolean): Whether invoicing is enabled. estimate_feature (boolean): Whether estimates are enabled. approval_feature (boolean): Whether approval workflow is enabled. created_at (string): ISO 8601 timestamp of creation. updated_at (string): ISO 8601 timestamp of last update.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create a Contact

Creates a new contact in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Your Harvest account ID (a fixed value for your organization). How to get: Found in Harvest account settings → API → Account ID, or contact your Harvest admin. This value remains constant across all API calls. Example: "1234567"
  • ClientId: The ID of the client this contact belongs to. How to get: Use the 'Get All Clients' or 'Search Clients' workflow to retrieve existing client IDs. Example: 12345
  • FirstName: The first name of the contact.

Options:

  • LastName: The last name of the contact (optional).
  • Title: The job title of the contact (optional).
  • Email: The email address of the contact (optional). Harvest allows multiple contacts with the same email. If you need to check for duplicates, use 'Search Contacts' workflow first. Format: user@example.com. Example: "john.doe@company.com"
  • PhoneOffice: The office phone number (optional). Supports international format. Example: "+1-555-0100" or "010-12345678"
  • PhoneMobile: The mobile phone number (optional). Supports international format. Example: "+86-138-0000-0000".
  • IsActive: Whether the contact is active and can be used for time tracking and invoicing. When set to false, the contact is archived (soft-deleted) and won't appear in active lists but remains in the database. Default: true (active).

Output:

  • Contact (object): The created contact object. Key fields:
  • id (number): Unique contact ID
  • first_name (string): First name
  • last_name (string): Last name
  • title (string): Job title
  • email (string): Email address
  • phone_office (string): Office phone
  • phone_mobile (string): Mobile phone
  • client (object): Client details with id and name
  • is_active (bool): Active status
  • created_at (string): Creation timestamp (ISO 8601)
  • updated_at (string): Last update timestamp (ISO 8601)
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Default 0 means the request did not reach upstream (e.g., timeout). Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete a Contact

Deletes a specific contact in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ContactId: The unique identifier of the contact to delete. You can obtain this ID through the 'Get Many Contacts' or 'Search Contacts' actions. Example: 12345678

Output:

  • Deleted (bool): WARNING: PERMANENT DELETION. Indicates whether the contact was successfully deleted. This operation is irreversible and the contact will be removed from all projects and invoices.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Contacts

Retrieves data of all contacts in Harvest via Harvest API v2, with optional limit and filters is_active, updated_since.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Page: Page number to retrieve. Start from 1. Use this with Limit to implement pagination. The response will include Pagination object to help you determine if there are more pages to fetch. Example: 1
  • Limit: Maximum number of contacts to return per page. Range: 1-2000. Default: 100. Example: 100
  • IsActive: Filter contacts by active status; true returns only active contacts, false returns only inactive contacts. If not specified, returns all contacts regardless of status. Example: true
  • UpdatedSince: ISO 8601 timestamp; returns only contacts updated since this time. Format: YYYY-MM-DDTHH:MM:SSZ or YYYY-MM-DD. Example: 2024-01-15T10:30:00Z or 2024-01-15

Output:

  • Contacts (object-array): Array of contact objects. Each contact contains: id (number): Unique contact ID; first_name (string): First name; last_name (string): Last name; email (string): Email address; phone_office (string): Office phone; phone_mobile (string): Mobile phone; title (string): Job title; client (object): Associated client with id and name; is_active (boolean): Active status; created_at (string): ISO 8601 timestamp; updated_at (string): ISO 8601 timestamp. Example: [{"id": 12345, "first_name": "John", "last_name": "Doe", "email": "john@example.com", "title": "Sales Manager", "is_active": true}]
  • Pagination (object): Pagination metadata object containing: page (number): Current page number; per_page (number): Items per page; total_pages (number): Total number of pages; total_entries (number): Total number of contacts; next_page (number|null): Next page number if exists; previous_page (number|null): Previous page number if exists; has_more (boolean): Whether there are more pages to fetch. Example: {"page": 1, "per_page": 100, "total_pages": 5, "total_entries": 456, "next_page": 2, "previous_page": null, "has_more": true}
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of a Contact

Retrieves a specific contact in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ContactId: The ID of the contact to retrieve. Can be obtained via List Contacts or Search Contacts action. Must be a positive integer. Example: 8403457

Output:

  • Contact (object): The contact object returned by Harvest API, containing: id (number): Unique contact identifier; first_name (string): Contact's first name; last_name (string): Contact's last name; title (string): Job title; email (string): Email address; phone_office (string): Office phone; phone_mobile (string): Mobile phone; fax (string): Fax number; client (object): Associated client information with id and name; created_at (string): ISO 8601 timestamp of creation; updated_at (string): ISO 8601 timestamp of last update
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update a Contact

Updates a specific contact in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ContactId: The ID of the contact to update. Can be obtained via the List Contacts or Search Contacts workflow. Example: 12345678

Options:

  • FirstName: The first name of the contact (optional). Example: John
  • LastName: The last name of the contact (optional). Example: Doe
  • ClientId: The ID of the client the contact belongs to (optional). Can be obtained via the List Clients workflow. Pass 0 to keep the current client association unchanged. Example: 87654321
  • Title: The job title of the contact (optional). Example: Sales Manager
  • Email: The email address of the contact (optional). Must be a valid email format, only one email address is supported. Example: john.doe@company.com
  • PhoneOffice: The office phone number (optional). Example: +1-555-0100
  • PhoneMobile: The mobile phone number (optional). Example: +1-555-0199
  • IsActive: Whether the contact should be active (optional). When set to false, the contact will be marked as Inactive and will not appear in Harvest's contact dropdown lists, but historical records will be retained. Default: true

Output:

  • Contact (object): The updated contact object returned by the Harvest API. Contains the following core fields:
  • id (number): Contact ID
  • first_name (string): First name
  • last_name (string): Last name
  • title (string): Job title
  • email (string): Email address
  • phone_office (string): Office phone number
  • phone_mobile (string): Mobile phone number
  • fax (string): Fax number
  • client (object): Associated client object containing 'id' and 'name'
  • is_active (bool): Whether the contact is active
  • created_at (string): Creation timestamp (ISO 8601 format)
  • updated_at (string): Last update timestamp (ISO 8601 format)
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create an Estimate

Creates a new estimate in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest account ID. You can find it in your Harvest account settings or API documentation.
  • ClientId: The ID of the client the estimate belongs to. This is a required field that identifies which client will receive this estimate.

Options:

  • Subject: The estimate subject. A brief title or description for the estimate. Example: 'Q1 2024 Consulting Services'
  • Number: The estimate number. It's strongly recommended to provide a unique number to avoid duplicate creation (e.g., 'EST-2024-001'). If left empty, the system will auto-generate one.
  • IssueDate: The date the estimate was issued. Format: YYYY-MM-DD. Example: '2024-01-15'
  • LineItems: Line items for the estimate. Each object should contain the following fields:
  • kind (string): Item type, options: 'Service' or 'Product'
  • description (string): Item description, e.g., 'Project consulting service'
  • quantity (number): Quantity
  • unit_price (number): Unit price
  • amount (number, optional): Total price (auto-calculated: quantity × unit_price)
  • taxed (boolean, optional): Whether taxed, default false

Example: [{"kind": "Service", "description": "Consulting service", "quantity": 10, "unit_price": 100.0, "amount": 1000.0, "taxed": false}]

  • Discount: This percentage is subtracted from the subtotal. Enter as a number (e.g., 10.0 means 10% discount).
  • Tax: Primary tax rate applied to the subtotal (including line items and discounts). Enter as a number (e.g., 10.0 means 10% tax).
  • AdditionalFields: Extended fields (key-value pairs) for less frequently used parameters.

Common extended fields:

  • currency (string): Currency code, default 'USD'. Example: 'EUR'
  • tax2 (string): Secondary tax rate. Example: '5.0'
  • purchase_order (string): Purchase order number. Example: 'PO-2024-001'
  • notes (string): Additional notes. Example: 'Payment terms: Net 30'

Example: {"currency": "USD", "notes": "Payment terms: Net 30"}

Output:

  • Estimate (object): The created estimate object. Contains the following core fields:
  • id (number): Estimate unique identifier
  • number (string): Estimate number
  • client (object): Client information, contains id and name
  • amount (number): Total amount
  • state (string): Status (draft, sent, accepted, declined)
  • created_at (string): Creation time in ISO 8601 format
  • line_items (array): Line items list
  • currency (string): Currency code
  • discount (number): Discount percentage
  • tax (number): Primary tax percentage
  • tax2 (number): Secondary tax percentage
  • issue_date (string): Issue date
  • subject (string): Estimate subject
  • notes (string): Additional notes

For complete field list, refer to Harvest API documentation: https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete an Estimate

Deletes a specific estimate in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Your Harvest account identifier. This value usually remains unchanged and can be found in your Harvest account settings under 'Account ID'. Example: '123456'
  • EstimateId: The ID of the estimate to delete. Can be obtained from 'Get Many Estimates' or 'Search Estimates' action. Example: 12345678

Output:

  • Deleted (bool): Indicates whether the estimate was successfully deleted. True when StatusCode=200 and ErrorMessage is empty.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Estimates

Retrieves data of all estimates in Harvest via Harvest API v2, with optional limit and filter updated_since.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Page: Page number for pagination. Default is 1 (first page). Use in combination with Pagination output to retrieve all data. Example: 1
  • Limit: Maximum number of estimates to return per page. Default is 100, maximum is 2000. If set to 0 or not provided, uses Harvest API default (100). To retrieve all data, use Pagination output to determine if more pages exist. Example: 100
  • UpdatedSince: Returns only estimates updated after this time. Format: ISO 8601 UTC timestamp. Supported formats: '2024-01-15T10:30:00Z' or '2024-01-15'. Leave empty to retrieve all. Example: "2024-01-15T00:00:00Z"

Output:

  • Estimates (object-array): List of estimate objects. Each estimate contains fields: id (number), client (object with id/name), number (string), purchase_order (string), amount (number), tax (number), tax_amount (number), tax2 (number), tax2_amount (number), discount (number), discount_amount (number), subject (string), notes (string), currency (string), state (string: draft/sent/accepted/declined), issue_date (string: YYYY-MM-DD), sent_at (string: ISO 8601), accepted_at (string: ISO 8601), declined_at (string: ISO 8601), created_at (string: ISO 8601), updated_at (string: ISO 8601), line_items (array of objects).
  • Pagination (object): Pagination metadata. Contains fields: page (number: current page number), per_page (number: records per page), total_pages (number: total number of pages), total_entries (number: total number of records), next_page (number or null: next page number, null if no more pages), previous_page (number or null: previous page number), has_more (boolean: true if more pages exist), links (object: contains first/next/previous/last URLs). Agent can use this to determine if pagination is needed.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of an Estimate

Retrieves a specific estimate in Harvest via the Harvest API v2.

Input Parameters:

  • AccountId: Harvest account ID. You can find this in your Harvest account settings page (Settings > Account & Billing). Example: '123456'
  • EstimateId: The unique identifier of the estimate to retrieve. You can obtain estimate IDs from:
  • The 'List Estimates' action (returns array of estimates with IDs)
  • The Harvest web interface (visible in URL: /estimates/{EstimateId})
  • Webhook notifications when an estimate is created

Example: 12345678

Output:

  • Estimate (object): The estimate object returned by Harvest API. Key fields:
  • id (number): Estimate unique identifier
  • client_id (number): Associated client ID
  • client (object): Client details with id and name
  • number (string): Estimate number (e.g., '2024-001')
  • purchase_order (string): Purchase order number
  • amount (number): Total estimate amount
  • tax (number): Tax amount
  • tax_amount (number): Calculated tax amount
  • tax2 (number): Secondary tax rate
  • tax2_amount (number): Secondary tax amount
  • discount (number): Discount percentage
  • discount_amount (number): Calculated discount amount
  • subject (string): Estimate subject/title
  • notes (string): Estimate notes
  • currency (string): Currency code (e.g., 'USD')
  • state (string): Estimate state (draft/sent/accepted/declined)
  • issue_date (string): Issue date (YYYY-MM-DD)
  • sent_at (string): Sent timestamp (ISO 8601)
  • accepted_at (string): Accepted timestamp (ISO 8601)
  • declined_at (string): Declined timestamp (ISO 8601)
  • created_at (string): Creation timestamp (ISO 8601)
  • updated_at (string): Last update timestamp (ISO 8601)
  • line_items (array): Array of line item objects

Full schema: https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update an Estimate

Updates a specific estimate in Harvest via the Harvest API v2. Update Strategy: This is a partial update (PATCH) - only the fields you provide will be updated, other fields remain unchanged.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Usually configured by the system administrator; ordinary users do not need to modify it.

Example: "1234567"

  • EstimateId: The ID of the estimate to update (required). Retrieve via 'Get Many Estimates' action (from the 'id' field in each estimate object) or 'Search Estimates' action. Example: 12345678

Options:

  • ClientId: The ID of the client associated with this estimate (optional). Retrieve via 'Get Many Clients' action (from the 'id' field in each client object). Example: 87654321
  • Subject: The estimate subject line (optional). Example: 'Q1 2024 Marketing Services'
  • IssueDate: Date the estimate was issued, format: YYYY-MM-DD. Defaults to today if omitted. Example: '2024-01-15'
  • Currency: Estimate currency using ISO 4217 three-letter code. Supports all standard currency codes. Common values: USD (US Dollar), EUR (Euro), GBP (British Pound), CNY (Chinese Yuan). Full list: https://en.wikipedia.org/wiki/ISO_4217. Defaults to client's default currency if omitted. Example: 'USD'.
  • Discount: Discount percentage subtracted from subtotal (numeric value without % symbol). Supports up to 2 decimal places. Example: '10.0' for 10%, '5.5' for 5.5%, '12.75' for 12.75%
  • Number: Estimate number (optional). If omitted, Harvest will auto-generate. Example: 'EST-2024-Q1-001'
  • Tax: Primary tax percentage applied to subtotal (numeric value without % symbol). Example: '8.5' for 8.5%
  • Tax2: Secondary tax percentage (optional, numeric value without % symbol). Used for dual-tax scenarios (e.g., federal + state tax). Example: '2.5' for 2.5%.
  • Notes: Additional notes to include on the estimate (optional). Example: 'Payment due within 30 days'
  • PurchaseOrder: Purchase order number (optional). Used for client reference. Example: 'PO-456789'
  • LineItems: Array of line item objects (optional). Each item contains: Kind (string: 'Service' or 'Product'), Description (string), Quantity (number), UnitPrice (number), Amount (number: auto-calculated as Quantity × UnitPrice). Example: [{"Kind":"Service","Description":"Web Design","Quantity":10,"UnitPrice":100.00,"Amount":1000.00}]

Output:

  • Estimate (object): The updated estimate object returned by Harvest API, containing core fields: id (number: estimate ID), client (object: client info with id and name), number (string: estimate number), amount (number: total amount), issue_date (string: issue date YYYY-MM-DD), state (string: status - draft/sent/accepted/declined), currency (string: ISO 4217 code), discount (number: discount percentage), tax (number: primary tax percentage), tax2 (number: secondary tax percentage), line_items (array: line item objects), notes (string: additional notes), created_at (string: creation timestamp), updated_at (string: last update timestamp).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create an Expense

Creates a new expense in Harvest via the Harvest API v2. Returns an expense object and a 201 Created response code if the call succeeded.

Input Parameters:

  • AccountId: Harvest account ID.
  • ProjectId: The ID of the project to associate with this expense. Use Get All Projects action to find project IDs. Example: 14808188
  • ExpenseCategoryId: The ID of the expense category (e.g., Meals, Travel). Use Get All Expense Categories action to list available categories. Example: 4567890
  • SpentDate: Date the expense occurred, in YYYY-MM-DD format. Example: 2024-01-15

Options:

  • TotalCost: Total amount of the expense (in the project's currency). Required if not using a unit-based expense category. Must be greater than 0 if Units is not provided. Example: 50.00
  • Units: Quantity of units (e.g., miles driven, hours worked). Required if using a unit-based expense category. Must be greater than 0 if TotalCost is not provided. Example: 120
  • Billable: Whether this expense is billable to the client. Defaults to true (billable). Set to false for internal expenses. Example: true
  • AdditionalFields: Optional additional fields for the expense (key-value pairs). Supported fields: user_id (number): ID of the user who incurred the expense. Defaults to the authenticated user if not specified. notes (string): Textual description of the expense (e.g., 'Client dinner at Restaurant XYZ'). Example: {"user_id": 1782974, "notes": "Team lunch for project kickoff"}

Output:

  • Expense (object): The created expense object. Contains the following key fields: id (number): Unique identifier of the expense; spent_date (string): Date the expense occurred (YYYY-MM-DD); total_cost (number): Total amount of the expense; units (number): Quantity of units (if unit-based); notes (string): Description of the expense; billable (boolean): Whether the expense is billable; is_locked (boolean): Whether the expense is locked (included in an invoice); locked_reason (string): Reason for locking; receipt (object): Receipt file information (url, file_name, file_size); project (object): Associated project (id, name, code); expense_category (object): Associated category (id, name, unit_price); user (object): User who created the expense (id, name); created_at (string): ISO 8601 timestamp; updated_at (string): ISO 8601 timestamp.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete an Expense

Delete an existing expense by its ID using Harvest API.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ExpenseId: The ID of the expense to delete (numeric value). Can be obtained from 'List Expenses' or 'Get Expense' actions. Example: 15296442. WARNING: This operation permanently deletes the expense and cannot be undone.

Output:

  • Deleted (bool): Indicates whether the expense was successfully deleted. True if deletion succeeded.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Expenses

Retrieve all expenses from Harvest API, with optional filters for date range, user, project, and client.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Page: Page number to retrieve (starting from 1).
  • PerPage: Number of expenses per page (1-100, default 100).
  • FromDate: Filter start date in YYYY-MM-DD format. Example: "2024-01-15"
  • ToDate: Filter end date in YYYY-MM-DD format. Example: "2024-01-31"
  • UserId: Filter by user ID. You can get user IDs from the 'Get Users' workflow or Harvest dashboard. Leave as 0 to skip this filter.
  • ProjectId: Filter by project ID. You can get project IDs from the 'Get Projects' workflow or Harvest dashboard. Leave as 0 to skip this filter.
  • ClientId: Filter by client ID. You can get client IDs from the 'Get Clients' workflow or Harvest dashboard. Leave as 0 to skip this filter.

Output:

  • Expenses (object-array): Array of expense objects. Each expense contains: id (number), client (object with id and name), project (object with id and name), expense_category (object with id and name), user (object with id and name), receipt (object with url and file_name), invoice (object with id and number), notes (string), billable (boolean), is_closed (boolean), is_locked (boolean), is_billed (boolean), locked_reason (string), spent_date (string in YYYY-MM-DD format), created_at (string ISO 8601), updated_at (string ISO 8601), total_cost (number), units (number), external_reference (object).
  • Pagination (object): Pagination metadata. Contains: page (number, current page), per_page (number, items per page), total_pages (number, total pages available), total_entries (number, total expense count), next_page (number or null, next page number if available), previous_page (number or null, previous page number if available), links (object with first/next/previous/last URLs).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of an Expense

Retrieve a specific expense by its ID using Harvest API.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ExpenseId: The unique identifier of the expense to retrieve. You can obtain this ID by:
  • Calling 'Get Many Expenses' action to list all expenses
  • Calling 'Search Expenses' action with filters
  • Checking the expense URL in Harvest web app (e.g., .../expenses/12345678)

Example: 12345678

Output:

  • Expense (object): The retrieved expense object containing the following key fields:
  • id (number): Unique identifier of the expense
  • client (object): Client information with id and name
  • project (object): Project information with id and name
  • expense_category (object): Category with id and name
  • user (object): User who created the expense with id and name
  • user_assignment (object): User assignment details
  • receipt (object): Receipt attachment info with url and file_name
  • invoice (object): Associated invoice if billed
  • notes (string): Expense notes/description
  • billable (boolean): Whether expense is billable
  • is_closed (boolean): Whether expense is closed
  • is_locked (boolean): Whether expense is locked
  • is_billed (boolean): Whether expense is billed
  • locked_reason (string): Reason for lock if locked
  • spent_date (string): Date when expense occurred (YYYY-MM-DD)
  • created_at (string): Creation timestamp (ISO 8601)
  • updated_at (string): Last update timestamp (ISO 8601)
  • total_cost (number): Total cost amount
  • units (number): Number of units
  • distance (number): Distance if mileage expense

Full field list: https://help.getharvest.com/api-v2/expenses-api/expenses/expenses/#the-expense-object

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update an Expense

Update an existing expense specified by its ID using Harvest API.

Update Strategy: This action uses PATCH (incremental update). Only the fields you provide will be updated; other fields remain unchanged. For example, if you only update the Amount, the Notes and ProjectId will stay the same.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ExpenseId: The unique ID of the expense to update. You can obtain this ID by calling Search Expenses or Get an Expense action. Example: 12345678

Options:

  • ProjectId: (Optional) The ID of the project to associate this expense with. You can obtain project IDs by calling Get Many Projects action. Set to 0 to keep current project. Example: 9876543
  • SpentDate: (Optional) Date of the expense in YYYY-MM-DD format. Example: 2024-01-15. If not provided, the current date remains unchanged.
  • Amount: (Optional) New amount for the expense. Must be a positive number. Example: 125.50
  • Notes: (Optional) Notes or description for the expense. Example: Client dinner meeting
  • ExpenseCategoryID: (Optional) The expense category identifier. Supports two formats: 1) By ID - Numeric category ID (e.g., 123456), 2) By Name - Category name (case-insensitive, e.g., 'Travel'). If not provided, the current category will remain unchanged. You can get available categories by calling Get Expense Categories action.

Output:

  • Expense (object): The updated expense object with the following core fields: id (number): Expense unique ID, project_id (number): Associated project ID, expense_category (object): Category info with id and name, spent_date (string): Expense date in YYYY-MM-DD format, total_cost (number): Expense amount, notes (string): Expense notes/description, is_closed (boolean): Whether the expense is closed, created_at (string): Creation timestamp (ISO 8601), updated_at (string): Last update timestamp (ISO 8601).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create an Invoice

Creates a new invoice object. Returns an invoice object and a 201 Created response code if the call succeeded.

Input Parameters:

  • AccountId: Harvest account ID. This is your unique identifier in Harvest system.

How to find your Account ID:

  1. Log in to your Harvest account at https://id.getharvest.com/
  2. Click on your profile icon in the top-right corner
  3. Select 'Account Settings'
  4. Your Account ID is displayed at the top of the page

Alternatively, you can find it in the URL when logged into Harvest: https://YOURACCOUNTID.harvestapp.com/

Example: 123456

  • ClientId: The ID of the client this invoice belongs to (required). You can obtain this by calling 'Search Clients' or 'Get Many Clients' action. Example: 12345

Options:

  • Subject: The invoice subject or title. This will be displayed at the top of the invoice. Example: 'Consulting Services - January 2024'
  • IssueDate: Invoice issue date in YYYY-MM-DD format. Defaults to today if not specified. Example: '2024-01-15'
  • DueDate: Invoice due date in YYYY-MM-DD format. Example: '2024-02-15'
  • LineItems: Array of line item objects. Each item should contain: 'kind' (string, required: 'Service' or 'Product'), 'description' (string), 'quantity' (number), 'unit_price' (number), 'project_id' (number, optional), 'taxed' (boolean, optional, default false). Example: [{"kind": "Service", "description": "Consulting", "quantity": 10, "unit_price": 100.0, "taxed": true}]
  • Tax: Tax percentage in numeric form (no percent sign needed). For example, 10% tax should be entered as 10.0. Harvest API will automatically divide this by 100 for calculations. Example: 10.0
  • Discount: Discount percentage in numeric form (no percent sign needed). For example, 5% discount should be entered as 5.0. Example: 5.0
  • AdditionalFields: Optional additional fields as key-value pairs object. Common fields include: 'retainer_id' (number: Retainer ID, obtain via Get Retainers), 'estimate_id' (number: Estimate ID, obtain via Search Estimates), 'number' (string: Custom invoice number, auto-generated if empty), 'purchase_order' (string: Purchase order number), 'tax2' (number: Second tax percentage), 'currency' (string: Currency code like 'USD', 'EUR'), 'notes' (string: Additional notes or terms). Example: {"purchase_order": "PO-2024-001", "currency": "USD", "notes": "Net 30 payment terms"}

Output:

  • Invoice (object): The created invoice object returned by the Harvest API. Contains the following fields:

Core Fields:

id (number): Unique invoice identifier

number (string): Invoice number (auto-generated or custom)

amount (number): Total invoice amount

due_amount (number): Outstanding amount due

currency (string): Currency code (e.g., 'USD', 'EUR')

state (string): Invoice status — 'draft', 'sent', 'paid', 'closed'

Dates:

issue_date (string): Issue date in YYYY-MM-DD format

due_date (string): Due date in YYYY-MM-DD format

created_at (string): Creation timestamp (ISO 8601)

updated_at (string): Last update timestamp (ISO 8601)

sent_at (string|null): Sent timestamp

paid_at (string|null): Payment timestamp

closed_at (string|null): Closed timestamp

Client Info:

client (object): Client object containing:

id (number): Client ID

name (string): Client name

Line Items:

line_items (array): Array of line item objects, each containing:

id (number): Line item ID

kind (string): 'Service' or 'Product'

description (string): Item description

quantity (number): Quantity

unit_price (number): Unit price

amount (number): Total amount (quantity × unit_price)

taxed (boolean): Whether tax is applied

taxed2 (boolean): Whether a second tax is applied

project (object|null): Associated project

Financial Details:

subject (string): Invoice subject/title

notes (string): Additional notes

tax (number): Tax percentage

tax_amount (number): Calculated tax amount

tax2 (number): Second tax percentage

tax2_amount (number): Second tax amount

discount (number): Discount percentage

discount_amount (number): Calculated discount amount

purchase_order (string): PO number

payment_term (string): Payment terms

References:

estimate_id (number|null): Associated estimate ID

retainer_id (number|null): Associated retainer ID

recurring_invoice_id (number|null): Recurring invoice ID

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete an Invoice

Deletes a single invoice in Harvest specified by the invoice ID.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • InvoiceId: The ID of the invoice to delete. You can obtain this ID from 'Get Many Invoices' or 'Search Invoices' actions. Example: 12345678. ⚠️ WARNING: This operation permanently deletes the invoice and CANNOT be undone. The invoice will be removed from Harvest immediately.

Output:

  • Deleted (bool): Boolean flag indicating deletion result. true: Invoice successfully deleted (HTTP 200). false: Deletion failed (check ErrorMessage for details). Note: Deletion is permanent and cannot be undone.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Invoices

Retrieves a list of invoices in Harvest with pagination support.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • ClientId: Only return invoices belonging to the client with this ID. You can obtain this via List Clients or Search Clients workflow. Example: 5735776
  • ProjectId: Only return invoices associated with the project with this ID. You can obtain this via List Projects or Search Projects workflow. Example: 14308069
  • IssueDateFrom: Only return invoices with an issue_date on or after this date. Format: YYYY-MM-DD. Example: 2024-01-15
  • IssueDateTo: Only return invoices with an issue_date on or before this date. Format: YYYY-MM-DD. Example: 2024-12-31
  • Page: Page number to retrieve, starting from 1. Example: 1
  • PerPage: Number of invoices per page, maximum 2000. Example: 100

Output:

  • Invoices (object-array): List of invoice objects returned from Harvest API. Each object contains the following core fields:
  • id (number): Unique identifier for the invoice
  • invoice_number (string): Invoice number (e.g., '1001')
  • client (object): Client information containing id and name
  • amount (number): Invoice total amount
  • due_date (string): Due date in YYYY-MM-DD format
  • state (string): Invoice state (draft/open/paid/closed)
  • issued_at (string): Issue date in YYYY-MM-DD format
  • subject (string): Invoice subject line
  • currency (string): Currency code (e.g., 'USD')
  • payment_term (string): Payment terms
  • created_at (string): Creation timestamp
  • updated_at (string): Last update timestamp

Refer to Harvest API documentation for complete field list.

  • Page (number): The current page number of results.
  • PerPage (number): Number of items per retrieved page.
  • TotalPages (number): Total number of pages available.
  • TotalEntries (number): Total number of invoice entries available.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of an Invoice

Retrieves a specific invoice in Harvest by its invoice ID.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • InvoiceId: The unique ID of the invoice to retrieve. You can obtain this ID from: List Invoices action (returns all invoices with their IDs); Create an Invoice action (returns the newly created invoice ID); Harvest web interface (visible in invoice URL: https://yourcompany.harvestapp.com/invoices/{InvoiceId}). Example: 13150403

Output:

  • Invoice (object): The invoice object returned from Harvest API. Contains key fields: id (number): Invoice unique identifier; number (string): Invoice display number (e.g., '001'); amount (number): Total invoice amount; due_amount (number): Outstanding amount; state (string): Invoice status. Values: draft, open, paid, closed; issue_date (string): Issue date in YYYY-MM-DD format; due_date (string): Due date in YYYY-MM-DD format; client (object): Client info with {id, name}; line_items (array): Invoice line items; payment_term (string): Payment terms; notes (string): Invoice notes; currency (string): Currency code (e.g., USD); tax (number): Tax amount; tax2 (number): Second tax amount; discount (number): Discount amount; subject (string): Invoice subject; purchase_order (string): Purchase order number.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update an Invoice

Updates the specific invoice by setting the values of the parameters passed. Any parameters not provided will be left unchanged.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • InvoiceId: The ID of the invoice to update. Can be obtained through 'Get Many Invoices' or 'Search Invoices' action. Example: 13150403

Options:

  • ClientId: Client ID (optional). If you need to change the client of the invoice, fill in this field. Can be obtained through 'Get Many Clients' action. If not filled, the original client remains unchanged. Example: 5735776
  • Subject: Invoice subject (optional). If not filled, the original subject remains unchanged. Example: "Project Consulting Services - January 2024"
  • IssueDate: Invoice issue date (optional), format: YYYY-MM-DD. If not filled, the original date remains unchanged. Example: "2024-01-15"
  • DueDate: Invoice due date (optional), format: YYYY-MM-DD. If not filled, the original date remains unchanged. Example: "2024-02-15"
  • LineItems: Invoice line items (optional). Object array, each object represents a project/service/product line.

Field Description:

  • kind (string, required): Item type, common values: "Service", "Product"
  • description (string, optional): Item description
  • quantity (number, optional): Quantity, default 1
  • unit_price (number, required): Unit price
  • taxed (boolean, optional): Whether to apply tax rate 1, default false
  • taxed2 (boolean, optional): Whether to apply tax rate 2, default false
  • project_id (number, optional): Associated project ID

Example: [{"kind": "Service", "description": "Web Development", "quantity": 40, "unit_price": 150.0, "taxed": true}, {"kind": "Product", "description": "Software License", "quantity": 1, "unit_price": 500.0, "taxed": true}]

Note: If LineItems need to be updated, the complete line items array must be provided, which will completely overwrite the original items.

  • Tax: Tax rate (optional), e.g., 10.0 represents 10%. If not filled, the original tax rate remains unchanged. Example: 10.0
  • Discount: Discount rate (optional), e.g., 5.0 represents 5%. If not filled, the original discount remains unchanged. Example: 5.0
  • AdditionalFields: Extended fields (key-value pair object), used to fill in low-frequency parameters.

Available fields:

  • retainer_id (number): Retainer ID, can be obtained through 'Get Many Retainers' action
  • estimate_id (number): Estimate ID, can be obtained through 'Get Many Estimates' action
  • number (string): Invoice number, e.g., "INV-2024-001"
  • purchase_order (string): Purchase order number, e.g., "PO-12345"
  • tax2 (number): Second tax rate, e.g., 2.5 represents 2.5%
  • notes (string): Note information, e.g., "Payment terms: Net 30"
  • currency (string): Currency code, e.g., "USD", "EUR", "CNY"

Example: {"purchase_order": "PO-12345", "notes": "Payment due within 30 days. Thank you for your business.", "currency": "USD", "tax2": 2.0}

Output:

  • Invoice (object): The updated invoice object returned by Harvest API, containing the following core fields:
  • id (number): Invoice ID
  • number (string): Invoice number
  • client (object): Client information, containing id and name
  • amount (number): Invoice total amount
  • due_amount (number): Amount due
  • tax / tax2 (number): Tax rates
  • discount (number): Discount
  • state (string): Invoice status (draft/open/paid/closed)
  • issue_date / due_date (string): Issue date/due date
  • line_items (array): Line items array
  • created_at / updated_at (string): Creation/update time
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create a Project

Creates a new project in Harvest via the Harvest API v2. Returns a project object and a 201 Created response code if the call succeeded.

Input Parameters:

  • AccountId: Your Harvest account ID. Can be found in Harvest Settings > Account, or retrieved via the Get Current User API.
  • ClientId: The ID of the client to associate with the project. Can be obtained by:
  1. Calling the List Clients API to view all clients
  2. Calling the Search Clients API to search by name
  3. Extracting from an existing project's client.id field

Example: 5735776

  • Name: The project name.

Options:

  • IsActive: Whether the project is active.
  • IsBillable: Whether the project is billable.
  • BillBy: Billing method. Choose one:
  • Project: Fixed project rate billing
  • Tasks: Bill by individual task rates
  • People: Bill by team member hourly rates
  • None: Non-billable project

Allowed values: "Project", "Tasks", "People", "None"

  • HourlyRate: Hourly rate when billing by people. Required if BillBy is set to "People", otherwise ignored.
  • Budget: The budget amount for the project. Unit depends on BudgetBy setting (hours or cost).
  • AdditionalFields: Optional fields for advanced configuration. Supported fields:
  • Code (string): Project code for internal reference
  • BudgetBy (string): Budget tracking method, one of:
    • project_cost: Track by total project cost
    • project_hours: Track by total project hours
    • task_cost: Track by individual task costs
    • task_hours: Track by individual task hours
    • person_cost: Track by team member costs
    • person_hours: Track by team member hours
    • none: No budget tracking
  • NotifyWhenOverBudget (bool): Whether to send notifications when budget is exceeded

Output:

  • Project (object): The newly created project object containing core fields:
  • id (number): Unique project identifier
  • name (string): Project name
  • code (string): Project code
  • client (object): Associated client object with id and name
  • is_active (bool): Whether the project is active
  • is_billable (bool): Whether the project is billable
  • bill_by (string): Billing method
  • hourly_rate (number): Hourly rate if applicable
  • budget (number): Budget amount
  • budget_by (string): Budget tracking method
  • created_at (string): Creation timestamp in ISO 8601 format
  • updated_at (string): Last update timestamp in ISO 8601 format
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete a Project

Deletes a project and any time entries or expenses tracked to it. Invoices associated with the project will not be deleted.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ProjectId: The unique identifier of the project to delete. Can be obtained from List Projects action or from the Harvest project URL (e.g., https://yourcompany.harvestapp.com/projects/12345 means ProjectId is 12345). Example: 67890

Output:

  • Deleted (bool): Indicates whether the project was successfully deleted. Returns true only when StatusCode is 200 AND ErrorMessage is empty. If false, check ErrorMessage for details.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Projects

Retrieves all projects from Harvest, including data from all pages of results.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Limit: Maximum number of projects to return. Default 100. Set to 0 to return all projects (no limit). Example: 100
  • ClientId: Filter projects by client ID. Default 0 (no filter). You can get client IDs by calling Get Data of All Clients action or from the Harvest web interface. Example: 5735776
  • UpdatedSince: Filter projects updated after this timestamp. Must be in RFC3339 format (ISO 8601). Leave empty to return all projects. Example: "2024-01-15T00:00:00Z"

Output:

  • Projects (object-array): List of project objects. Each project contains: id (number, unique project identifier), name (string, project name), code (string, project code), is_active (boolean, whether project is active), is_billable (boolean, whether project is billable), is_fixed_fee (boolean, whether project uses fixed fee billing), bill_by (string, billing method: Project/Tasks/People/none), budget (number, project budget amount), budget_by (string, budget tracking method: project/project_cost/task/task_fees/person/none), budget_is_monthly (boolean, whether budget resets monthly), notify_when_over_budget (boolean, whether to send notifications when over budget), over_budget_notification_percentage (number, percentage at which to send notifications), show_budget_to_all (boolean, whether budget is visible to all team members), cost_budget (number, internal cost budget), cost_budget_include_expenses (boolean, whether expenses are included in cost budget), fee (number, fixed fee amount for fixed-fee projects), notes (string, project notes), starts_on (date, project start date), ends_on (date, project end date), client (object with id and name, client information), created_at (timestamp, creation time), updated_at (timestamp, last update time). See Harvest API documentation for complete field list.
  • Pagination (object): Pagination metadata. Contains: current_page (number, current page number), per_page (number, items per page), total_count (number, total number of projects), total_pages (number, total number of pages), has_more (boolean, whether there are more pages available).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of a Project

Retrieve data of a specific project by its ID using Harvest API.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ProjectId: The ID of the project to retrieve. This ID can be obtained from List Projects or Search Projects action. Example: 12345678

Output:

  • Project (object): The retrieved project object. Contains core fields:
  • id (number): Project unique identifier
  • name (string): Project name
  • code (string): Project code
  • is_active (boolean): Whether the project is active
  • is_billable (boolean): Whether the project is billable
  • is_fixed_fee (boolean): Whether the project uses fixed fee billing
  • bill_by (string): Billing method (Project, Tasks, People, or none)
  • client (object): Client information with id and name
  • starts_on (string): Project start date (YYYY-MM-DD)
  • ends_on (string): Project end date (YYYY-MM-DD)
  • budget (number): Project budget amount
  • budget_by (string): Budget calculation method (project, project_cost, task, task_fees, person, or none)
  • budget_is_monthly (boolean): Whether the budget resets monthly
  • notify_when_over_budget (boolean): Whether to send notifications when over budget
  • over_budget_notification_percentage (number): Percentage threshold for budget notifications
  • show_budget_to_all (boolean): Whether the budget is visible to all users
  • cost_budget (number): Total project cost budget
  • cost_budget_include_expenses (boolean): Whether expenses are included in the cost budget
  • hourly_rate (number): Hourly rate for the project
  • fee (number): Fixed fee amount for fixed-fee projects
  • notes (string): Project notes
  • created_at (string): Creation timestamp (ISO 8601)
  • updated_at (string): Last update timestamp (ISO 8601)
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update a Project

Updates the specified Harvest project by setting the values of any passed parameters. Parameters not provided will remain unchanged.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • ProjectId: The ID of the project to update (required). Obtain from: 1) Call 'Search Projects' action to search by name, or 2) Call 'Get Many Projects' action to list all projects. Usually an 8-digit number. Example: "12345678"

Options:

  • Name: The new project name (optional). Used to display and identify the project in Harvest. Example: "Website Redesign 2024"
  • ClientId: The ID of the client to associate with the project (optional). Obtain from: 1) Call 'Get Many Clients' action, or 2) Call 'Search Clients' action. Special values: 0 or omit = no change to current client association; positive integer = update to specified client. Example: 5735774
  • IsActive: Whether the project is active (optional). Active projects can track time; inactive projects are archived. Default: true
  • IsBillable: Whether the project is billable (optional). Billable projects can generate invoices to charge clients. Default: false
  • Budget: Budget amount in hours or money (optional). The unit depends on BudgetBy parameter (hours or currency amount). Note: Due to Harvest API limitations, cannot set budget to zero via API (use Harvest web UI to clear budget). Set to 0 or omit = no change to budget. Example: 120.5
  • BudgetBy: Budgeting method (optional). Supported values: 'project_cost' (project total cost), 'project_hours' (project total hours), 'task_cost' (by task cost), 'task_hours' (by task hours), 'person_cost' (by person cost), 'person_hours' (by person hours), 'none' (no budget). Example: "project_hours"
  • AdditionalFields: Extended fields for updating non-core properties (optional). Common fields: 'code' (string, project code for quick identification), 'bill_by' (string, billing method: 'Project', 'Tasks', 'People', 'None'), 'hourly_rate' (number, hourly rate, only effective when bill_by='People'), 'notify_when_over_budget' (boolean, notify when over budget), 'notes' (string, project notes). Example: {"code": "WEB-2024", "bill_by": "Project", "hourly_rate": 150.0, "notes": "Q1 priority project"}

Output:

  • Project (object): The updated project object returned by Harvest API. Core fields include: 'id' (number, project ID), 'name' (string, project name), 'code' (string, project code), 'client' (object, associated client information with 'id', 'name' fields), 'is_active' (boolean, active status), 'is_billable' (boolean, billable status), 'bill_by' (string, billing method), 'hourly_rate' (number, hourly rate), 'budget' (number, budget amount), 'budget_by' (string, budgeting method), 'notify_when_over_budget' (boolean, over budget notification), 'over_budget_notification_percentage' (number, notification percentage), 'notes' (string, project notes), 'created_at' (string, creation time), 'updated_at' (string, last update time), 'starts_on' (string, start date), 'ends_on' (string, end date)
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create a Task

Creates a new task object in Harvest. Returns a task object and a 201 Created response code if the call succeeded.

Parameter Sending Strategy:

Only non-default values are sent to the API. For example, if BillableByDefault=true (default), this field will not be included in the request payload. This is to avoid overriding Harvest's server-side defaults.

Input Parameters:

  • AccountId: Your Harvest Account ID (required). This is your organization's unique identifier in Harvest. To find it: 1) Log in to Harvest, 2) Go to Settings → Account, 3) Copy the Account ID field. Format: numeric string (e.g., "123456"). This value will be sent in the 'Harvest-Account-Id' HTTP header.
  • Name: The name of the task (required). Example: "Design Work", "Development", "Project Management".

Options:

  • BillableByDefault: Whether this task should be marked as billable by default when added to new projects (optional). Set to true for client-facing work (e.g., consulting, design). Set to false for internal tasks (e.g., meetings, training). Defaults to true.
  • DefaultHourlyRate: The default hourly rate for this task when added to projects (optional). Unit: USD per hour. Supports two decimal places. Default 0 means free/non-billable task. Example: 150.00 means $150 per hour.
  • IsDefault: Whether this task should be automatically added to future new projects (optional). If set to true, all newly created projects will include this task automatically. Does not affect existing projects. Useful for universal tasks like 'Project Management' or 'Client Communication'. Defaults to false.
  • IsActive: Whether this task is active or archived (optional). Set to false to archive the task (it will not appear in new project task lists). Defaults to true.

Output:

  • Task (object): The created task object. Empty object {} if operation failed.",

"Schema": {

"id": {"type": "number", "description": "Unique task identifier"},

"name": {"type": "string", "description": "Task name"},

"billable_by_default": {"type": "boolean", "description": "Whether billable"},

"default_hourly_rate": {"type": "number", "description": "Hourly rate in USD"},

"is_default": {"type": "boolean", "description": "Auto-add to new projects"},

"is_active": {"type": "boolean", "description": "Active status"},

"created_at": {"type": "string", "description": "ISO 8601 datetime"},

"updated_at": {"type": "string", "description": "ISO 8601 datetime"}

}

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete a Task

Deletes the specified Harvest task by its ID. Deletion is only possible if the task has no time entries associated with it. Returns a 200 OK response code on success.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TaskId: The unique identifier of the task to delete. This is a numeric string (e.g., "12345678") returned by Harvest's Get Task or List Tasks endpoints. WARNING: This is a permanent deletion and cannot be undone. Ensure the task has no associated time entries before deletion. Example: "12345678"

Output:

  • Deleted (bool): Indicates whether the task was successfully deleted. Returns true only when StatusCode is 200 and no error occurred. Returns false if the task does not exist, has associated time entries, or permission is denied. Check ErrorMessage for details.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Default 0 means the request did not reach upstream (e.g., timeout). Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Tasks

Retrieves all tasks from Harvest. This function will fetch pages of tasks until all pages have been retrieved.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Limit: Maximum number of tasks to return. Default is 100. Set to 0 to retrieve all tasks without limit (use with caution as it may return a large amount of data).

Example: 50

Output:

  • Tasks (object-array): Array of task objects. Each task object contains the following core fields:

Core Fields:

  • id (number): Unique task identifier
  • name (string): Task name
  • billable_by_default (boolean): Whether the task is billable by default
  • default_hourly_rate (number): Default hourly rate for the task
  • is_default (boolean): Whether this is a default task
  • is_active (boolean): Whether the task is active
  • created_at (string): Creation timestamp (ISO 8601 format)
  • updated_at (string): Last update timestamp (ISO 8601 format)

For complete field details, refer to Harvest API documentation: https://help.getharvest.com/api-v2/tasks-api/tasks/tasks/

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Default 0 means the request did not reach upstream (e.g., timeout). Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of a Task

Retrieves a specific task from Harvest by its ID.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TaskId: The unique ID of the task to retrieve. Can be obtained from 'Get Many Tasks' or 'Search Tasks' actions, or found in Harvest backend task detail page URL. Format: numeric string. Example: "8083800"

Output:

  • Task (object): The task object returned by Harvest API, containing:
  • id (number): Task unique identifier
  • name (string): Task name
  • billable_by_default (boolean): Whether the task is billable by default
  • default_hourly_rate (number): Default hourly rate
  • is_default (boolean): Whether this is a default task
  • is_active (boolean): Whether the task is active
  • created_at (string): Creation timestamp (ISO 8601)
  • updated_at (string): Last update timestamp (ISO 8601)

Example: {"id": 8083800, "name": "Design", "billable_by_default": true, "default_hourly_rate": 120.0, "is_default": false, "is_active": true, "created_at": "2024-01-15T10:30:00Z", "updated_at": "2024-01-15T14:00:00Z"}

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update a Task

Updates the specified Harvest task by setting the values of any passed parameters. Parameters not provided will remain unchanged.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TaskId: The ID of the task to update. You can obtain this ID from 'List Tasks' or 'Get Task Details' actions. Example: "12345678"

Options:

  • Name: The new task name. Leave empty to keep the current value. Example: "Design Work"
  • DefaultHourlyRate: The default hourly rate for the task in USD. Set to 0 to keep the current value. Example: 150.00
  • BillableByDefault: Whether the task is billable by default. Leave unchecked to keep the current value. Check to set as billable, uncheck to set as non-billable.
  • IsDefault: Whether to set the task as the default task for new projects. Leave unchecked to keep the current value. Check to set as default, uncheck to remove default status.
  • IsActive: Whether to set the task as active. Leave unchecked to keep the current value. Check to activate, uncheck to deactivate the task.

Output:

  • Task (object): The updated task object returned by Harvest API. Contains fields: id (number), name (string), billable_by_default (bool), default_hourly_rate (number), is_default (bool), is_active (bool), created_at (string), updated_at (string).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create a Time Entry Via Duration

Creates a new time entry using duration for the Harvest account when duration tracking is enabled.

Input Parameters:

  • AccountId: Your Harvest account ID. You can find this in the Harvest Settings page or from your API documentation. If unsure, contact your administrator. Example: 123456
  • ProjectId: The ID of the project to associate with the time entry. You can get this by calling 'Get Projects' or 'Search Projects' action, or find it in the project URL on Harvest web interface (e.g., https://yourcompany.harvestapp.com/projects/12345678). Example: 12345678
  • TaskId: The ID of the task to associate with the time entry. You can get this by calling 'Get Tasks for Project' action. Example: 87654321
  • SpentDate: The date of the time entry in YYYY-MM-DD format. Example: 2024-01-15

Options:

  • Hours: The number of hours tracked. 0.0 indicates starting a timer without recording specific duration, suitable for real-time tracking scenarios. To record a fixed duration, provide a value greater than 0 (e.g., 2.5). Defaults to 0.0.
  • Notes: Optional notes for the time entry.
  • UserId: The ID of the user who will own this time entry. Leave empty to use the current API token owner. To create entries for other team members, provide their User ID (obtainable via 'Get Users' action). Example: 1234567

Output:

  • TimeEntry (object): The created time entry object returned by Harvest API.

Core Fields:

  • id (number): Unique time entry ID
  • spent_date (string): Date of the entry (YYYY-MM-DD)
  • hours (number): Hours logged
  • notes (string): Entry notes

Status Fields:

  • is_locked (boolean): Whether entry is locked
  • is_closed (boolean): Whether entry is closed
  • is_billed (boolean): Whether entry is billed
  • is_running (boolean): Whether timer is running

Related Objects Structure:

  • user: {id: number, name: string}
  • client: {id: number, name: string, currency: string}
  • project: {id: number, name: string, code: string}
  • task: {id: number, name: string}

See full field list in Harvest API documentation.

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create a Time Entry Via Start And End Time

Creates a new time entry using start and end time for the Harvest account when time tracking by interval.

⚠️ WARNING: This action does NOT check for duplicates. If you retry due to timeout, multiple entries may be created with the same parameters. Consider using 'Get Many Time Entries' to check for existing entries before creating.

Input Parameters:

  • AccountId: The Harvest account ID (typically a 7-digit number). You can find it in your Harvest account settings (Account > Account Settings > Account ID) or by calling 'Get Current User' action. Example: "1234567"
  • ProjectId: The ID of the project to associate with the time entry. You can obtain this ID by calling 'Get Many Projects' or 'Search Projects' action. Example: 12345678
  • TaskId: The ID of the task to associate with the time entry. You can obtain this ID by calling 'Get Many Tasks' or 'Search Tasks' action. Example: 87654321
  • SpentDate: The date of the time entry in ISO 8601 format (YYYY-MM-DD). Example: "2024-01-15"

Options:

  • StartedTime: The start time of the entry in 12-hour format with am/pm (e.g., '8:00am', '5:30pm') or 24-hour format (e.g., '08:00', '17:30'). Both formats are supported. Example: "9:00am" or "09:00"
  • EndedTime: The end time of the entry in 12-hour format with am/pm (e.g., '9:30am', '6:45pm') or 24-hour format (e.g., '09:30', '18:45'). Both formats are supported. Example: "5:00pm" or "17:00"
  • Notes: Optional notes for the time entry. Example: "Client meeting and project planning"
  • UserId: The ID of the user to associate with the time entry. If not provided, defaults to the currently authenticated user. Only administrators can create entries for other users. Example: 987654

Output:

  • TimeEntry (object): The created time entry object containing the following core fields:
  • id (number): The unique identifier of the time entry
  • spent_date (string): The date of the entry (YYYY-MM-DD)
  • hours (number): Duration in decimal hours
  • notes (string): Entry notes
  • started_time (string): Start time if provided
  • ended_time (string): End time if provided
  • is_running (boolean): Whether the timer is currently running
  • is_locked (boolean): Whether the entry is locked
  • locked_reason (string): Reason for lock if applicable
  • is_closed (boolean): Whether the entry is closed
  • is_billed (boolean): Whether the entry has been billed
  • timer_started_at (string): Timer start timestamp in ISO 8601 format
  • created_at (string): Creation timestamp in ISO 8601 format
  • updated_at (string): Last update timestamp in ISO 8601 format
  • user (object): Associated user with id and name
  • user_assignment (object): User assignment details with id, is_active, and hourly_rate
  • project (object): Associated project with id, name, and code
  • task (object): Associated task with id and name
  • task_assignment (object): Task assignment details with id, billable, and hourly_rate
  • client (object): Associated client with id and name
  • invoice (object): Associated invoice if billed
  • external_reference (object): External reference data if provided

API Behavior Notes:

  • The hours field is automatically calculated by Harvest based on started_time and ended_time.
  • No email notifications are triggered by default when creating time entries via API.
  • If the project or task is archived, the API will return a 422 error.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete a Time Entry

⚠️ WARNING: Permanently deletes a time entry specified by its ID. This operation cannot be undone. The deleted time entry cannot be recovered. Please ensure you have the correct TimeEntryId before executing this action.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TimeEntryId: The ID of the time entry to delete. You can obtain this ID by calling Get Many Time Entries or Search Time Entries actions. Example: 2618918

Output:

  • Deleted (bool): Indicates whether the time entry was successfully deleted.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete a Time Entry’s External Reference

Deletes an external reference for a specific time entry in Harvest.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TimeEntryId: The ID of the time entry whose external reference you want to delete. Example: 28888666

Output:

  • Deleted (bool): True if the external reference was successfully deleted (HTTP 200/204). False if the operation failed or the reference does not exist.
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Default 0 means the request did not reach upstream (e.g., timeout). Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Time Entries

Retrieves all time entries for the Harvest account.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Limit: Maximum number of time entries to retrieve per page. Must be a positive integer. Default: 100. Example: 50
  • ClientId: Only return time entries belonging to the client with the given ID. You can get client IDs by calling the 'Get All Clients' action. Leave empty to include all clients. Example: 5735776
  • IsBilled: Filter by invoice status. Set to true to return only billed entries (already invoiced), false to return only unbilled entries (not yet invoiced). Leave empty to include all entries. Example: true
  • IsRunning: Filter by timer status. Set to true to return only running time entries (timer is active), false to return only stopped time entries (timer is not active). Leave empty to include all entries. Example: false
  • UserId: Only return time entries belonging to the user with the given ID. You can get user IDs by calling the 'Get All Users' action. Leave empty to include all users. Example: 1782959
  • UpdatedSince: Only return time entries that have been updated since the given date and time. Format: ISO 8601 (YYYY-MM-DDTHH:MM:SSZ). Example: 2024-01-15T10:30:00Z
  • From: Only return time entries with a spent_date on or after the given date. Format: YYYY-MM-DD. Example: 2024-01-01
  • To: Only return time entries with a spent_date on or before the given date. Format: YYYY-MM-DD. Example: 2024-01-31

Output:

  • TimeEntries (object-array): List of time entry objects returned by the Harvest API. Each time entry contains: id (number, unique identifier), spent_date (string, date when time was spent in YYYY-MM-DD format), hours (number, hours tracked), rounded_hours (number, hours rounded based on project settings), notes (string, description of work done), is_locked (boolean, whether entry is locked for editing), locked_reason (string, reason for lock if applicable), is_closed (boolean, whether entry belongs to closed project), is_billed (boolean, whether entry has been invoiced), timer_started_at (string, timestamp when timer started in ISO 8601 format), started_time (string, time of day timer started), ended_time (string, time of day timer ended), is_running (boolean, whether timer is currently active), billable (boolean, whether entry is billable to client), budgeted (boolean, whether entry counts against project budget), billable_rate (number, hourly rate for billable entries), cost_rate (number, internal cost rate), created_at (string, timestamp when entry was created in ISO 8601 format), updated_at (string, timestamp when entry was last updated in ISO 8601 format), user (object with id and name, user who tracked the time), user_assignment (object with id, is_project_manager, is_active, budget, hourly_rate, user details), client (object with id, name and currency, associated client), project (object with id, name and code, associated project), task (object with id and name, associated task), task_assignment (object with id, billable, is_active, hourly_rate), external_reference (object with id, group_id, account_id, permalink, service and service_icon_url, external reference if integrated), invoice (object with id and number, associated invoice if billed).
  • Pagination (object): Pagination metadata containing: page (number, current page number starting from 1), per_page (number, number of items per page as specified in Limit parameter), total_pages (number, total number of pages available), total_entries (number, total number of time entries matching the filter criteria), next_page (number or null, next page number if available), previous_page (number or null, previous page number if available), links (object with first, next, previous and last URLs for pagination navigation).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of a Time Entry

Retrieves a time entry by its ID for the Harvest account.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TimeEntryId: The ID of the time entry to retrieve. You can obtain this ID by using the 'List Time Entries' workflow.

Output:

  • TimeEntry (object): The requested time entry object containing: id (number): Time entry unique identifier, spent_date (string): Date of the time entry (YYYY-MM-DD), hours (number): Hours logged (e.g., 5.5), notes (string): Description of the work, is_locked (boolean): Whether entry is locked, is_billed (boolean): Whether entry has been invoiced, timer_started_at (string): Time the timer was started (ISO 8601), started_time (string): Time tracking started, ended_time (string): Time tracking ended, is_running (boolean): Whether timer is currently running, billable (boolean): Whether the time entry is billable, budgeted (boolean): Whether the time entry counts towards the project budget, billable_rate (number): Rate used for billing, cost_rate (number): Cost rate for the time entry, created_at (string): When the entry was created (ISO 8601), updated_at (string): When the entry was last updated (ISO 8601), user (object): User who created the entry with id and name fields, user_assignment (object): User assignment details, client (object): Associated client with id and name fields, project (object): Associated project with id and name fields, task (object): Associated task with id and name fields, task_assignment (object): Task assignment details, external_reference (object): External reference information, invoice (object): Associated invoice if billed. Full schema: https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries/#the-time-entry-object
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Restart a Time Entry

Restarts a time entry for the Harvest account, creating a new running time entry.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TimeEntryId: The ID of the time entry to restart. You can obtain this ID through the 'List Time Entries' or 'Get a Time Entry' workflow. Restarting creates a new running time entry while keeping the original entry stopped.

Output:

  • TimeEntry (object): The newly created time entry object returned by the Harvest API. Contains the following fields:
  • id (number): Unique identifier of the time entry
  • spent_date (string): Date the time was recorded (YYYY-MM-DD format)
  • hours (number): Number of hours recorded
  • notes (string): Notes for the time entry
  • is_running (boolean): Whether the time entry is currently running (true after restart)
  • user (object): User information with id and name
  • project (object): Project information with id and name
  • task (object): Task information with id and name
  • created_at (string): Creation timestamp in ISO 8601 format
  • updated_at (string): Last update timestamp in ISO 8601 format

Example: {"id": 636709355, "spent_date": "2017-03-21", "hours": 1.35, "notes": "Worked on the project", "is_running": true, "user": {"id": 1782959, "name": "Kim Allen"}, "project": {"id": 14308069, "name": "Marketing Project"}, "task": {"id": 8083365, "name": "Graphic Design"}, "created_at": "2017-03-21T14:00:00Z", "updated_at": "2017-03-21T14:00:00Z"}

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Stop a Time Entry

Stops a running time entry for the Harvest account, recording the end time.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TimeEntryId: The ID of the time entry to stop. This ID can be obtained from the List Time Entries action (search for running entries with is_running=true) or from the output of Start a Time Entry action. Example: 987654321

Output:

  • TimeEntry (object): The stopped time entry object returned by Harvest API. Key fields: id (number, time entry ID), is_running (boolean, should be false after stopping), spent_date (string, date in YYYY-MM-DD format), hours (number, total hours tracked), notes (string, entry description), user (object, user who created the entry with id and name), client (object, associated client with id and name), project (object, associated project with id and name), task (object, associated task with id and name), started_time (string, start time in HH:MM format), ended_time (string, end time in HH:MM format), created_at (string, ISO 8601 timestamp), updated_at (string, ISO 8601 timestamp).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update a Time Entry

Updates specified fields of a time entry in Harvest, including ended_time, started_time, hours, and notes.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • TimeEntryId: The ID of the time entry to update. You can obtain this ID by calling 'List Time Entries' or 'Get a Time Entry' action. Example: 1234567890

Options:

  • EndedTime: New end time in ISO 8601 format. Supports full datetime with timezone (e.g., '2024-01-15T15:00:00Z') or time-only format (e.g., '15:00'). If only time is provided, it defaults to today's date. Example: "2024-01-15T15:00:00Z"
  • StartedTime: New start time in ISO 8601 format. Supports full datetime with timezone (e.g., '2024-01-15T09:00:00Z') or time-only format (e.g., '09:00'). If only time is provided, it defaults to today's date. Example: "2024-01-15T09:00:00Z"
  • Hours: New number of hours for the time entry; must be a non-negative number.
  • Notes: Updated notes for the time entry.

Output:

  • TimeEntry (object): The updated time entry object containing:
  • id (number): Time entry ID
  • hours (number): Updated hours
  • notes (string): Updated notes
  • started_time (string): Start time in ISO 8601
  • ended_time (string): End time in ISO 8601
  • is_running (boolean): Whether the timer is currently running
  • user (object): User who created the entry with fields: id, name
  • project (object): Associated project with fields: id, name, code
  • task (object): Associated task with fields: id, name
  • client (object): Associated client with fields: id, name
  • created_at (string): Creation timestamp
  • updated_at (string): Last update timestamp
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Create a User

Creates a new user object and sends an invitation email to the address specified in the email parameter. Returns a user object and a 201 Created response code if the call succeeded.

Input Parameters:

  • AccountId: Harvest account ID (required for API authentication). You can find this ID in your Harvest account settings under 'Account & Settings' > 'Account ID'. It's a numeric identifier like '123456'. If you're using OAuth2, this value is also returned in the authentication response.
  • FirstName: User's first name. Required.
  • LastName: User's last name. Required.
  • Email: Creates a new user object and sends an invitation email to the address specified in the email parameter. The invitation email is sent from Harvest (noreply@harvestapp.com) and contains a link for the user to set their password and activate their account. The user must click the link within 7 days to complete registration.

Options:

  • IsAdmin: Whether the user has Administrator permissions. Admins can manage company settings, users, and integrations. Note: Admin permission does NOT automatically grant ProjectManager permission. Default: false.
  • IsProjectManager: Whether the user has Project Manager permissions. Project Managers can create and manage projects. This is independent of Admin permission. Default: false.
  • Roles: Business roles assigned to the user (optional). Common roles include: Developer, Designer, Manager, Sales, QA, DevOps. Note: Role names are case-sensitive and should match exactly as shown. Example: ["Developer", "Team Lead"].
  • AdditionalFields: Additional optional user settings (key-value pairs). Common fields:
  • IsContractor (bool): Whether the user is a contractor. Default: false
  • HasAccessToAllFutureProjects (bool): Auto-add to future projects. Default: false
  • Timezone (string): User's timezone (e.g., 'America/New_York'). Defaults to company timezone
  • WeeklyCapacity (number): Work hours per week in seconds. Harvest API uses seconds for precision in time tracking calculations. Default: 126000 (35 hours). Common values: 20h=72000, 35h=126000, 40h=144000, 50h=180000. Tip: To convert hours to seconds, multiply by 3600 (e.g., 40h × 3600 = 144000).
  • DefaultHourlyRate (number): Default billing rate per hour. Default: 0
  • CostRate (number): Cost rate for project calculations. Default: 0
  • IsActive (bool): Whether the user account is active. Default: true

Example: {"Timezone": "America/Los_Angeles", "WeeklyCapacity": 144000, "CostRate": 75.5}

Output:

  • User (object): The created user object containing the following fields:
  • id (number): User's unique identifier in Harvest
  • first_name (string): User's first name
  • last_name (string): User's last name
  • email (string): User's email address
  • is_admin (bool): Whether user has admin permissions
  • is_contractor (bool): Whether user is a contractor
  • is_project_manager (bool): Whether user can create projects
  • can_create_projects (bool): Alias for is_project_manager
  • can_see_rates (bool): Whether user can see billing rates
  • timezone (string): User's timezone
  • weekly_capacity (number): Work hours per week in seconds
  • default_hourly_rate (number): Default billing rate
  • cost_rate (number): Cost rate for calculations
  • roles (array): Assigned business roles
  • access_roles (array): System access roles (e.g., ["administrator"], ["member"])
  • avatar_url (string): User's avatar image URL
  • created_at (string): Creation timestamp (ISO 8601)
  • updated_at (string): Last update timestamp (ISO 8601)
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Delete a User

Deletes a user from the Harvest account specified by user ID. This operation cannot be undone.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • UserId: The ID of the user to delete. Must be a positive integer. You can obtain user IDs by calling the List Users or Get a User action. Example: 12345678

Output:

  • Deleted (bool): Indicates whether the user was successfully deleted. Returns true only when Harvest API confirms deletion (HTTP 200/204). Returns false for any errors (check ErrorMessage for details).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of All Users

Retrieves all users for the Harvest account.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Options:

  • Page: Page number to retrieve (1-indexed). Use with Limit to paginate through all users. Example: Page=2 with Limit=100 retrieves users 101-200.
  • Limit: Maximum number of users to retrieve per page; must be a positive integer between 1 and 100.
  • IsActive: Filter by user status: 'true' = only active users, 'false' = only inactive users, 'all' (or empty) = no filter.
  • UpdatedSince: Only return users updated after this date/time. Use ISO8601 format: YYYY-MM-DDTHH:MM:SSZ. Examples: '2024-01-15T00:00:00Z' (midnight UTC), '2024-01-15T10:30:00+08:00' (with timezone). Leave empty to return all users regardless of update time.

Output:

  • Users (object-array): List of user objects. Each user contains: id (number), first_name (string), last_name (string), email (string), is_active (boolean), created_at (ISO8601 timestamp), updated_at (ISO8601 timestamp), roles (array of strings). Full schema: https://help.getharvest.com/api-v2/users-api/users/users/
  • Pagination (object): Pagination metadata returned by Harvest API. Contains: page (current page number), per_page (items per page), total_pages (total number of pages), total_entries (total number of users), has_more (boolean indicating if more pages exist), next_page (next page number or null).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of Authenticated User

Retrieves the data of the authenticated user for the Harvest account.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

Output:

  • User (object): Authenticated user object returned by Harvest API. Contains the following core fields:
  • id (number): User unique identifier
  • first_name (string): First name
  • last_name (string): Last name
  • email (string): Email address
  • is_active (boolean): Whether the user is active
  • is_admin (boolean): Whether the user is an admin
  • roles (array): User role list
  • timezone (string): User timezone
  • has_access_to_all_future_projects (boolean): Access to all future projects
  • avatar_url (string): User avatar URL
  • created_at (string): User creation timestamp
  • updated_at (string): User last update timestamp

Complete structure reference: https://help.getharvest.com/api-v2/users-api/users/users/#retrieve-the-currently-authenticated-user

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Get Data of a User

Retrieves user data for a specified user in the Harvest account.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • UserId: The ID of the user to retrieve. Obtain it via 'List Users' workflow or from Harvest admin panel user details page. Example: 12345678

Output:

  • User (object): User object containing the following fields:
  • id (number): Unique user identifier
  • first_name (string): User's first name
  • last_name (string): User's last name
  • email (string): User's email address
  • is_active (boolean): Whether the user is active
  • is_contractor (boolean): Whether the user is a contractor
  • is_admin (boolean): Whether the user has admin privileges
  • telephone (string): User's phone number
  • timezone (string): User's timezone
  • has_access_to_all_future_projects (boolean): Project access setting
  • default_hourly_rate (number): Default hourly rate
  • cost_rate (number): Cost rate for the user
  • roles (array): List of user roles
  • avatar_url (string): URL to user's avatar image
  • created_at (string): User creation timestamp
  • updated_at (string): Last update timestamp

Refer to Harvest API documentation for complete field list: https://help.getharvest.com/api-v2/users-api/users/users/

  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

Update a User

Updates the specific user by setting the values of provided parameters. Any parameters not provided will remain unchanged.

Input Parameters:

  • AccountId: Harvest Account ID (the unique identifier for your organization in Harvest).

It can be found in your Harvest Account Settings, or retrieved by calling the Get Current User API endpoint.

Example: "1234567"

  • UserId: ID of the user to update. Can be obtained via Get Many Users or Search Users workflow. Example: 789012

Options:

  • FirstName: The new first name of the user. Example: "John"
  • LastName: The new last name of the user. Example: "Doe"
  • Email: The new email address of the user. Must be valid format and unique within the account. Example: "john.doe@company.com"
  • IsActive: Whether the user is active or archived. Setting to false will archive the user (they cannot log in but historical data is preserved). Suitable for employee departure scenarios.
  • IsContractor: Whether the user is an external contractor. Contractors are tracked separately in reports and typically cannot view internal projects.
  • IsAdmin: Whether the user has administrator permissions. Admins can view all projects, modify billing rates, and manage other users. Setting to true automatically sets access_roles to 'administrator'.
  • AdditionalFields: Extended fields (key-value object) for updating low-frequency fields. Supported fields: timezone (string, e.g., "America/New_York"), has_access_to_all_future_projects (bool), weekly_capacity (number, in seconds, default 126000 = 35 hours/week), roles (array, e.g., ["Developer", "Manager"]). Example: {"timezone": "America/New_York", "weekly_capacity": 144000, "roles": ["Developer"]}

Output:

  • User (object): The updated user object. Fields include: id (number), first_name (string), last_name (string), email (string), telephone (string), timezone (string), has_access_to_all_future_projects (bool), is_contractor (bool), is_admin (bool), is_active (bool), created_at (string, ISO 8601), updated_at (string, ISO 8601), weekly_capacity (number, in seconds), default_hourly_rate (number), cost_rate (number), roles (array of strings), access_roles (array of strings, e.g., ['administrator', 'member']), avatar_url (string).
  • OriginalStatusCode (number): The original HTTP status code returned by the upstream API. Use for debugging.
  • StatusCode (number): Operation status code: 200=Success (check ErrorMessage for business errors), -1=Parameter validation error, 500=System error (may retry).
  • ErrorMessage (string): Detailed error message if any error occurred. Empty string if the operation succeeded.

5. Example Usage

This section demonstrates how to build a simple workflow to create a new client in your Harvest account.

The workflow will consist of a Start node, a Harvest: Create a Client node, and an Answer node to display the result.

1. Add the Harvest Node

  • In the workflow canvas, click the + button to add a new node.
  • Select the "Tools" tab in the pop-up panel.
  • Find and select "Harvest" from the list of tools.
  • From the list of supported operations for Harvest, click on "Create a Client" to add the node to your canvas.

2. Configure the Node

  • Click on the newly added "Create a Client" node to open its configuration panel on the right.
  • Credentials: Find the credentials field at the top. Click the dropdown menu and select your pre-configured Harvest credentials.
  • Parameters: Fill in the required input parameters for creating a client.
    • AccountId: Enter your Harvest Account ID. This is a numeric ID you can find in your Harvest account settings.
    • Name: Provide a name for the new client, for example, "New Tech Corp".
    • Currency (Optional): You can specify an ISO currency code, such as "USD". If left blank, it will use your account's default.

3. Run and Validate

  • Once all required parameters are correctly filled, any error indicators on the node will disappear.
  • Click the "Run Test" button in the top-right corner of the canvas to execute the workflow.
  • After a successful run, you can click the log icon (top right) to view the detailed inputs and outputs of the node, confirming that the client was created and an ID was returned.

After completing these steps, your workflow is fully configured. When executed, it will automatically create a new client in your Harvest account.

6. FAQs

Q: Why am I getting a 401 Unauthorized or 403 Forbidden error?

A: This typically indicates an issue with your credentials. Please check the following:

  • Account ID: Ensure the Account ID you provided is correct and matches the account your API token belongs to.
  • API Token: Verify that your Personal Access Token is correct and has not expired or been revoked.
  • Permissions: Make sure the user associated with the API token has the necessary permissions in Harvest to perform the desired action (e.g., creating clients, managing projects).

Q: How do I find my Harvest Account ID?

A: You can find your Account ID by logging into your Harvest account. The ID is typically visible in the URL of your browser when you are logged in (e.g., https://yourcompany.harvestapp.com/). The ID is the numeric value associated with your account, which you can also find in the source code of the page or in API-related settings.

Q: Can I create a time entry for another user?

A: Yes. Most operations that involve a user, such as "Create a Time Entry", include an optional UserId parameter. If you have the necessary permissions (usually as an administrator), you can provide the ID of another user in this field to perform the action on their behalf. If left blank, the action will default to the authenticated user.

7. Official Documentation

For more detailed information about the Harvest API, including endpoints, parameters, and rate limits, please refer to the Harvest Official API Documentation.

Updated on: May 20, 2026
Was This Page Helpful?
Prev Google Developer
Next HaloPSA
Discussion

Leave a Reply. Cancel reply

Your email address will not be published. Required fields are marked*

Product-related questions?Contact Our Support Team to Get a Quick Solution>
On this page
  • 1. Overview
  • 2. Prerequisites
  • 3. Credentials
  • 4. Supported Operations
    • Summary
    • Operation Details
  • 5. Example Usage
    • 1. Add the Harvest Node
    • 2. Configure the Node
    • 3. Run and Validate
  • 6. FAQs
  • 7. Official Documentation
loading...
No Results