Appbricx
Docs
FeaturesPricingStart free

Get started

OverviewWhat Appbricx isQuickstart with a coding agentQuickstart with the builderCore concepts

Guides

Data and tablesAccess and rolesBusiness rulesSign-inCustom screensRealtime and topicsWorkflows, schedules and webhooksServer functionsAI in your appPaymentsFilesMessagesIntegrationsVerifyPublishing, domains and rollbackOperating your appExport and self-hostSelf-host install

Tutorials

Build a booking app with Claude CodeMulti-user todo listClient portalSlack on new sign-upTemplates

Reference

Reference homeFrontend SDKHTTP APIMCP toolsCLIIntegrations catalogContract formatAI key resolutionRun Appbricx locally

Harvest

Create and list time entries in Harvest.

Project managementAPI key11 actionsAll integrations

On this page
  1. Connect
  2. Call it from a workflow
  3. Actions (11)
  4. get_time_entries
  5. custom_api_call
  6. get_clients
  7. get_estimates
  8. get_expenses
  9. get_invoices
  10. get_projects
  11. get_roles
  12. get_tasks
  13. get_users
  14. reports-uninvoiced
  15. Details

Connect

Auth type: API key (secret_text). Paste the API key (or token) from the provider's settings into the connect dialog. It is encrypted at rest and only decrypted on the server when an action runs.

  • In the editor: Backend panel, Integrations tab, then Connect. This connects it for the project.
  • For every project in a workspace: Workspace settings, Integrations.
  • Owners and admins choose which integrations members may connect in the admin panel (Integrations tab), and can attach their own OAuth app there.

Call it from a workflow

Pass the action name and its input. The call resolves with { success, output, error? }; a missing connection resolves with success false and the reason. See ctx.integrations.invoke and ctx.integrations.call.

Native workflow
// .workflow.js (native ctx)
export async function run(ctx) {
  const res = await ctx.integrations.invoke("harvest", "get_time_entries", {});
  if (!res.success) throw new Error(res.error);
  ctx.log.info("Harvest answered", { output: res.output });
}
defineWorkflow module
// defineWorkflow module (@app/sdk ctx)
import { defineWorkflow } from "@app/sdk";

export default defineWorkflow({
  id: "harvest-get-time-entries",
  name: "Harvest: Get Time Entries",
  description: "Calls Harvest when a row is created.",
  trigger: { type: "entity_event", entity: "tickets", event: "created" },
  async run(ctx, event) {
    const res = await ctx.integrations.call("harvest", {
      "action": "get_time_entries"
    }) as { success: boolean; error?: string };
    if (!res.success) throw new Error(res.error);
  },
});
From an app (connector proxy)
curl -X POST "$APP_ORIGIN/__appbricx/connector-proxy/harvest/get_time_entries" \
  -H "Authorization: Bearer $APP_KEY" \
  -H "content-type: application/json" \
  -d '{"props":{}}'

Actions

get_time_entriesin catalog

Get Time Entries. Fetches Time Entries

InputTypeDescription
fromoptionaltextOnly return time entries with an spent_date on or after the given date. (YYYY-MM-DD)
tooptionaltextOnly return time entries with an spent_date on or before the given date. (YYYY-MM-DD)
user_idoptionaltextOnly return time entries belonging to the user with the given ID.
client_idoptionaltextOnly return time entries belonging to the client with the given ID.
project_idoptionaltextOnly return time entries belonging to the project with the given ID.
task_idoptionaltextOnly return time entries belonging to the task with the given ID.
external_reference_idoptionaltextOnly return time entries with the given external reference ID.
is_billedoptionaltextPass `true` to only return time entries that have been invoiced and `false` to return time entries that have not been invoiced.
is_runningoptionaltextPass `true` to only return running time entries and `false` to return non-running time entries.
updated_sinceoptionaltextOnly return time entries that have been updated since the given date and time.
pageoptionaltextThe page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

custom_api_call

Custom API Call. Make a custom API call to a specific endpoint

InputTypeDescription
urlrequiredobject (depends on other props)url
methodrequiredone of "GET" | "POST" | "PATCH" | "PUT" | "DELETE" | "HEAD"Method
headersrequiredobjectAuthorization headers are injected automatically from your connection.
queryParamsrequiredobjectQuery Parameters
body_typeoptionalone of "none" | "json" | "form_data" | "raw"Body Type
bodyoptionalobject (depends on other props)Body
response_is_binaryoptionalbooleanEnable for files like PDFs, images, etc.
failsafeoptionalbooleanNo Error on Failure
timeoutoptionalnumberTimeout (in seconds)
followRedirectsoptionalbooleanFollow redirects

get_clients

Get Clients. Fetches Clients

InputTypeDescription
is_activeoptionaltextPass `true` to only return active clients and `false` to return inactive clients.
updated_sinceoptionaltextOnly return clients that have been updated since the given date and time.
pageoptionaltextDEPRECATED: The page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

get_estimates

Get Estimates. Fetches Estimates

InputTypeDescription
fromoptionaltextOnly return estimates with an issue_date on or after the given date. (YYYY-MM-DD)
tooptionaltextOnly return estimates with an issue_date on or before the given date. (YYYY-MM-DD)
stateoptionaltextOnly return estimates with a state matching the value provided. Options: draft, open, accepted, or declined.
updated_sinceoptionaltextOnly return estimates that have been updated since the given date and time.
client_idoptionaltextOnly return estimates belonging to the client with the given ID.
pageoptionaltextThe page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

get_expenses

Get Expenses. Fetches expenses

InputTypeDescription
fromoptionaltextOnly return expenses with an spent_date on or after the given date. (YYYY-MM-DD)
tooptionaltextOnly return expenses with an spent_date on or before the given date. (YYYY-MM-DD)
user_idoptionaltextOnly return expenses belonging to the user with the given ID.
client_idoptionaltextOnly return expenses belonging to the client with the given ID.
project_idoptionaltextOnly return expenses belonging to the project with the given ID.
is_billedoptionaltextPass `true` to only return expenses that have been invoiced and `false` to return expenses that have not been invoiced.
updated_sinceoptionaltextOnly return expenses that have been updated since the given date and time.
pageoptionaltextThe page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

get_invoices

Get Invoices. Fetches invoices

InputTypeDescription
fromoptionaltextOnly return invoices with an issue_date on or after the given date. (YYYY-MM-DD)
tooptionaltextOnly return invoices with an issue_date on or before the given date. (YYYY-MM-DD)
stateoptionaltextOnly return invoices with a state matching the value provided. Options: draft, open, paid, or closed.
updated_sinceoptionaltextOnly return invoices that have been updated since the given date and time.
client_idoptionaltextOnly return invoices belonging to the client with the given ID.
project_idoptionaltextOnly return invoices belonging to the project with the given ID.
pageoptionaltextThe page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

get_projects

Get Projects. Fetches projects

InputTypeDescription
is_activeoptionaltextPass `true` to only return active projects and `false` to return inactive projects.
updated_sinceoptionaltextOnly return projects that have been updated since the given date and time.
client_idoptionaltextOnly return invoices belonging to the client with the given ID.
pageoptionaltextDEPRECATED: The page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

get_roles

Get Roles. Fetches Roles

InputTypeDescription
pageoptionaltextDEPRECATED: The page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

get_tasks

Get Tasks. Fetches Tasks

InputTypeDescription
is_activeoptionaltextPass `true` to only return active tasks and `false` to return inactive tasks.
updated_sinceoptionaltextOnly return tasks that have been updated since the given date and time.
pageoptionaltextDEPRECATED: The page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

get_users

Get Users. Fetches Users

InputTypeDescription
is_activeoptionaltextPass `true` to only return active users and `false` to return inactive users.
updated_sinceoptionaltextOnly return users that have been updated since the given date and time.
pageoptionaltextDEPRECATED: The page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

reports-uninvoiced

Uninvoiced Report. Uninvoiced hours and expenses for all billable projects

InputTypeDescription
fromrequiredtextOnly report on time entries and expenses with a spent_date on or after the given date. (YYYY-MM-DD)
torequiredtextOnly report on time entries and expenses with a spent_date on or before the given date. (YYYY-MM-DD)
include_fixed_feeoptionaltextWhether or not to include fixed-fee projects in the response. (Default: true)
pageoptionaltextThe page number to use in pagination.
per_pageoptionaltextThe number of records to return per page. (1-2000)

Details

Id
harvest
Category
Project management
Tags
time-tracking, invoicing, timesheets
Package
@activepieces/piece-harvest@0.1.4
Tier
Community

On this page

  1. Connect
  2. Call it from a workflow
  3. Actions (11)
  4. get_time_entries
  5. custom_api_call
  6. get_clients
  7. get_estimates
  8. get_expenses
  9. get_invoices
  10. get_projects
  11. get_roles
  12. get_tasks
  13. get_users
  14. reports-uninvoiced
  15. Details
Appbricx

The backend, runtime and hosting for apps your coding agent builds. On our cloud, in yours, or on your own servers.

Features

Coding agents and MCPVerify testingBuilder consolePostgres databaseData APIRealtimeRow-level securitySign-in and authPaymentsWorkflows and jobsAI in your appIntegrationsBackups and rollbackHosting and domainsSelf-host and exportAll features

Product

ShowcasePricingFor coding agentsTemplatesPrivate cloudBring your own AI keyFAQ

Compare

Appbricx vs SupabaseLovable alternativeBolt alternativeFor freelancersFor agencies

Resources

DocumentationReferenceBlogSupportContact

© 2026 Appbricx. All rights reserved.

TermsPrivacyCookiesAcceptable Use