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 provides a comprehensive set of operations to interact with various resources within your Harvest account, including Clients, Contacts, Projects, Tasks, Time Entries, Expenses, Estimates, Invoices, and Users.
| 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 | Deletes a time entry specified by its ID for the Harvest account. |
| 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: Harvest account ID.
- Name: New client name.
Options:
- Currency: ISO currency code (optional).
- Address: A textual representation of the client’s physical address. May include new line characters. (optional).
- Active: Whether the client is active (default true).
Output:
- Client (object): The created client object with fields: Id (integer): Client ID. Name (string): Client name. Currency (string): ISO currency code. Active (bool): Active status. Details (string): Client details. CreatedAt (string): Creation timestamp (ISO 8601). UpdatedAt (string): Last update timestamp (ISO 8601).
- StatusCode (number): HTTP status code returned by the Harvest API.
- ErrorMessage (string): Error message if any.
Create a Contact
Creates a new contact in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- ClientId: The ID of the client the contact belongs to.
- 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).
- PhoneOffice: The office phone number (optional).
- PhoneMobile: The mobile phone number (optional).
- IsActive: Whether the contact should be active (optional).
Output:
- Contact (object): The created contact object with fields: Id (integer): Contact ID. FirstName (string): First name of the contact. LastName (string): Last name of the contact. Title (string): Job title of the contact. Email (string): Email address of the contact. PhoneOffice (string): Office phone number. PhoneMobile (string): Mobile phone number. ClientId (integer): Client ID the contact belongs to. IsActive (bool): Whether the contact is active. CreatedAt (string): ISO 8601 timestamp when the contact.
- StatusCode (number): HTTP status code returned by the Harvest API (201 for successful creation).
- ErrorMessage (string): Error message if any.
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.
- ClientId: The ID of the client to associate with the project.
- Name: The project name.
Options:
- Code: (Optional) Project code.
- IsActive: Whether the project is active.
- IsBillable: Whether the project is billable.
- BillBy: Billing method, one of ("Project", "Tasks", "People", "None").
- HourlyRate: Hourly rate when billing by people.
- Budget: The budget in hours for the project when budgeting by time.
- BudgetBy: Budget method, one of ("project_cost", "project_hours", "task_cost", "task_hours", "person_cost", "person_hours", "none").
- NotifyWhenOverBudget: Whether the budget resets every month. Defaults to false.
Output:
- Project (object): The complete object of the newly created project.
- StatusCode (number): HTTP status code: 201 indicates successful creation, while other values indicate failure.
- ErrorMessage (string): Error message: An error description is returned when the creation fails.
Create a Task
Creates a new task object in Harvest. Returns a task object and a 201 Created response code if the call succeeded.
Input Parameters:
- AccountId: Harvest Account ID header value.
- Name: The name of the task (required).
Options:
- BillableByDefault: Whether default tasks should be marked billable when creating a new project. Defaults to true.
- DefaultHourlyRate: The default hourly rate to use for this task when it is added to a project. Defaults to 0.
- IsDefault: Whether this task should be automatically added to future projects. Defaults to false.
- IsActive: Whether this task is active or archived. Defaults to true.
Output:
- Task (object): The created task object returned by Harvest API.
- StatusCode (number): Operation status code: -1 (parameter error), 201 (success), other HTTP codes for failure, 500 for exceptions.
- ErrorMessage (string): Error message if any; empty if success.
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: The Harvest account ID associated with the API request.
- ProjectId: The ID of the project to associate with the time entry.
- TaskId: The ID of the task to associate with the time entry.
- SpentDate: The date of the time entry in 'YYYY-MM-DD' format.
Options:
- Hours: The number of hours tracked. Defaults to 0.0, setting the entry as running.
- Notes: Optional notes for the time entry.
- UserId: The ID of the user to associate with the time entry. Defaults to the currently authenticated user’s ID.
Output:
- TimeEntry (object): The created time entry object as returned by the Harvest API.
- StatusCode (number): Operation result code: 201 (created successfully), -1 (parameter error), other HTTP codes for errors.
- ErrorMessage (string): Error message if operation fails.
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.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- ProjectId: The ID of the project to associate with the time entry.
- TaskId: The ID of the task to associate with the time entry.
- SpentDate: The date of the time entry in 'YYYY-MM-DD' format.
Options:
- StartedTime: The start time of the entry (e.g., '08:00am' or '17:30').
- EndedTime: The end time of the entry (e.g., '09:30am' or '18:45').
- Notes: Optional notes for the time entry.
- UserId: The ID of the user to associate with the time entry. Defaults to the currently authenticated user’s ID.
Output:
- TimeEntry (object): The created time entry object as returned by the Harvest API.
- StatusCode (number): Operation result code: 201 (created successfully), -1 (parameter error), other HTTP codes for errors.
- ErrorMessage (string): Error message if operation fails.
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.
- FirstName: User's first name. Required.
- LastName: User's last name. Required.
- Email: User's email address. Required.
Options:
- IsAdmin: Whether the user has Admin permissions
- IsContractor: Whether the user is a contractor (optional).
- IsProjectManager: Whether the user has Project Manager permissions.
- HasAccessToAllFutureProjects: Whether the user has access to all future projects (optional).
- Timezone: The user’s timezone. Defaults to the company’s timezone.
- CostRate: The cost rate to use for this user when calculating a project’s costs vs billable amount.
- Roles: Json string of business roles assigned to the user(optional).
- DefaultHourlyRate: Default hourly billing rate (optional).
- WeeklyCapacity: The number of hours per week this person is available to work in seconds. Defaults to 126000 seconds (35 hours).
- IsActive: Whether the user is active (optional).
Output:
- User (object): The created user object containing.
- StatusCode (number): HTTP status code of the operation (201 for success, -1 for parameter errors, 500 for exceptions).
- ErrorMessage (string): Error message if any occurred during the request.
Create an Estimate
Creates a new estimate in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- ClientId: The ID of the client the estimate belongs to.
Options:
- Currency: Currency of the estimate (optional).
- Discount: This percentage is subtracted from the subtotal. Example: use 10.0 for 10.0%.
- IssueDate: The date the estimate was issued (YYYY-MM-DD).
- Notes: Any additional notes to include on the estimate
- Number: The estimate number.
- PurchaseOrder: Purchase order number (optional).
- Subject: The estimate subject.
- Tax: This percentage is applied to the subtotal, including line items and discounts. Example: use 10.0 for 10.0%.
- Tax2: This percentage is applied to the subtotal, including line items and discounts. Example: use 10.0 for 10.0%.
- LineItems: Line items(e.g., [{ "kind": "Service", "description": "Consulting service", "quantity": 10, "unit_price": 100.0, "total_price": 1000.0,"taxed": 0.1}])
Output:
- Estimate (object): The created estimate object.
- StatusCode (number): HTTP status code (201 for created, -1 for parameter errors, 500 for exceptions).
- ErrorMessage (string): Error message if any.
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 associated with this expense. Required.
- ExpenseCategoryFilter: The Name Or ID of the expense category associated with this expense. Required.
- SpentDate: Date the expense occurred (YYYY-MM-DD). Required.
Options:
- UserId: The ID of the user associated with this expense. Optional. Defaults to the currently authenticated user.
- Units: The quantity of units for calculating total_cost. Optional. Required if using a unit-based expense category.
- TotalCost: The total amount of the expense. Optional. Required if not using a unit-based expense category.
- Notes: Textual notes describing the expense. Optional.
- Billable: Whether this expense is billable. Optional. Defaults to true.
Output:
- Expense (object): The created expense object.
- StatusCode (number): HTTP status code: 201 for created, -1 for parameter errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
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.
- ClientId: The ID of the client this invoice belongs to.
Options:
- RetainerId: The ID of the retainer to add funds to.
- EstimateId: The ID of the estimate associated with this invoice.
- Number: Invoice number.
- PurchaseOrder: Purchase order number.
- Tax: Tax percentage, e.g., 10.0 for 10%.
- Tax2: Second tax percentage.
- Discount: Discount percentage.
- Subject: The invoice subject.
- Notes: Additional notes.
- Currency: Currency code.
- IssueDate: Issue date in YYYY-MM-DD format.
- DueDate: Due date in YYYY-MM-DD format.
- LineItems: Json str of line item objects,
Output:
- Invoice (object): The created invoice object returned by Harvest API.
- StatusCode (number): HTTP status code: 201 indicates creation success; -1 indicates parameter error; 500 indicates exception; other values indicate API errors.
- ErrorMessage (string): Error message if any.
Delete a Client
Deletes a specific client in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest Account ID.
- ClientId: The Client ID to be deleted.
Output:
- Deleted (boolean): Indicate whether the client has successfully deleted.
- StatusCode (number): HTTP status codes: 204 indicates successful deletion, while others indicate failure or error.
- ErrorMessage (string): Error message if any.
Delete a Contact
Deletes a specific contact in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- ContactId: The ID of the contact to delete.
Output:
- Deleted (boolean): Indicates whether the contact was successfully deleted.
- StatusCode (number): HTTP status code returned by the Harvest API: 204 for successful deletion, other codes for errors, -1 for parameter validation errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
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 header value.
- ProjectId: The ID of the project to delete.
Output:
- Deleted (boolean): indicates whether the project was successfully deleted.
- StatusCode (number): Operation status code: -1 (parameter error), 200 (success), other HTTP codes for failure.
- ErrorMessage (string): Error message if any; empty string if operation is successful.
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 header value.
- TaskId: The ID of the task to delete.
Output:
- Deleted (boolean): Indicates whether the task was successfully deleted.
- StatusCode (number): Operation status code: -1 (parameter error), 200 (success), other HTTP codes for failure, 500 for exceptions.
- ErrorMessage (string): Error message if any; empty if success.
Delete a Time Entry
Deletes a time entry specified by its ID for the Harvest account.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- TimeEntryId: The ID of the time entry to delete.
Output:
- Deleted (boolean): Indicates whether the time entry was successfully deleted.
- StatusCode (number): Operation result code: 200 (success), -1 (parameter error), other values for HTTP errors.
- ErrorMessage (string): Error message if operation fails.
Delete a Time Entry’s External Reference
Deletes an external reference for a specific time entry in Harvest.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- TimeEntryId: The ID of the time entry whose external reference you want to delete.
Output:
- Deleted (boolean): Indicates whether the external reference was successfully deleted.
- StatusCode (number): Operation result code: 200 (success), -1 (parameter error), other HTTP codes for errors.
- ErrorMessage (string): Error message if operation fails.
Delete a User
Deletes a user from the Harvest account specified by user ID. This operation cannot be undone.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- UserId: The ID of the user to delete; must be a positive integer.
Output:
- Deleted (boolean): Indicates whether the user was successfully deleted.
- StatusCode (number): Overall operation status code: 200 (success), -1 (parameter error), other HTTP codes for errors, 500 for exceptions.
- ErrorMessage (string): Error message if the operation fails; empty otherwise.
Delete an Estimate
Deletes a specific estimate in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- EstimateId: The ID of the estimate to delete.
Output:
- Deleted (boolean): Indicates whether the estimate was successfully deleted.
- StatusCode (number): HTTP status code returned by the Harvest API: 204 for successful deletion, other codes for errors, -1 for parameter validation errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
Delete an Expense
Delete an existing expense by its ID using Harvest API.
Input Parameters:
- AccountId: Your Harvest account ID.
- ExpenseId: The ID of the expense to delete.
Output:
- Deleted (boolean): Indicates whether the expense was successfully deleted.
- StatusCode (number): HTTP status code: 204 indicates deletion success, other values indicate errors, -1 for parameter error, 500 for exception.
- ErrorMessage (string): Error message if any.
Delete an Invoice
Deletes a single invoice in Harvest specified by the invoice ID.
Input Parameters:
- AccountId: The Harvest account ID to identify the account.
- InvoiceId: The ID of the invoice to delete.
Output:
- Deleted (boolean): Indicates whether the invoice was successfully deleted.
- StatusCode (number): Overall status code: 200 for success, -1 for parameter validation error, 500 for exception.
- ErrorMessage (string): Error message if any; empty string if operation is successful.
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.
Options:
- Limit: Number of clients per page (per_page) (optional).
- IsActive: Filter to only return active clients (optional).
- UpdatedAt: Filter to return clients updated since this timestamp, in ISO 8601 format (optional).
Output:
- Clients (object-array): Array of client objects.
- StatusCode (number): HTTP status code returned by the Harvest API.
- ErrorMessage (string): Error message if any.
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.
Options:
- Limit: Maximum number of contacts to return per page (optional).
- IsActive: Filter contacts by active status; true returns only active contacts, false returns only inactive contacts (optional).
- UpdatedSince: ISO 8601 timestamp; returns only contacts updated since this time (optional).
Output:
- Contacts (object-array): List of contact objects returned by Harvest API.
- StatusCode (number): HTTP status code returned by the Harvest API; -1 indicates parameter validation error; 500 indicates exception.
- ErrorMessage (string): Error message if any.
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.
Options:
- Limit: Maximum number of estimates to return per page (optional).
- UpdatedSince: ISO 8601 timestamp; returns only estimates updated since this time (optional).
Output:
- Estimates (object-array): List of estimate objects.
- StatusCode (number): HTTP status code returned by the Harvest API: 200 for success, -1 for parameter errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
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.
Options:
- FromDate: Filter start date in YYYY-MM-DD format.
- ToDate: Filter end date in YYYY-MM-DD format.
- UserId: Filter by user ID.
- ProjectId: Filter by project ID.
- ClientId: Filter by client ID.
Output:
- Expenses (object-array): List of expense objects returned by Harvest API.
- StatusCode (number): Overall status code: 200 indicates success, other value indicates error, -1 indicates parameter check error, 500 indicates internal exception.
- ErrorMessage (string): Error message if any.
Get Data of All Invoices
Retrieves a list of invoices in Harvest with pagination support.
Input Parameters:
- AccountId: The Harvest account ID identifying the account.
Options:
- ClientId: Only return invoices belonging to the client with this ID.
- ProjectId: Only return invoices associated with the project with this ID.
- IssueDateFrom: Only return invoices with an issue_date on or after this date (YYYY-MM-DD).
- IssueDateTo: Only return invoices with an issue_date on or before this date (YYYY-MM-DD).
- DueDateFrom: Only return invoices with a due_date on or after this date (YYYY-MM-DD).
- DueDateTo: Only return invoices with a due_date on or before this date (YYYY-MM-DD).
- Page: Page number to retrieve, starting from 1.
- PerPage: Number of invoices per page, up to 100.
Output:
- Invoices (object-array): The list of invoice objects returned from Harvest API.
- 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.
- StatusCode (number): HTTP status code of the GET request; -1 for parameter validation error, 500 for exception.
- ErrorMessage (string): Error message if any occurred; empty string if operation is successful.
Get Data of All Projects
Retrieves all projects from Harvest, including data from all pages of results.
Input Parameters:
- AccountId: Harvest Account ID header value.
Options:
- Limit: Maximum number of projects to return. Default 100 (no limit).
- ClientId: Filter projects by client ID. Default 0 (no filter).
- UpdatedSince: Only return projects updated after this timestamp (RFC3339). Default "" (no filter).
Output:
- Projects (object-array): List of project objects as returned by Harvest API.
- StatusCode (number): Operation status code: -1 (parameter error), 200 (success), other HTTP codes for failure, 500 for exceptions.
- ErrorMessage (string): Error message if any; empty if success.
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 header value.
Options:
- Limit: Maximum number of tasks to return. Default 100 (no limit).
Output:
- Tasks (object-array): List of task objects as returned by Harvest API.
- StatusCode (number): Operation status code: -1 (parameter error), 200 (success), other HTTP codes for failure, 500 for exceptions.
- ErrorMessage (string): Error message if any; empty if success.
Get Data of All Time Entries
Retrieves all time entries for the Harvest account.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
Options:
- Limit: Maximum number of time entries to retrieve per page; must be a positive integer.
- ClientId: Only return time entries belonging to the client with the given ID
- IsBilled: Whether to only return time entries that have been invoiced and false to return time entries that have not been invoiced.
- IsRunning: Whether to only return running time entries and false to return non-running time entries.
- UserId: Only return time entries belonging to the user with the given ID
- UpdatedSince: Only return time entries that have been updated since the given date and time.
- From: Only return time entries with a spent_date on or after the given date.
- To: Only return time entries with a spent_date on or before the given date.
Output:
- TimeEntries (object-array): List of time entries as returned by the Harvest API.
- StatusCode (number): Operation result code: 200 (success), -1 (parameter error), other HTTP codes for errors.
- ErrorMessage (string): Error message if operation fails; empty otherwise.
Get Data of All Users
Retrieves all users for the Harvest account.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
Options:
- Limit: Maximum number of users to retrieve per page; must be a positive integer.
- IsActive: If true, only return active users; if false or omitted, no active-status filter is applied.
- UpdatedSince: Only return users updated after this ISO8601 timestamp; empty string or omitted to disable.
Output:
- Users (object-array): List of user objects as returned by the Harvest API.
- StatusCode (number): Overall operation status code: 200 (success), -1 (parameter error), other HTTP codes for errors, 500 for exceptions.
- ErrorMessage (string): Error message if the operation fails; empty otherwise.
Get Data of Authenticated User
Retrieves the data of the authenticated user for the Harvest account.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
Output:
- User (object): The authenticated user object returned by Harvest API.
- StatusCode (number): Overall operation status code: 200 (success), -1 (parameter error), other HTTP codes for errors, 500 for exceptions.
- ErrorMessage (string): Error message if the operation fails; empty otherwise.
Get Data of a Client
Retrieves a specific client by ID from Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- ClientId: The ID of the client you are retrieving.
Output:
- Client (object): The retrieved client object with fields: Id (integer): Client ID. Name (string): Client name. Currency (string): ISO currency code. Active (bool): Active status. Details (string): Client details. CreatedAt (string): Creation timestamp (ISO 8601). UpdatedAt (string): Last update timestamp (ISO 8601).
- StatusCode (number): HTTP status code returned by the Harvest API.
- ErrorMessage (string): Error message if any.
Get Data of a Contact
Retrieves a specific contact in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- ContactId: The ID of the contact to retrieve.
Output:
- Contact (object): The contact object returned by Harvest API.
- StatusCode (number): HTTP status code returned by the Harvest API: 200 for success, -1 for parameter validation errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
Get Data of a Project
Retrieve data of a specific project by its ID using Harvest API.
Input Parameters:
- AccountId: Harvest account ID.
- ProjectId: The ID of the project to retrieve.
Output:
- Project (object): The retrieved project object.
- StatusCode (number): HTTP status code: 200 indicates success, other codes indicate errors, -1 for parameter error, 500 for exception.
- ErrorMessage (string): Error message if any.
Get Data of a Task
Retrieves a specific task from Harvest by its ID.
Input Parameters:
- AccountId: Harvest Account ID header value.
- TaskId: The ID of the task to retrieve.
Output:
- Task (object): The task object returned by Harvest API.
- StatusCode (number): Operation status code: -1 (parameter error), 200 (success), other HTTP codes for failure, 500 for exceptions.
- ErrorMessage (string): Error message if any; empty if success.
Get Data of a Time Entry
Retrieves a time entry by its ID for the Harvest account.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- TimeEntryId: The ID of the time entry to retrieve.
Output:
- TimeEntry (object): The requested time entry object as returned by the Harvest API.
- StatusCode (number): Operation result code: 200 (success), -1 (parameter error), other HTTP codes for errors.
- ErrorMessage (string): Error message if operation fails.
Get Data of a User
Retrieves user data for a specified user in the Harvest account.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- UserId: The ID of the user to retrieve.
Output:
- User (object): The user object returned by Harvest API.
- StatusCode (number): Overall operation status code: 200 (success), -1 (parameter error), other HTTP codes for errors, 500 for exceptions.
- ErrorMessage (string): Error message if operation fails; empty otherwise.
Get Data of an Estimate
Retrieves a specific estimate in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- EstimateId: The ID of the estimate to retrieve.
Output:
- Estimate (object): The estimate object.
- StatusCode (number): HTTP status code returned by the Harvest API: 200 for success, -1 for parameter errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
Get Data of an Expense
Retrieve a specific expense by its ID using Harvest API.
Input Parameters:
- AccountId: Harvest account ID.
- ExpenseId: The ID of the expense to retrieve.
Output:
- Expense (object): The retrieved expense object.
- StatusCode (number): HTTP status code: 200 indicates success, other values indicate errors, -1 for parameter error, 500 for exception.
- ErrorMessage (string): Error message if any.
Get Data of an Invoice
Retrieves a specific invoice in Harvest by its invoice ID.
Input Parameters:
- AccountId: The Harvest account ID identifying the account.
- InvoiceId: The ID of the invoice to retrieve.
Output:
- Invoice (object): The invoice object returned from Harvest API.
- StatusCode (number): HTTP status code of the GET request; -1 for parameter error, 500 for exception.
- ErrorMessage (string): Error message if any occurred.
Restart a Time Entry
Restarts a time entry for the Harvest account, creating a new running time entry.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- TimeEntryId: The ID of the time entry to restart.
Output:
- TimeEntry (object): The newly created time entry object returned by the Harvest API.
- StatusCode (number): Operation result code: 200 (success), -1 (parameter error), other HTTP codes for errors.
- ErrorMessage (string): Error message if operation fails; empty otherwise.
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.
Output:
- Company (object): The company object with fields: Id (integer): Company ID. Name (string): Company name. BaseCurrency (string): ISO currency code for the company's base currency. WeekStartDay (string): Start day of the week. HourFormat (string): Hour format setting. Weekends (boolean): Whether weekends are considered workdays. CreatedAt (string): ISO 8601 timestamp when the company was created. UpdatedAt (string): ISO 8601 timestamp when the company was last updated.
- StatusCode (number): HTTP status code returned by the Harvest API.
- ErrorMessage (string): Error message if any.
Stop a Time Entry
Stops a running time entry for the Harvest account, recording the end time.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- TimeEntryId: The ID of the time entry to stop.
Output:
- TimeEntry (object): The stopped time entry object returned by Harvest API.
- StatusCode (number): Overall operation status code: 200 (success), -1 (parameter error), other HTTP codes for errors.
- ErrorMessage (string): Error message if operation fails; empty otherwise.
Update a Client
Updates a specific client in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- ClientId: The ID of the client to update.
Options:
- Name: New client name (optional).
- Currency: ISO currency code (optional).
- Address: A textual representation of the client’s physical address. May include new line characters.
- Active: Active status of the client (optional).
Output:
- Client (object): The updated client object returned by the Harvest API.
- StatusCode (number): HTTP status code returned by the Harvest API.
- ErrorMessage (string): Error message if any.
Update a Contact
Updates a specific contact in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- ContactId: The ID of the contact to update.
Options:
- FirstName: The first name of the contact (optional).
- LastName: The last name of the contact (optional).
- ClientId: The ID of the client the contact belongs to (optional).
- Title: The job title of the contact (optional).
- Email: The email address of the contact (optional).
- PhoneOffice: The office phone number (optional).
- PhoneMobile: The mobile phone number (optional).
- IsActive: Whether the contact should be active (optional).
Output:
- Contact (object): The updated contact object returned by the Harvest API.
- StatusCode (number): HTTP status code returned by the Harvest API: 200 for successful update, -1 for parameter errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
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 header value.
- ProjectId: The ID of the project to update.
Options:
- ClientId: The ID of the client (optional).
- Name: The new project name (optional).
- Code: The new project code (optional).
- IsActive: Whether the project is active (optional).
- IsBillable: Whether the project is billable (optional).
- BillBy: The invoicing method (optional).
- HourlyRate: Hourly rate for project billing (optional).
- Budget: Budget amount in hours or money (optional).
- BudgetBy: Budgeting method (optional).
- NotifyWhenOverBudget: Notify on budget overrun (optional).
- Notes: Project notes (optional).
Output:
- Project (object): The updated project object returned by Harvest API.
- StatusCode (number): Operation status code: -1 (parameter error), 200 (success), other HTTP codes for failure, 500 for exceptions.
- ErrorMessage (string): Error message if any; empty if success.
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 header value.
- TaskId: The ID of the task to update.
Options:
- Name: The new task name (optional).
- BillableByDefault: Whether the task is billable by default (optional).
- DefaultHourlyRate: The default hourly rate for the task (optional).
- IsDefault: Whether to set the task as default (optional).
- IsActive: Whether to set the task as active (optional).
Output:
- Task (object): The updated task object returned by Harvest API.
- StatusCode (number): Operation status code: -1 (parameter error), 200 (success), other HTTP codes for failure, 500 for exceptions.
- ErrorMessage (string): Error message if any; empty if success.
Update a Time Entry
Updates specified fields of a time entry in Harvest, including ended_time, started_time, hours, and notes.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- TimeEntryId: The ID of the time entry to update.
Options:
- EndedTime: New end time in ISO 8601 format(e.g., 3:00pm).
- StartedTime: New start time in ISO 8601 format(e.g, 3:00pm).
- 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 returned by the Harvest API.
- StatusCode (number): Overall operation status code: 200 (success), -1 (parameter error), other HTTP codes for errors, 500 for exceptions.
- ErrorMessage (string): Error message if the operation fails; empty otherwise.
Update a User
Updates the specific user by setting the values of provided parameters. Any parameters not provided will remain unchanged.
Input Parameters:
- AccountId: The Harvest account ID associated with the API request.
- UserId: ID of the user to update.
Options:
- FirstName: The new first name of the user.
- LastName: The new last name of the user.
- Email: The new email address of the user.
- Timezone: The new timezone for the user.
- HasAccessToAllFutureProjects: Whether the user should be automatically added to future projects.
- IsContractor: Whether the user is a contractor.
- IsActive: Whether the user is active or archived.
- WeeklyCapacity: The number of hours per week this person is available to work in seconds. Defaults to 126000 seconds (35 hours).
- Roles: The role names assigned to this person.
- IsAdmin: Whether the user has Admin permissions
Output:
- User (object): The updated user object returned by Harvest API.
- StatusCode (number): Overall operation status code: 200 (success), -1 (parameter error), other HTTP codes for errors, 500 for exceptions.
- ErrorMessage (string): Error message if the operation fails, empty otherwise.
Update an Estimate
Updates a specific estimate in Harvest via the Harvest API v2.
Input Parameters:
- AccountId: Harvest account ID.
- EstimateId: The ID of the estimate to update.
Options:
- ClientId: The ID of the client the estimate belongs to (optional).
- Currency: Currency of the estimate (optional).
- Discount: This percentage is subtracted from the subtotal. Example: use 10.0 for 10.0%.
- IssueDate: Date the invoice was issued. Defaults to today’s date.
- Notes: Any additional notes to include on the estimate.
- Number: If no value is set, the number will be automatically generated
- PurchaseOrder: The purchase order number.
- Subject: The estimate subject.
- Tax: This percentage is applied to the subtotal, including line items and discounts. Example: use 10.0 for 10.0%.
- Tax2: This percentage is applied to the subtotal, including line items and discounts. Example: use 10.0 for 10.0%.
- LineItems: String of line item objects (optional). Each with fields: Kind (string), Description (string), Quantity (integer), UnitPrice (number), Amount (number).
Output:
- Estimate (object): The updated estimate object returned by the Harvest API..
- StatusCode (number): HTTP status code: 200 for success, -1 for parameter errors, 500 for exceptions.
- ErrorMessage (string): Error message if any.
Update an Expense
Update an existing expense specified by its ID using Harvest API.
Input Parameters:
- AccountId: Harvest account ID.
- ExpenseId: The ID of the expense to update.
Options:
- ProjectId: (Optional) The ID of the project to associate.
- SpentDate: (Optional) Date of the expense in YYYY-MM-DD format.
- Amount: (Optional) New amount for the expense.
- Notes: (Optional) Notes or description for the expense.
- ExpenseCategoryID: The ID(Name) of the expense category this expense is being tracked against
Output:
- Expense (object): The updated expense object returned by Harvest API.
- StatusCode (number): HTTP status code: 200 indicates update success; -1 for parameter error; 500 for exception; other values for API errors.
- ErrorMessage (string): Error message if any.
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.
- InvoiceId: The ID of the invoice want to update.
Options:
- ClientId: The ID of the client this invoice belongs to.
- RetainerId: The ID of the retainer to add funds to.
- EstimateId: The ID of the estimate associated with this invoice.
- Number: Invoice number.
- PurchaseOrder: Purchase order number.
- Tax: Tax percentage, e.g., 10.0 for 10%.
- Tax2: Second tax percentage.
- Discount: Discount percentage.
- Subject: The invoice subject.
- Notes: Additional notes.
- Currency: Currency code.
- IssueDate: Issue date in YYYY-MM-DD format.
- DueDate: Due date in YYYY-MM-DD format.
- LineItems: List of line item objects
Output:
- Invoice (object): The updated invoice object returned by Harvest API.
- StatusCode (number): HTTP status code: 201 indicates creation success; -1 indicates parameter error; 500 indicates exception; other values indicate API errors.
- ErrorMessage (string): Error message if any.
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.
Leave a Reply.