PROJECT MANAGEMENT · TASKS
Time entries, projects, invoices, and expenses in their own account.
Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.
Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.
Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.
Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.
harvest_delete_v2_clients_by_client_idWRITEDelete a client. Deleting a client is only possible if it has no projects, invoices, or estimates associated with it. Returns a 200 OK response code if the call succeeded. via DELETE /v2/clients/{CLIENT_ID}
harvest_delete_v2_contacts_by_contact_idWRITEDelete a contact. Returns a 200 OK response code if the call succeeded. via DELETE /v2/contacts/{CONTACT_ID}
harvest_delete_v2_estimate_item_categories_by_estimate_item_category_idWRITEDelete an estimate item category. Returns a 200 OK response code if the call succeeded. via DELETE /v2/estimate_item_categories/{ESTIMATE_ITEM_CATEGORY_ID}
harvest_delete_v2_estimates_by_estimate_idWRITEDelete an estimate. Returns a 200 OK response code if the call succeeded. via DELETE /v2/estimates/{ESTIMATE_ID}
harvest_delete_v2_estimates_by_estimate_id_messages_by_message_idWRITEDelete an estimate message. Returns a 200 OK response code if the call succeeded. via DELETE /v2/estimates/{estimate_ID}/messages/{message_ID}
harvest_delete_v2_expense_categories_by_expense_category_idWRITEDelete an expense category. Returns a 200 OK response code if the call succeeded. via DELETE /v2/expense_categories/{EXPENSE_CATEGORY_ID}
harvest_delete_v2_expenses_by_expense_idWRITEDelete an expense. Returns a 200 OK response code if the call succeeded. via DELETE /v2/expenses/{EXPENSE_ID}
harvest_delete_v2_invoice_item_categories_by_invoice_item_category_idWRITEDelete an invoice item category. Deleting an invoice item category is only possible if use_as_service and use_as_expense are both false. Returns a 200 OK response code if the call succeeded. via DELETE /v2/invoice_item_categories/{INVOICE_ITEM_CATEGORY_ID}
harvest_delete_v2_invoices_by_invoice_idWRITEDelete an invoice. Returns a 200 OK response code if the call succeeded. via DELETE /v2/invoices/{INVOICE_ID}
harvest_delete_v2_invoices_by_invoice_id_messages_by_message_idWRITEDelete an invoice message. Returns a 200 OK response code if the call succeeded. via DELETE /v2/invoices/{INVOICE_ID}/messages/{message_ID}
harvest_delete_v2_invoices_by_invoice_id_payments_by_payment_idWRITEDelete an invoice payment. Returns a 200 OK response code if the call succeeded. via DELETE /v2/invoices/{INVOICE_ID}/payments/{PAYMENT_ID}
harvest_delete_v2_projects_by_project_idWRITEDeletes a project and any time entries or expenses tracked to it. However, invoices associated with the project will not be deleted. If you don’t want the project’s time entries and expenses to be deleted, you should archive the project instead. via DELETE /v2/projects/{PROJECT_ID}
harvest_delete_v2_projects_by_project_id_task_assignments_by_task_assignment_idWRITEDelete a task assignment. Deleting a task assignment is only possible if it has no time entries associated with it. Returns a 200 OK response code if the call succeeded. via DELETE /v2/projects/{PROJECT_ID}/task_assignments/{TASK_ASSIGNMENT_ID}
harvest_delete_v2_projects_by_project_id_user_assignments_by_user_assignment_idWRITEDelete a user assignment. Deleting a user assignment is only possible if it has no time entries or expenses associated with it. Returns a 200 OK response code if the call succeeded. via DELETE /v2/projects/{PROJECT_ID}/user_assignments/{USER_ASSIGNMENT_ID}
harvest_delete_v2_pto_holiday_calendars_by_holiday_calendar_idWRITEDeletes a holiday calendar. Returns a 200 OK response code and the deleted holiday calendar object. Only administrators can perform this action. via DELETE /v2/pto/holiday_calendars/{HOLIDAY_CALENDAR_ID}
harvest_delete_v2_pto_holiday_calendars_by_holiday_calendar_id_entries_by_entry_idWRITEDeletes a holiday calendar entry. Returns a 200 OK response code and the deleted holiday entry object. Only administrators can perform this action. via DELETE /v2/pto/holiday_calendars/{HOLIDAY_CALENDAR_ID}/entries/{ENTRY_ID}
harvest_delete_v2_pto_requests_by_pto_request_idWRITECancels a time off request. The request is not deleted from Harvest; instead, its status is updated to cancelled and it remains visible in request listings. Returns a 200 OK response code and the cancelled time off request object. via DELETE /v2/pto/requests/{PTO_REQUEST_ID}
harvest_delete_v2_pto_types_by_pto_type_idWRITEDeletes or deactivates an existing time off policy. By default, time off policies are deactivated rather than permanently deleted so historical requests and allocations remain preserved. Returns a 200 OK response code and the deactivated time off policy object with is_active set to false . To permanently delete a policy along with all of its associated requests and historical data, pass keep_history=false and confirm_delete_history=1 . A successful permanent deletion returns a 204 No Content response code. A policy cannot be permanently deleted if it is the only remaining policy in the company or if it has requests included in locked payroll. Only administrators can perform this action. via DELETE /v2/pto/types/{PTO_TYPE_ID}
harvest_delete_v2_pto_work_schedules_by_work_schedule_idWRITEDeactivates a non-default work schedule. Returns a 200 OK response code and the deactivated work schedule object with is_active set to false . Only administrators can perform this action. via DELETE /v2/pto/work_schedules/{WORK_SCHEDULE_ID}
harvest_delete_v2_roles_by_role_idWRITEDelete a role. Deleting a role will unlink it from any users it was assigned to. Returns a 200 OK response code if the call succeeded. via DELETE /v2/roles/{ROLE_ID}
harvest_delete_v2_tasks_by_task_idWRITEDelete a task. Deleting a task is only possible if it has no time entries associated with it. Returns a 200 OK response code if the call succeeded. via DELETE /v2/tasks/{TASK_ID}
harvest_delete_v2_time_entries_by_time_entry_idWRITEDelete a time entry. Deleting a time entry is only possible if it’s not closed and the associated project and task haven’t been archived. However, Admins can delete closed entries. Returns a 200 OK response code if the call succeeded. via DELETE /v2/time_entries/{TIME_ENTRY_ID}
harvest_delete_v2_time_entries_by_time_entry_id_external_referenceWRITEDelete a time entry’s external reference. Returns a 200 OK response code if the call succeeded. via DELETE /v2/time_entries/{TIME_ENTRY_ID}/external_reference
harvest_delete_v2_users_by_user_idWRITEDelete a user. Deleting a user is only possible if they have no time entries or expenses associated with them. Returns a 200 OK response code if the call succeeded. via DELETE /v2/users/{USER_ID}
harvest_get_api_v2_accountsREADList the Harvest and Forecast accounts this credential can act in, with the id that every api.harvestapp.com request must send in its Harvest-Account-Id header. Answered by Harvest ID, and the one call that needs no account header via GET /api/v2/accounts
harvest_get_v2_clientsREADReturns a list of your clients. The clients are returned sorted by creation date, with the most recently created clients appearing first. The response contains an object with a clients property that contains an array of up to per_page clients. Each entry in the array is a separate client object. If no more clients are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your clients. via GET /v2/clients
harvest_get_v2_clients_by_client_idREADRetrieves the client with the given ID. Returns a client object and a 200 OK response code if a valid identifier was provided. via GET /v2/clients/{CLIENT_ID}
harvest_get_v2_companyREADRetrieves the company for the currently authenticated user. Returns a company object and a 200 OK response code. via GET /v2/company
harvest_get_v2_contactsREADReturns a list of your contacts. The contacts are returned sorted by creation date, with the most recently created contacts appearing first. The response contains an object with a contacts property that contains an array of up to per_page contacts. Each entry in the array is a separate contact object. If no more contacts are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your contacts. via GET /v2/contacts
harvest_get_v2_contacts_by_contact_idREADRetrieves the contact with the given ID. Returns a contact object and a 200 OK response code if a valid identifier was provided. via GET /v2/contacts/{CONTACT_ID}
harvest_get_v2_estimate_item_categoriesREADReturns a list of your estimate item categories. The estimate item categories are returned sorted by creation date, with the most recently created estimate item categories appearing first. The response contains an object with a estimate_item_categories property that contains an array of up to per_page estimate item categories. Each entry in the array is a separate estimate item category object. If no more estimate item categories are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your estimate item categories. via GET /v2/estimate_item_categories
harvest_get_v2_estimate_item_categories_by_estimate_item_category_idREADRetrieves the estimate item category with the given ID. Returns an estimate item category object and a 200 OK response code if a valid identifier was provided. via GET /v2/estimate_item_categories/{ESTIMATE_ITEM_CATEGORY_ID}
harvest_get_v2_estimatesREADReturns a list of your estimates. The estimates are returned sorted by issue date, with the most recently issued estimates appearing first. The response contains an object with a estimates property that contains an array of up to per_page estimates. Each entry in the array is a separate estimate object. If no more estimates are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your estimates. via GET /v2/estimates
harvest_get_v2_estimates_by_estimate_idREADRetrieves the estimate with the given ID. Returns an estimate object and a 200 OK response code if a valid identifier was provided. via GET /v2/estimates/{ESTIMATE_ID}
harvest_get_v2_estimates_by_estimate_id_messagesREADReturns a list of messages associated with a given estimate. The estimate messages are returned sorted by creation date, with the most recently created messages appearing first. The response contains an object with an estimate_messages property that contains an array of up to per_page messages. Each entry in the array is a separate message object. If no more messages are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your messages. via GET /v2/estimates/{estimate_ID}/messages
harvest_get_v2_expense_categoriesREADReturns a list of your expense categories. The expense categories are returned sorted by creation date, with the most recently created expense categories appearing first. The response contains an object with a expense_categories property that contains an array of up to per_page expense categories. Each entry in the array is a separate expense category object. If no more expense categories are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your expense categories. via GET /v2/expense_categories
harvest_get_v2_expense_categories_by_expense_category_idREADRetrieves the expense category with the given ID. Returns an expense category object and a 200 OK response code if a valid identifier was provided. via GET /v2/expense_categories/{EXPENSE_CATEGORY_ID}
harvest_get_v2_expensesREADReturns a list of your expenses. If accessing this endpoint as an Administrator, all expenses in the account will be returned. If accessing this endpoint as a Manager, all expenses for assigned teammates and managed projects will be returned. The expenses are returned sorted by the spent_at date, with the most recent expenses appearing first. The response contains an object with a expenses property that contains an array of up to per_page expenses. Each entry in the array is a separate expense object. If no more expenses are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your expenses. via GET /v2/expenses
harvest_get_v2_expenses_by_expense_idREADRetrieves the expense with the given ID. Returns an expense object and a 200 OK response code if a valid identifier was provided. via GET /v2/expenses/{EXPENSE_ID}
harvest_get_v2_invoice_item_categoriesREADReturns a list of your invoice item categories. The invoice item categories are returned sorted by creation date, with the most recently created invoice item categories appearing first. The response contains an object with a invoice_item_categories property that contains an array of up to per_page invoice item categories. Each entry in the array is a separate invoice item category object. If no more invoice item categories are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your invoice item categories. via GET /v2/invoice_item_categories
harvest_get_v2_invoice_item_categories_by_invoice_item_category_idREADRetrieves the invoice item category with the given ID. Returns an invoice item category object and a 200 OK response code if a valid identifier was provided. via GET /v2/invoice_item_categories/{INVOICE_ITEM_CATEGORY_ID}
harvest_get_v2_invoicesREADReturns a list of your invoices. The invoices are returned sorted by issue date, with the most recently issued invoices appearing first. The response contains an object with a invoices property that contains an array of up to per_page invoices. Each entry in the array is a separate invoice object. If no more invoices are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your invoices. via GET /v2/invoices
harvest_get_v2_invoices_by_invoice_idREADRetrieves the invoice with the given ID. Returns an invoice object and a 200 OK response code if a valid identifier was provided. via GET /v2/invoices/{INVOICE_ID}
harvest_get_v2_invoices_by_invoice_id_messagesREADReturns a list of messages associated with a given invoice. The invoice messages are returned sorted by creation date, with the most recently created messages appearing first. The response contains an object with an invoice_messages property that contains an array of up to per_page messages. Each entry in the array is a separate message object. If no more messages are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your messages. via GET /v2/invoices/{INVOICE_ID}/messages
harvest_get_v2_invoices_by_invoice_id_messages_newREADReturns the subject and body text as configured in Harvest of an invoice message for a specific invoice and a 200 OK response code if the call succeeded. Does not create the invoice message. If no parameters are passed, will return the subject and body of a general invoice message for the specific invoice. via GET /v2/invoices/{INVOICE_ID}/messages/new
harvest_get_v2_invoices_by_invoice_id_paymentsREADReturns a list of payments associate with a given invoice. The payments are returned sorted by creation date, with the most recently created payments appearing first. The response contains an object with an invoice_payments property that contains an array of up to per_page payments. Each entry in the array is a separate payment object. If no more payments are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your payments. via GET /v2/invoices/{INVOICE_ID}/payments
harvest_get_v2_projectsREADReturns a list of your projects. The projects are returned sorted by creation date, with the most recently created projects appearing first. The response contains an object with a projects property that contains an array of up to per_page projects. Each entry in the array is a separate project object. If no more projects are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your projects. via GET /v2/projects
harvest_get_v2_projects_by_project_idREADRetrieves the project with the given ID. Returns a project object and a 200 OK response code if a valid identifier was provided. via GET /v2/projects/{PROJECT_ID}
harvest_get_v2_projects_by_project_id_task_assignmentsREADReturns a list of your task assignments for the project identified by PROJECT_ID . The task assignments are returned sorted by creation date, with the most recently created task assignments appearing first. The response contains an object with a task_assignments property that contains an array of up to per_page task assignments. Each entry in the array is a separate task assignment object. If no more task assignments are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your task assignments. via GET /v2/projects/{PROJECT_ID}/task_assignments
harvest_get_v2_projects_by_project_id_task_assignments_by_task_assignment_idREADRetrieves the task assignment with the given ID. Returns a task assignment object and a 200 OK response code if a valid identifier was provided. via GET /v2/projects/{PROJECT_ID}/task_assignments/{TASK_ASSIGNMENT_ID}
harvest_get_v2_projects_by_project_id_user_assignmentsREADReturns a list of user assignments for the project identified by PROJECT_ID . The user assignments are returned sorted by creation date, with the most recently created user assignments appearing first. The response contains an object with a user_assignments property that contains an array of up to per_page user assignments. Each entry in the array is a separate user assignment object. If no more user assignments are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your user assignments. via GET /v2/projects/{PROJECT_ID}/user_assignments
harvest_get_v2_projects_by_project_id_user_assignments_by_user_assignment_idREADRetrieves the user assignment with the given ID. Returns a user assignment object and a 200 OK response code if a valid identifier was provided. via GET /v2/projects/{PROJECT_ID}/user_assignments/{USER_ASSIGNMENT_ID}
harvest_get_v2_pto_allocationsREADReturns a list of customized and yearly time off allocations across users. The response contains an object with a pto_allocations property that contains an array of up to per_page allocations. via GET /v2/pto/allocations
harvest_get_v2_pto_assignmentsREADReturns a list of users alongside their assigned holiday calendars, assigned work schedules, and effective working hours. via GET /v2/pto/assignments
harvest_get_v2_pto_balancesREADReturns time off balances broken down per policy for a specific user and year. via GET /v2/pto/balances
harvest_get_v2_pto_holiday_calendarsREADReturns a list of holiday calendars. The response contains an object with a pto_holiday_calendars property that contains an array of up to per_page holiday calendars. Each entry in the array is a separate holiday calendar object. If no more calendars are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your calendars. via GET /v2/pto/holiday_calendars
harvest_get_v2_pto_holiday_calendars_by_holiday_calendar_idREADRetrieves the details of an existing holiday calendar. Returns a holiday calendar object and a 200 OK response code. via GET /v2/pto/holiday_calendars/{HOLIDAY_CALENDAR_ID}
harvest_get_v2_pto_holiday_calendars_by_holiday_calendar_id_entriesREADReturns a list of holiday entries for the calendar identified by HOLIDAY_CALENDAR_ID . The response contains an object with a pto_holiday_calendar_entries property that contains an array of up to per_page entries. via GET /v2/pto/holiday_calendars/{HOLIDAY_CALENDAR_ID}/entries
harvest_get_v2_pto_requestsREADReturns a list of time off requests. The response contains an object with a pto_requests property that contains an array of up to per_page time off requests. Each entry in the array is a separate time off request object. If no more requests are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your requests. via GET /v2/pto/requests
harvest_get_v2_pto_requests_by_pto_request_idREADRetrieves the details of an existing time off request. Returns a time off request object and a 200 OK response code. via GET /v2/pto/requests/{PTO_REQUEST_ID}
harvest_get_v2_pto_typesREADReturns a list of time off policies. The response contains an object with a pto_types property that contains an array of up to per_page time off policies. Each entry in the array is a separate time off policy object. If no more policies are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your policies. via GET /v2/pto/types
harvest_get_v2_pto_types_by_pto_type_idREADRetrieves the details of an existing time off policy. Returns a time off policy object and a 200 OK response code. via GET /v2/pto/types/{PTO_TYPE_ID}
harvest_get_v2_pto_work_schedulesREADReturns a list of work schedules. The response contains an object with a pto_work_schedules property that contains an array of up to per_page work schedules. via GET /v2/pto/work_schedules
harvest_get_v2_pto_work_schedules_by_work_schedule_idREADRetrieves the details of an existing work schedule. Returns a work schedule object and a 200 OK response code. via GET /v2/pto/work_schedules/{WORK_SCHEDULE_ID}
harvest_get_v2_reports_expenses_categoriesREADExpense Categories Report via GET /v2/reports/expenses/categories
harvest_get_v2_reports_expenses_clientsREADClients Expense Report via GET /v2/reports/expenses/clients
harvest_get_v2_reports_expenses_projectsREADProjects Expense Report via GET /v2/reports/expenses/projects
harvest_get_v2_reports_expenses_teamREADTeam Expense Report via GET /v2/reports/expenses/team
harvest_get_v2_reports_project_budgetREADThe response contains an object with a results property that contains an array of up to per_page results. Each entry in the array is a separate result object. If no more results are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your results. via GET /v2/reports/project_budget
harvest_get_v2_reports_time_clientsREADClients Time Report via GET /v2/reports/time/clients
harvest_get_v2_reports_time_projectsREADProjects Time Report via GET /v2/reports/time/projects
harvest_get_v2_reports_time_tasksREADTasks Report via GET /v2/reports/time/tasks
harvest_get_v2_reports_time_teamREADTeam Time Report via GET /v2/reports/time/team
harvest_get_v2_reports_uninvoicedREADThe response contains an object with a results property that contains an array of up to per_page results. Each entry in the array is a separate result object. If no more results are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your results. Note: Each request requires both the from and to parameters to be supplied in the URL’s query string. The timeframe supplied cannot exceed 1 year (365 days). via GET /v2/reports/uninvoiced
harvest_get_v2_rolesREADReturns a list of roles in the account. The roles are returned sorted by creation date, with the most recently created roles appearing first. The response contains an object with a roles property that contains an array of up to per_page roles. Each entry in the array is a separate role object. If no more roles are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your roles. via GET /v2/roles
harvest_get_v2_roles_by_role_idREADRetrieves the role with the given ID. Returns a role object and a 200 OK response code if a valid identifier was provided. via GET /v2/roles/{ROLE_ID}
harvest_get_v2_task_assignmentsREADReturns a list of your task assignments. The task assignments are returned sorted by creation date, with the most recently created task assignments appearing first. The response contains an object with a task_assignments property that contains an array of up to per_page task assignments. Each entry in the array is a separate task assignment object. If no more task assignments are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your task assignments. via GET /v2/task_assignments
harvest_get_v2_tasksREADReturns a list of your tasks. The tasks are returned sorted by creation date, with the most recently created tasks appearing first. The response contains an object with a tasks property that contains an array of up to per_page tasks. Each entry in the array is a separate task object. If no more tasks are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your tasks. via GET /v2/tasks
harvest_get_v2_tasks_by_task_idREADRetrieves the task with the given ID. Returns a task object and a 200 OK response code if a valid identifier was provided. via GET /v2/tasks/{TASK_ID}
harvest_get_v2_time_entriesREADReturns a list of time entries. The time entries are returned sorted by spent_date date. At this time, the sort option can’t be customized. The response contains an object with a time_entries property that contains an array of up to per_page time entries. Each entry in the array is a separate time entry object. If no more time entries are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your time entries. via GET /v2/time_entries
harvest_get_v2_time_entries_by_time_entry_idREADRetrieves the time entry with the given ID. Returns a time entry object and a 200 OK response code if a valid identifier was provided. via GET /v2/time_entries/{TIME_ENTRY_ID}
harvest_get_v2_user_assignmentsREADReturns a list of your projects user assignments, active and archived. The user assignments are returned sorted by creation date, with the most recently created user assignments appearing first. The response contains an object with a user_assignments property that contains an array of up to per_page user assignments. Each entry in the array is a separate user assignment object. If no more user assignments are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your user assignments. via GET /v2/user_assignments
harvest_get_v2_usersREADReturns a list of your users. The users are returned sorted by creation date, with the most recently created users appearing first. The response contains an object with a users property that contains an array of up to per_page users. Each entry in the array is a separate user object. If no more users are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your users. via GET /v2/users
harvest_get_v2_users_by_user_idREADRetrieves the user with the given ID. Returns a user object and a 200 OK response code if a valid identifier was provided. via GET /v2/users/{USER_ID}
harvest_get_v2_users_by_user_id_billable_ratesREADReturns a list of billable rates for the user identified by USER_ID . The billable rates are returned sorted by start_date , with the oldest starting billable rates appearing first. The response contains an object with a billable_rates property that contains an array of up to per_page billable rates. Each entry in the array is a separate billable rate object. If no more billable rates are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your billable rates. via GET /v2/users/{USER_ID}/billable_rates
harvest_get_v2_users_by_user_id_billable_rates_by_billable_rate_idREADRetrieves the billable rate with the given ID. Returns a billable rate object and a 200 OK response code if a valid identifier was provided. via GET /v2/users/{USER_ID}/billable_rates/{billable_RATE_ID}
harvest_get_v2_users_by_user_id_cost_ratesREADReturns a list of cost rates for the user identified by USER_ID . The cost rates are returned sorted by start_date , with the oldest starting cost rates appearing first. The response contains an object with a cost_rates property that contains an array of up to per_page cost rates. Each entry in the array is a separate cost rate object. If no more cost rates are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your cost rates. via GET /v2/users/{USER_ID}/cost_rates
harvest_get_v2_users_by_user_id_cost_rates_by_cost_rate_idREADRetrieves the cost rate with the given ID. Returns a cost rate object and a 200 OK response code if a valid identifier was provided. via GET /v2/users/{USER_ID}/cost_rates/{COST_RATE_ID}
harvest_get_v2_users_by_user_id_project_assignmentsREADReturns a list of active project assignments for the user identified by USER_ID . The project assignments are returned sorted by creation date, with the most recently created project assignments appearing first. The response contains an object with a project_assignments property that contains an array of up to per_page project assignments. Each entry in the array is a separate project assignment object. If no more project assignments are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your project assignments. via GET /v2/users/{USER_ID}/project_assignments
harvest_get_v2_users_by_user_id_teammatesREADReturns a list of assigned teammates for the user identified by USER_ID . The USER_ID must belong to a user that is a Manager, if not, a 422 Unprocessable Entity status code will be returned. The response contains an object with a teammates property that contains an array of up to per_page teammates. Each entry in the array is a separate teammate object. If no more teammates are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your teammates. via GET /v2/users/{USER_ID}/teammates
harvest_get_v2_users_meREADRetrieves the currently authenticated user. Returns a user object and a 200 OK response code. via GET /v2/users/me
harvest_get_v2_users_me_project_assignmentsREADReturns a list of your active project assignments for the currently authenticated user. The project assignments are returned sorted by creation date, with the most recently created project assignments appearing first. The response contains an object with a project_assignments property that contains an array of up to per_page project assignments. Each entry in the array is a separate project assignment object. If no more project assignments are available, the resulting array will be empty. Several additional pagination properties are included in the response to simplify paginating your project assignments. via GET /v2/users/me/project_assignments
harvest_patch_v2_clients_by_client_idWRITEUpdates the specific client by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a client object and a 200 OK response code if the call succeeded. via PATCH /v2/clients/{CLIENT_ID}
harvest_patch_v2_companyWRITEUpdates the company setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a company object and a 200 OK response code if the call succeeded. via PATCH /v2/company
harvest_patch_v2_contacts_by_contact_idWRITEUpdates the specific contact by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a contact object and a 200 OK response code if the call succeeded. via PATCH /v2/contacts/{CONTACT_ID}
harvest_patch_v2_estimate_item_categories_by_estimate_item_category_idWRITEUpdates the specific estimate item category by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns an estimate item category object and a 200 OK response code if the call succeeded. via PATCH /v2/estimate_item_categories/{ESTIMATE_ITEM_CATEGORY_ID}
harvest_patch_v2_estimates_by_estimate_idWRITEUpdates the specific estimate by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns an estimate object and a 200 OK response code if the call succeeded. via PATCH /v2/estimates/{ESTIMATE_ID}
harvest_patch_v2_expense_categories_by_expense_category_idWRITEUpdates the specific expense category by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns an expense category object and a 200 OK response code if the call succeeded. via PATCH /v2/expense_categories/{EXPENSE_CATEGORY_ID}
harvest_patch_v2_expenses_by_expense_idWRITEUpdates the specific expense by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns an expense object and a 200 OK response code if the call succeeded. Note that changes to project_id and expense_category_id will be silently dropped if the expense is locked. Users with sufficient permissions are able to update the rest of a locked expense’s attributes. via PATCH /v2/expenses/{EXPENSE_ID}
harvest_patch_v2_invoice_item_categories_by_invoice_item_category_idWRITEUpdates the specific invoice item category by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns an invoice item category object and a 200 OK response code if the call succeeded. via PATCH /v2/invoice_item_categories/{INVOICE_ITEM_CATEGORY_ID}
harvest_patch_v2_invoices_by_invoice_idWRITEUpdates the specific invoice by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns an invoice object and a 200 OK response code if the call succeeded. via PATCH /v2/invoices/{INVOICE_ID}
harvest_patch_v2_projects_by_project_idWRITEUpdates the specific project by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a project object and a 200 OK response code if the call succeeded. via PATCH /v2/projects/{PROJECT_ID}
harvest_patch_v2_projects_by_project_id_task_assignments_by_task_assignment_idWRITEUpdates the specific task assignment by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a task assignment object and a 200 OK response code if the call succeeded. via PATCH /v2/projects/{PROJECT_ID}/task_assignments/{TASK_ASSIGNMENT_ID}
harvest_patch_v2_projects_by_project_id_user_assignments_by_user_assignment_idWRITEUpdates the specific user assignment by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a user assignment object and a 200 OK response code if the call succeeded. via PATCH /v2/projects/{PROJECT_ID}/user_assignments/{USER_ASSIGNMENT_ID}
harvest_patch_v2_pto_allocationsWRITEUpdates or resets per-user yearly allocation overrides. Returns an allocation object and a 200 OK response code when customized overrides are present or saved. When an allocation is reset to defaults (either by passing reset_to_default: true or when the submitted values match the policy defaults), the allocation override record is removed and a reset confirmation object is returned instead. via PATCH /v2/pto/allocations
harvest_patch_v2_pto_assignments_by_user_idWRITEAssigns or unassigns a holiday calendar and work schedule for a specific user. Returns an assignment object and a 200 OK response code. via PATCH /v2/pto/assignments/{USER_ID}
harvest_patch_v2_pto_holiday_calendars_by_holiday_calendar_idWRITEUpdates an existing holiday calendar. Returns a holiday calendar object and a 200 OK response code if the call succeeded. Only administrators can perform this action. via PATCH /v2/pto/holiday_calendars/{HOLIDAY_CALENDAR_ID}
harvest_patch_v2_pto_holiday_calendars_by_holiday_calendar_id_entries_by_entry_idWRITEUpdates an existing holiday calendar entry. Returns a holiday entry object and a 200 OK response code. Only administrators can perform this action. via PATCH /v2/pto/holiday_calendars/{HOLIDAY_CALENDAR_ID}/entries/{ENTRY_ID}
harvest_patch_v2_pto_requests_by_pto_request_idWRITEUpdates an unreviewed time off request. Only pending or changes_requested requests can be edited. Updating a request cancels the original request and returns a new replacement request object with a new id and a 200 OK response code. via PATCH /v2/pto/requests/{PTO_REQUEST_ID}
harvest_patch_v2_pto_types_by_pto_type_idWRITEUpdates an existing time off policy. Returns a time off policy object and a 200 OK response code if the call succeeded. Only administrators can perform this action. via PATCH /v2/pto/types/{PTO_TYPE_ID}
harvest_patch_v2_pto_work_schedules_by_work_schedule_idWRITEUpdates an existing work schedule. Returns a work schedule object and a 200 OK response code. Only administrators can perform this action. via PATCH /v2/pto/work_schedules/{WORK_SCHEDULE_ID}
harvest_patch_v2_roles_by_role_idWRITEUpdates the specific role by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a role object and a 200 OK response code if the call succeeded. via PATCH /v2/roles/{ROLE_ID}
harvest_patch_v2_tasks_by_task_idWRITEUpdates the specific task by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a task object and a 200 OK response code if the call succeeded. via PATCH /v2/tasks/{TASK_ID}
harvest_patch_v2_time_entries_by_time_entry_idWRITEUpdates the specific time entry by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a time entry object and a 200 OK response code if the call succeeded. via PATCH /v2/time_entries/{TIME_ENTRY_ID}
harvest_patch_v2_time_entries_by_time_entry_id_restartWRITERestarting a time entry is only possible if it isn’t currently running. Returns a 200 OK response code if the call succeeded. via PATCH /v2/time_entries/{TIME_ENTRY_ID}/restart
harvest_patch_v2_time_entries_by_time_entry_id_stopWRITEStopping a time entry is only possible if it’s currently running. Returns a 200 OK response code if the call succeeded. via PATCH /v2/time_entries/{TIME_ENTRY_ID}/stop
harvest_patch_v2_users_by_user_idWRITEUpdates the specific user by setting the values of the parameters passed. Any parameters not provided will be left unchanged. Returns a user object and a 200 OK response code if the call succeeded. via PATCH /v2/users/{USER_ID}
harvest_patch_v2_users_by_user_id_teammatesWRITEUpdates the the assigned teammates for a specific user. Returns list of assigned teammates and a 200 OK response code if the call succeeded. The USER_ID must belong to a user that is a Manager, if not, a 422 Unprocessable Entity status code will be returned. Adding teammates for the first time will add the people_manager access role to the Manager. Any IDs not included in the teammate_ids that are currently assigned will be unassigned from the Manager. Use an empty array to unassign all users. This will also remove the people_manager access role from the Manager. via PATCH /v2/users/{USER_ID}/teammates
harvest_post_v2_clientsWRITECreates a new client object. Returns a client object and a 201 Created response code if the call succeeded. via POST /v2/clients
harvest_post_v2_contactsWRITECreates a new contact object. Returns a contact object and a 201 Created response code if the call succeeded. via POST /v2/contacts
harvest_post_v2_estimate_item_categoriesWRITECreates a new estimate item category object. Returns an estimate item category object and a 201 Created response code if the call succeeded. via POST /v2/estimate_item_categories
harvest_post_v2_estimatesWRITECreates a new estimate object. Returns an estimate object and a 201 Created response code if the call succeeded. via POST /v2/estimates
harvest_post_v2_estimates_by_estimate_id_messagesWRITECreates a new estimate message object. Returns an estimate message object and a 201 Created response code if the call succeeded. via POST /v2/estimates/{estimate_ID}/messages
harvest_post_v2_expense_categoriesWRITECreates a new expense category object. Returns an expense category object and a 201 Created response code if the call succeeded. via POST /v2/expense_categories
harvest_post_v2_expensesWRITECreates a new expense object. Returns an expense object and a 201 Created response code if the call succeeded. via POST /v2/expenses
harvest_post_v2_invoice_item_categoriesWRITECreates a new invoice item category object. Returns an invoice item category object and a 201 Created response code if the call succeeded. via POST /v2/invoice_item_categories
harvest_post_v2_invoicesWRITECreates a new invoice object. Returns an invoice object and a 201 Created response code if the call succeeded. via POST /v2/invoices
harvest_post_v2_invoices_by_invoice_id_messagesWRITECreates a new invoice message object and sends it. Returns an invoice message object and a 201 Created response code if the call succeeded. A note about the optional event_type parameter: If event_type is omitted in a request, its default value of null means the message will be sent. In such a request, if the recipients array is omitted or empty and send_me_a_copy is also omitted or set to false , the request will fail because the message has no recipients. When omitting event_type to create and send a message, be sure to include a recipients array as a parameter or ensure the send_me_a_copy parameter is included and set to true. via POST /v2/invoices/{INVOICE_ID}/messages
harvest_post_v2_invoices_by_invoice_id_paymentsWRITECreates a new invoice payment object. Returns an invoice payment object and a 201 Created response code if the call succeeded. via POST /v2/invoices/{INVOICE_ID}/payments
harvest_post_v2_projectsWRITECreates a new project object. Returns a project object and a 201 Created response code if the call succeeded. via POST /v2/projects
harvest_post_v2_projects_by_project_id_task_assignmentsWRITECreates a new task assignment object. Returns a task assignment object and a 201 Created response code if the call succeeded. via POST /v2/projects/{PROJECT_ID}/task_assignments
harvest_post_v2_projects_by_project_id_user_assignmentsWRITECreates a new user assignment object. Returns a user assignment object and a 201 Created response code if the call succeeded. via POST /v2/projects/{PROJECT_ID}/user_assignments
harvest_post_v2_pto_holiday_calendarsWRITECreates a new holiday calendar. Returns a holiday calendar object and a 201 Created response code if the call succeeded. Only administrators can perform this action. via POST /v2/pto/holiday_calendars
harvest_post_v2_pto_holiday_calendars_by_holiday_calendar_id_entriesWRITECreates one or more holiday entries in a calendar. Supports a single date or a range of dates. Returns a 201 Created response code. Only administrators can perform this action. via POST /v2/pto/holiday_calendars/{HOLIDAY_CALENDAR_ID}/entries
harvest_post_v2_pto_requestsWRITECreates a new time off request. Returns a time off request object and a 201 Created response code if the call succeeded. via POST /v2/pto/requests
harvest_post_v2_pto_requests_by_pto_request_id_approveWRITEApproves a pending or changes_requested request. Returns a time off request object and a 200 OK response code. Only administrators can perform this action. via POST /v2/pto/requests/{PTO_REQUEST_ID}/approve
harvest_post_v2_pto_requests_by_pto_request_id_declineWRITEDeclines a time off request. Returns a time off request object and a 200 OK response code. Only administrators can perform this action. via POST /v2/pto/requests/{PTO_REQUEST_ID}/decline
harvest_post_v2_pto_requests_by_pto_request_id_request_changesWRITERequests changes on a time off request. Returns a time off request object and a 200 OK response code. Only administrators can perform this action. via POST /v2/pto/requests/{PTO_REQUEST_ID}/request_changes
harvest_post_v2_pto_typesWRITECreates a new time off policy. Returns a time off policy object and a 201 Created response code if the call succeeded. Only administrators can perform this action. via POST /v2/pto/types
harvest_post_v2_pto_work_schedulesWRITECreates a new work schedule. Returns a work schedule object and a 201 Created response code if the call succeeded. Only administrators can perform this action. via POST /v2/pto/work_schedules
harvest_post_v2_rolesWRITECreates a new role object. Returns a role object and a 201 Created response code if the call succeeded. via POST /v2/roles
harvest_post_v2_tasksWRITECreates a new task object. Returns a task object and a 201 Created response code if the call succeeded. via POST /v2/tasks
harvest_post_v2_time_entriesWRITECreates a new time entry object. Returns a time entry object and a 201 Created response code if the call succeeded. You should only use this method to create time entries when your account is configured to track time via duration . You can verify this by visiting the Settings page in your Harvest account or by checking if wants_timestamp_timers is false in the Company API . via POST /v2/time_entries
harvest_post_v2_usersWRITECreates 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. via POST /v2/users
harvest_post_v2_users_by_user_id_billable_ratesWRITECreates a new billable rate object. Returns a billable rate object and a 201 Created response code if the call succeeded. via POST /v2/users/{USER_ID}/billable_rates
harvest_post_v2_users_by_user_id_cost_ratesWRITECreates a new cost rate object. Returns a cost rate object and a 201 Created response code if the call succeeded. via POST /v2/users/{USER_ID}/cost_rates
Put Harvest behind one governed endpoint.
Same permissions, same audit trail, whatever else you connect next.