Skip to main content

Harvest full reference

This is the full reference documentation for the Harvest agent connector.

Supported entities and actions​

The Harvest connector supports the following entities and actions.

EntityActions
UsersList, Get, Context Store Search, Context Store SQL Query
ClientsList, Get, Context Store Search, Context Store SQL Query
ContactsList, Get, Context Store Search, Context Store SQL Query
CompanyGet, Context Store Search, Context Store SQL Query
ProjectsList, Get, Context Store Search, Context Store SQL Query
TasksList, Get, Context Store Search, Context Store SQL Query
Time EntriesList, Get, Context Store Search, Context Store SQL Query
InvoicesList, Get, Context Store Search, Context Store SQL Query
Invoice Item CategoriesList, Get, Context Store Search, Context Store SQL Query
EstimatesList, Get, Context Store Search, Context Store SQL Query
Estimate Item CategoriesList, Get, Context Store Search, Context Store SQL Query
ExpensesList, Get, Context Store Search, Context Store SQL Query
Expense CategoriesList, Get, Context Store Search, Context Store SQL Query
RolesList, Get, Context Store Search, Context Store SQL Query
User AssignmentsList, Context Store Search, Context Store SQL Query
Task AssignmentsList, Context Store Search, Context Store SQL Query
Time ProjectsList, Context Store Search, Context Store SQL Query
Time TasksList, Context Store Search, Context Store SQL Query

Users​

Users List​

Returns a paginated list of users in the Harvest account

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "users",
"action": "list"
}'

Python SDK​

await harvest.users.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
first_namenull | string
last_namenull | string
emailnull | string
telephonenull | string
timezonenull | string
has_access_to_all_future_projectsnull | boolean
is_contractornull | boolean
is_activenull | boolean
weekly_capacitynull | integer
default_hourly_ratenull | number
cost_ratenull | number
rolesnull | array
access_rolesnull | array
avatar_urlnull | string
created_atnull | string
updated_atnull | string
employee_idnull | string
calendar_integration_enablednull | boolean
calendar_integration_sourcenull | string
can_create_projectsnull | boolean
permissions_claimsnull | array

Meta​

Field NameTypeDescription
next_linknull | string

Users Get​

Get a single user by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "users",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.users.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesUser ID
Response Schema

Records​

Field NameTypeDescription
idinteger
first_namenull | string
last_namenull | string
emailnull | string
telephonenull | string
timezonenull | string
has_access_to_all_future_projectsnull | boolean
is_contractornull | boolean
is_activenull | boolean
weekly_capacitynull | integer
default_hourly_ratenull | number
cost_ratenull | number
rolesnull | array
access_rolesnull | array
avatar_urlnull | string
created_atnull | string
updated_atnull | string
employee_idnull | string
calendar_integration_enablednull | boolean
calendar_integration_sourcenull | string
can_create_projectsnull | boolean
permissions_claimsnull | array

Search and filter users records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "users",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"avatar_url": "<str>"
}
}
}
}
}'

Python SDK​

await harvest.users.context_store_search(
query={"filter": {"eq": {"avatar_url": "<str>"}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"avatar_url": "<str>"}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
avatar_urlstringAvatar URL
cost_ratenumberCost rate
created_atstringWhen created
default_hourly_ratenumberDefault hourly rate
emailstringEmail address
first_namestringFirst name
idintegerUnique identifier
is_activebooleanWhether active
is_contractorbooleanWhether contractor
last_namestringLast name
rolesarrayAssigned roles
telephonestringPhone number
timezonestringTimezone
updated_atstringWhen last updated
weekly_capacityintegerWeekly capacity in seconds
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].avatar_urlstringAvatar URL
data[].cost_ratenumberCost rate
data[].created_atstringWhen created
data[].default_hourly_ratenumberDefault hourly rate
data[].emailstringEmail address
data[].first_namestringFirst name
data[].idintegerUnique identifier
data[].is_activebooleanWhether active
data[].is_contractorbooleanWhether contractor
data[].last_namestringLast name
data[].rolesarrayAssigned roles
data[].telephonestringPhone number
data[].timezonestringTimezone
data[].updated_atstringWhen last updated
data[].weekly_capacityintegerWeekly capacity in seconds

Users Context Store SQL Query​

Run a SQL query against users records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "users",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.users.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "users",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Clients​

Clients List​

Returns a paginated list of clients

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "clients",
"action": "list"
}'

Python SDK​

await harvest.clients.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "clients",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
is_activenull | boolean
addressnull | string
statement_keynull | string
currencynull | string
created_atnull | string
updated_atnull | string

Meta​

Field NameTypeDescription
next_linknull | string

Clients Get​

Get a single client by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "clients",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.clients.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "clients",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesClient ID
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
is_activenull | boolean
addressnull | string
statement_keynull | string
currencynull | string
created_atnull | string
updated_atnull | string

Search and filter clients records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "clients",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"address": "<str>"
}
}
}
}
}'

Python SDK​

await harvest.clients.context_store_search(
query={"filter": {"eq": {"address": "<str>"}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "clients",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"address": "<str>"}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
addressstringThe client's postal address
created_atstringWhen the client record was created
currencystringThe currency used by the client
idintegerUnique identifier for the client
is_activebooleanWhether the client is active
namestringThe client's name
updated_atstringWhen the client record was last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].addressstringThe client's postal address
data[].created_atstringWhen the client record was created
data[].currencystringThe currency used by the client
data[].idintegerUnique identifier for the client
data[].is_activebooleanWhether the client is active
data[].namestringThe client's name
data[].updated_atstringWhen the client record was last updated

Clients Context Store SQL Query​

Run a SQL query against clients records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "clients",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.clients.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "clients",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Contacts​

Contacts List​

Returns a paginated list of contacts

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "contacts",
"action": "list"
}'

Python SDK​

await harvest.contacts.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "contacts",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
titlenull | string
first_namenull | string
last_namenull | string
emailnull | string
phone_officenull | string
phone_mobilenull | string
faxnull | string
created_atnull | string
updated_atnull | string
clientnull | object

Meta​

Field NameTypeDescription
next_linknull | string

Contacts Get​

Get a single contact by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "contacts",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.contacts.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "contacts",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesContact ID
Response Schema

Records​

Field NameTypeDescription
idinteger
titlenull | string
first_namenull | string
last_namenull | string
emailnull | string
phone_officenull | string
phone_mobilenull | string
faxnull | string
created_atnull | string
updated_atnull | string
clientnull | object

Search and filter contacts records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "contacts",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"client": {}
}
}
}
}
}'

Python SDK​

await harvest.contacts.context_store_search(
query={"filter": {"eq": {"client": {}}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "contacts",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"client": {}}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
clientobjectClient associated with the contact
created_atstringWhen created
emailstringEmail address
first_namestringFirst name
idintegerUnique identifier
last_namestringLast name
titlestringJob title
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].clientobjectClient associated with the contact
data[].created_atstringWhen created
data[].emailstringEmail address
data[].first_namestringFirst name
data[].idintegerUnique identifier
data[].last_namestringLast name
data[].titlestringJob title
data[].updated_atstringWhen last updated

Contacts Context Store SQL Query​

Run a SQL query against contacts records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "contacts",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.contacts.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "contacts",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Company​

Company Get​

Returns the company information for the authenticated account

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "company",
"action": "get"
}'

Python SDK​

await harvest.company.get()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "company",
"action": "get"
}'
Response Schema

Records​

Field NameTypeDescription
base_urinull | string
full_domainnull | string
namenull | string
is_activenull | boolean
week_start_daynull | string
wants_timestamp_timersnull | boolean
time_formatnull | string
date_formatnull | string
plan_typenull | string
clocknull | string
currency_code_displaynull | string
currency_symbol_displaynull | string
decimal_symbolnull | string
thousands_separatornull | string
color_schemenull | string
weekly_capacitynull | integer
expense_featurenull | boolean
invoice_featurenull | boolean
estimate_featurenull | boolean
approval_featurenull | boolean
team_featurenull | boolean
currencynull | string
saml_sign_in_requirednull | boolean
day_entry_notes_requirednull | boolean

Search and filter company records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "company",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"base_uri": "<str>"
}
}
}
}
}'

Python SDK​

await harvest.company.context_store_search(
query={"filter": {"eq": {"base_uri": "<str>"}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "company",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"base_uri": "<str>"}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
base_uristringThe base URI
currencystringCurrency used by the company
full_domainstringThe full domain name
is_activebooleanWhether the company is active
namestringThe name of the company
plan_typestringThe plan type
weekly_capacityintegerWeekly capacity in seconds
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].base_uristringThe base URI
data[].currencystringCurrency used by the company
data[].full_domainstringThe full domain name
data[].is_activebooleanWhether the company is active
data[].namestringThe name of the company
data[].plan_typestringThe plan type
data[].weekly_capacityintegerWeekly capacity in seconds

Company Context Store SQL Query​

Run a SQL query against company records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "company",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.company.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "company",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Projects​

Projects List​

Returns a paginated list of projects

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "projects",
"action": "list"
}'

Python SDK​

await harvest.projects.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "projects",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
codenull | string
is_activenull | boolean
is_billablenull | boolean
is_fixed_feenull | boolean
bill_bynull | string
hourly_ratenull | number
budget_bynull | string
budget_is_monthlynull | boolean
budgetnull | number
cost_budgetnull | number
cost_budget_include_expensesnull | boolean
notify_when_over_budgetnull | boolean
over_budget_notification_percentagenull | number
over_budget_notification_datenull | string
show_budget_to_allnull | boolean
feenull | number
notesnull | string
starts_onnull | string
ends_onnull | string
created_atnull | string
updated_atnull | string
clientnull | object

Meta​

Field NameTypeDescription
next_linknull | string

Projects Get​

Get a single project by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "projects",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.projects.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "projects",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesProject ID
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
codenull | string
is_activenull | boolean
is_billablenull | boolean
is_fixed_feenull | boolean
bill_bynull | string
hourly_ratenull | number
budget_bynull | string
budget_is_monthlynull | boolean
budgetnull | number
cost_budgetnull | number
cost_budget_include_expensesnull | boolean
notify_when_over_budgetnull | boolean
over_budget_notification_percentagenull | number
over_budget_notification_datenull | string
show_budget_to_allnull | boolean
feenull | number
notesnull | string
starts_onnull | string
ends_onnull | string
created_atnull | string
updated_atnull | string
clientnull | object

Search and filter projects records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "projects",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"budget": 0.0
}
}
}
}
}'

Python SDK​

await harvest.projects.context_store_search(
query={"filter": {"eq": {"budget": 0.0}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "projects",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"budget": 0.0}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
budgetnumberBudget amount
clientobjectClient details
codestringProject code
created_atstringWhen created
hourly_ratenumberHourly rate
idintegerUnique identifier
is_activebooleanWhether active
is_billablebooleanWhether billable
namestringProject name
starts_onstringStart date
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].budgetnumberBudget amount
data[].clientobjectClient details
data[].codestringProject code
data[].created_atstringWhen created
data[].hourly_ratenumberHourly rate
data[].idintegerUnique identifier
data[].is_activebooleanWhether active
data[].is_billablebooleanWhether billable
data[].namestringProject name
data[].starts_onstringStart date
data[].updated_atstringWhen last updated

Projects Context Store SQL Query​

Run a SQL query against projects records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "projects",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.projects.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "projects",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Tasks​

Tasks List​

Returns a paginated list of tasks

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "tasks",
"action": "list"
}'

Python SDK​

await harvest.tasks.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "tasks",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
billable_by_defaultnull | boolean
default_hourly_ratenull | number
is_defaultnull | boolean
is_activenull | boolean
created_atnull | string
updated_atnull | string

Meta​

Field NameTypeDescription
next_linknull | string

Tasks Get​

Get a single task by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "tasks",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.tasks.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "tasks",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesTask ID
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
billable_by_defaultnull | boolean
default_hourly_ratenull | number
is_defaultnull | boolean
is_activenull | boolean
created_atnull | string
updated_atnull | string

Search and filter tasks records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "tasks",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"billable_by_default": true
}
}
}
}
}'

Python SDK​

await harvest.tasks.context_store_search(
query={"filter": {"eq": {"billable_by_default": True}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "tasks",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"billable_by_default": True}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
billable_by_defaultbooleanWhether billable by default
created_atstringWhen created
default_hourly_ratenumberDefault hourly rate
idintegerUnique identifier
is_activebooleanWhether active
namestringTask name
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].billable_by_defaultbooleanWhether billable by default
data[].created_atstringWhen created
data[].default_hourly_ratenumberDefault hourly rate
data[].idintegerUnique identifier
data[].is_activebooleanWhether active
data[].namestringTask name
data[].updated_atstringWhen last updated

Tasks Context Store SQL Query​

Run a SQL query against tasks records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "tasks",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.tasks.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "tasks",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Time Entries​

Time Entries List​

Returns a paginated list of time entries

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_entries",
"action": "list"
}'

Python SDK​

await harvest.time_entries.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_entries",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
spent_datenull | string
hoursnull | number
hours_without_timernull | number
rounded_hoursnull | number
notesnull | string
is_lockednull | boolean
locked_reasonnull | string
is_closednull | boolean
is_billednull | boolean
timer_started_atnull | string
started_timenull | string
ended_timenull | string
is_runningnull | boolean
billablenull | boolean
budgetednull | boolean
billable_ratenull | number
cost_ratenull | number
created_atnull | string
updated_atnull | string
approval_statusnull | string
is_explicitly_lockednull | boolean
usernull | object
clientnull | object
projectnull | object
tasknull | object
user_assignmentnull | object
task_assignmentnull | object
external_referencenull | object
invoicenull | object

Meta​

Field NameTypeDescription
next_linknull | string

Time Entries Get​

Get a single time entry by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_entries",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.time_entries.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_entries",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesTime entry ID
Response Schema

Records​

Field NameTypeDescription
idinteger
spent_datenull | string
hoursnull | number
hours_without_timernull | number
rounded_hoursnull | number
notesnull | string
is_lockednull | boolean
locked_reasonnull | string
is_closednull | boolean
is_billednull | boolean
timer_started_atnull | string
started_timenull | string
ended_timenull | string
is_runningnull | boolean
billablenull | boolean
budgetednull | boolean
billable_ratenull | number
cost_ratenull | number
created_atnull | string
updated_atnull | string
approval_statusnull | string
is_explicitly_lockednull | boolean
usernull | object
clientnull | object
projectnull | object
tasknull | object
user_assignmentnull | object
task_assignmentnull | object
external_referencenull | object
invoicenull | object

Search and filter time entries records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_entries",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"billable": true
}
}
}
}
}'

Python SDK​

await harvest.time_entries.context_store_search(
query={"filter": {"eq": {"billable": True}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_entries",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"billable": True}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
billablebooleanWhether billable
clientobjectAssociated client
created_atstringWhen created
hoursnumberHours logged
idintegerUnique identifier
is_billedbooleanWhether billed
notesstringNotes
projectobjectAssociated project
spent_datestringDate time was spent
taskobjectAssociated task
updated_atstringWhen last updated
userobjectAssociated user
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].billablebooleanWhether billable
data[].clientobjectAssociated client
data[].created_atstringWhen created
data[].hoursnumberHours logged
data[].idintegerUnique identifier
data[].is_billedbooleanWhether billed
data[].notesstringNotes
data[].projectobjectAssociated project
data[].spent_datestringDate time was spent
data[].taskobjectAssociated task
data[].updated_atstringWhen last updated
data[].userobjectAssociated user

Time Entries Context Store SQL Query​

Run a SQL query against time entries records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_entries",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.time_entries.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_entries",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Invoices​

Invoices List​

Returns a paginated list of invoices

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoices",
"action": "list"
}'

Python SDK​

await harvest.invoices.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoices",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
client_keynull | string
numbernull | string
purchase_ordernull | string
amountnull | number
due_amountnull | number
taxnull | number
tax_amountnull | number
tax2null | number
tax2_amountnull | number
discountnull | number
discount_amountnull | number
subjectnull | string
notesnull | string
currencynull | string
statenull | string
period_startnull | string
period_endnull | string
issue_datenull | string
due_datenull | string
payment_termnull | string
payment_optionsnull | array
sent_atnull | string
paid_atnull | string
paid_datenull | string
closed_atnull | string
recurring_invoice_idnull | integer
created_atnull | string
updated_atnull | string
clientnull | object
estimatenull | object
retainernull | object
creatornull | object
line_itemsnull | array

Meta​

Field NameTypeDescription
next_linknull | string

Invoices Get​

Get a single invoice by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoices",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.invoices.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoices",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesInvoice ID
Response Schema

Records​

Field NameTypeDescription
idinteger
client_keynull | string
numbernull | string
purchase_ordernull | string
amountnull | number
due_amountnull | number
taxnull | number
tax_amountnull | number
tax2null | number
tax2_amountnull | number
discountnull | number
discount_amountnull | number
subjectnull | string
notesnull | string
currencynull | string
statenull | string
period_startnull | string
period_endnull | string
issue_datenull | string
due_datenull | string
payment_termnull | string
payment_optionsnull | array
sent_atnull | string
paid_atnull | string
paid_datenull | string
closed_atnull | string
recurring_invoice_idnull | integer
created_atnull | string
updated_atnull | string
clientnull | object
estimatenull | object
retainernull | object
creatornull | object
line_itemsnull | array

Search and filter invoices records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoices",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"amount": 0.0
}
}
}
}
}'

Python SDK​

await harvest.invoices.context_store_search(
query={"filter": {"eq": {"amount": 0.0}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoices",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"amount": 0.0}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
amountnumberTotal amount
clientobjectClient details
created_atstringWhen created
currencystringCurrency
due_amountnumberAmount due
due_datestringDue date
idintegerUnique identifier
issue_datestringIssue date
numberstringInvoice number
statestringCurrent state
subjectstringSubject
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].amountnumberTotal amount
data[].clientobjectClient details
data[].created_atstringWhen created
data[].currencystringCurrency
data[].due_amountnumberAmount due
data[].due_datestringDue date
data[].idintegerUnique identifier
data[].issue_datestringIssue date
data[].numberstringInvoice number
data[].statestringCurrent state
data[].subjectstringSubject
data[].updated_atstringWhen last updated

Invoices Context Store SQL Query​

Run a SQL query against invoices records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoices",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.invoices.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoices",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Invoice Item Categories​

Invoice Item Categories List​

Returns a paginated list of invoice item categories

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoice_item_categories",
"action": "list"
}'

Python SDK​

await harvest.invoice_item_categories.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoice_item_categories",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
use_as_servicenull | boolean
use_as_expensenull | boolean
created_atnull | string
updated_atnull | string

Meta​

Field NameTypeDescription
next_linknull | string

Invoice Item Categories Get​

Get a single invoice item category by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoice_item_categories",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.invoice_item_categories.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoice_item_categories",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesInvoice item category ID
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
use_as_servicenull | boolean
use_as_expensenull | boolean
created_atnull | string
updated_atnull | string

Search and filter invoice item categories records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoice_item_categories",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"created_at": "<str>"
}
}
}
}
}'

Python SDK​

await harvest.invoice_item_categories.context_store_search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoice_item_categories",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
created_atstringWhen created
idintegerUnique identifier
namestringCategory name
updated_atstringWhen last updated
use_as_expensebooleanWhether used as expense type
use_as_servicebooleanWhether used as service type
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].created_atstringWhen created
data[].idintegerUnique identifier
data[].namestringCategory name
data[].updated_atstringWhen last updated
data[].use_as_expensebooleanWhether used as expense type
data[].use_as_servicebooleanWhether used as service type

Invoice Item Categories Context Store SQL Query​

Run a SQL query against invoice item categories records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "invoice_item_categories",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.invoice_item_categories.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "invoice_item_categories",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Estimates​

Estimates List​

Returns a paginated list of estimates

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimates",
"action": "list"
}'

Python SDK​

await harvest.estimates.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimates",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
client_keynull | string
numbernull | string
purchase_ordernull | string
amountnull | number
taxnull | number
tax_amountnull | number
tax2null | number
tax2_amountnull | number
discountnull | number
discount_amountnull | number
subjectnull | string
notesnull | string
currencynull | string
statenull | string
issue_datenull | string
sent_atnull | string
accepted_atnull | string
declined_atnull | string
created_atnull | string
updated_atnull | string
clientnull | object
creatornull | object
line_itemsnull | array

Meta​

Field NameTypeDescription
next_linknull | string

Estimates Get​

Get a single estimate by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimates",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.estimates.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimates",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesEstimate ID
Response Schema

Records​

Field NameTypeDescription
idinteger
client_keynull | string
numbernull | string
purchase_ordernull | string
amountnull | number
taxnull | number
tax_amountnull | number
tax2null | number
tax2_amountnull | number
discountnull | number
discount_amountnull | number
subjectnull | string
notesnull | string
currencynull | string
statenull | string
issue_datenull | string
sent_atnull | string
accepted_atnull | string
declined_atnull | string
created_atnull | string
updated_atnull | string
clientnull | object
creatornull | object
line_itemsnull | array

Search and filter estimates records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimates",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"amount": 0.0
}
}
}
}
}'

Python SDK​

await harvest.estimates.context_store_search(
query={"filter": {"eq": {"amount": 0.0}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimates",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"amount": 0.0}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
amountnumberTotal amount
clientobjectClient details
created_atstringWhen created
currencystringCurrency
idintegerUnique identifier
issue_datestringIssue date
numberstringEstimate number
statestringCurrent state
subjectstringSubject
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].amountnumberTotal amount
data[].clientobjectClient details
data[].created_atstringWhen created
data[].currencystringCurrency
data[].idintegerUnique identifier
data[].issue_datestringIssue date
data[].numberstringEstimate number
data[].statestringCurrent state
data[].subjectstringSubject
data[].updated_atstringWhen last updated

Estimates Context Store SQL Query​

Run a SQL query against estimates records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimates",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.estimates.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimates",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Estimate Item Categories​

Estimate Item Categories List​

Returns a paginated list of estimate item categories

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimate_item_categories",
"action": "list"
}'

Python SDK​

await harvest.estimate_item_categories.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimate_item_categories",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
created_atnull | string
updated_atnull | string

Meta​

Field NameTypeDescription
next_linknull | string

Estimate Item Categories Get​

Get a single estimate item category by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimate_item_categories",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.estimate_item_categories.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimate_item_categories",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesEstimate item category ID
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
created_atnull | string
updated_atnull | string

Search and filter estimate item categories records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimate_item_categories",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"created_at": "<str>"
}
}
}
}
}'

Python SDK​

await harvest.estimate_item_categories.context_store_search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimate_item_categories",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
created_atstringWhen created
idintegerUnique identifier
namestringCategory name
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].created_atstringWhen created
data[].idintegerUnique identifier
data[].namestringCategory name
data[].updated_atstringWhen last updated

Estimate Item Categories Context Store SQL Query​

Run a SQL query against estimate item categories records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "estimate_item_categories",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.estimate_item_categories.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "estimate_item_categories",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Expenses​

Expenses List​

Returns a paginated list of expenses

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expenses",
"action": "list"
}'

Python SDK​

await harvest.expenses.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expenses",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
notesnull | string
total_costnull | number
unitsnull | number
is_closednull | boolean
is_lockednull | boolean
is_billednull | boolean
locked_reasonnull | string
spent_datenull | string
created_atnull | string
updated_atnull | string
billablenull | boolean
approval_statusnull | string
is_explicitly_lockednull | boolean
receiptnull | object
usernull | object
user_assignmentnull | object
projectnull | object
expense_categorynull | object
clientnull | object
invoicenull | object

Meta​

Field NameTypeDescription
next_linknull | string

Expenses Get​

Get a single expense by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expenses",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.expenses.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expenses",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesExpense ID
Response Schema

Records​

Field NameTypeDescription
idinteger
notesnull | string
total_costnull | number
unitsnull | number
is_closednull | boolean
is_lockednull | boolean
is_billednull | boolean
locked_reasonnull | string
spent_datenull | string
created_atnull | string
updated_atnull | string
billablenull | boolean
approval_statusnull | string
is_explicitly_lockednull | boolean
receiptnull | object
usernull | object
user_assignmentnull | object
projectnull | object
expense_categorynull | object
clientnull | object
invoicenull | object

Search and filter expenses records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expenses",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"billable": true
}
}
}
}
}'

Python SDK​

await harvest.expenses.context_store_search(
query={"filter": {"eq": {"billable": True}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expenses",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"billable": True}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
billablebooleanWhether billable
clientobjectAssociated client
created_atstringWhen created
expense_categoryobjectExpense category
idintegerUnique identifier
is_billedbooleanWhether billed
notesstringNotes
projectobjectAssociated project
spent_datestringDate spent
total_costnumberTotal cost
updated_atstringWhen last updated
userobjectAssociated user
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].billablebooleanWhether billable
data[].clientobjectAssociated client
data[].created_atstringWhen created
data[].expense_categoryobjectExpense category
data[].idintegerUnique identifier
data[].is_billedbooleanWhether billed
data[].notesstringNotes
data[].projectobjectAssociated project
data[].spent_datestringDate spent
data[].total_costnumberTotal cost
data[].updated_atstringWhen last updated
data[].userobjectAssociated user

Expenses Context Store SQL Query​

Run a SQL query against expenses records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expenses",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.expenses.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expenses",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Expense Categories​

Expense Categories List​

Returns a paginated list of expense categories

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expense_categories",
"action": "list"
}'

Python SDK​

await harvest.expense_categories.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expense_categories",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
unit_namenull | string
unit_pricenull | number
is_activenull | boolean
created_atnull | string
updated_atnull | string

Meta​

Field NameTypeDescription
next_linknull | string

Expense Categories Get​

Get a single expense category by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expense_categories",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.expense_categories.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expense_categories",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesExpense category ID
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
unit_namenull | string
unit_pricenull | number
is_activenull | boolean
created_atnull | string
updated_atnull | string

Search and filter expense categories records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expense_categories",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"created_at": "<str>"
}
}
}
}
}'

Python SDK​

await harvest.expense_categories.context_store_search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expense_categories",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
created_atstringWhen created
idintegerUnique identifier
is_activebooleanWhether active
namestringCategory name
unit_namestringUnit name
unit_pricenumberUnit price
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].created_atstringWhen created
data[].idintegerUnique identifier
data[].is_activebooleanWhether active
data[].namestringCategory name
data[].unit_namestringUnit name
data[].unit_pricenumberUnit price
data[].updated_atstringWhen last updated

Expense Categories Context Store SQL Query​

Run a SQL query against expense categories records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "expense_categories",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.expense_categories.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "expense_categories",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Roles​

Roles List​

Returns a paginated list of roles

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "roles",
"action": "list"
}'

Python SDK​

await harvest.roles.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "roles",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
user_idsnull | array
created_atnull | string
updated_atnull | string

Meta​

Field NameTypeDescription
next_linknull | string

Roles Get​

Get a single role by ID

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "roles",
"action": "get",
"params": {
"id": 0
}
}'

Python SDK​

await harvest.roles.get(
id=0
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "roles",
"action": "get",
"params": {
"id": 0
}
}'

Parameters​

Parameter NameTypeRequiredDescription
idintegerYesRole ID
Response Schema

Records​

Field NameTypeDescription
idinteger
namenull | string
user_idsnull | array
created_atnull | string
updated_atnull | string

Search and filter roles records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "roles",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"created_at": "<str>"
}
}
}
}
}'

Python SDK​

await harvest.roles.context_store_search(
query={"filter": {"eq": {"created_at": "<str>"}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "roles",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"created_at": "<str>"}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
created_atstringWhen created
idintegerUnique identifier
namestringRole name
updated_atstringWhen last updated
user_idsarrayUser IDs with this role
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].created_atstringWhen created
data[].idintegerUnique identifier
data[].namestringRole name
data[].updated_atstringWhen last updated
data[].user_idsarrayUser IDs with this role

Roles Context Store SQL Query​

Run a SQL query against roles records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "roles",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.roles.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "roles",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

User Assignments​

User Assignments List​

Returns a paginated list of user assignments across all projects

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "user_assignments",
"action": "list"
}'

Python SDK​

await harvest.user_assignments.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "user_assignments",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
is_project_managernull | boolean
is_activenull | boolean
budgetnull | number
created_atnull | string
updated_atnull | string
hourly_ratenull | number
use_default_ratesnull | boolean
projectnull | object
usernull | object

Meta​

Field NameTypeDescription
next_linknull | string

Search and filter user assignments records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "user_assignments",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"budget": 0.0
}
}
}
}
}'

Python SDK​

await harvest.user_assignments.context_store_search(
query={"filter": {"eq": {"budget": 0.0}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "user_assignments",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"budget": 0.0}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
budgetnumberBudget
created_atstringWhen created
hourly_ratenumberHourly rate
idintegerUnique identifier
is_activebooleanWhether active
is_project_managerbooleanWhether project manager
projectobjectAssociated project
updated_atstringWhen last updated
userobjectAssociated user
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].budgetnumberBudget
data[].created_atstringWhen created
data[].hourly_ratenumberHourly rate
data[].idintegerUnique identifier
data[].is_activebooleanWhether active
data[].is_project_managerbooleanWhether project manager
data[].projectobjectAssociated project
data[].updated_atstringWhen last updated
data[].userobjectAssociated user

User Assignments Context Store SQL Query​

Run a SQL query against user assignments records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "user_assignments",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.user_assignments.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "user_assignments",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Task Assignments​

Task Assignments List​

Returns a paginated list of task assignments across all projects

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "task_assignments",
"action": "list"
}'

Python SDK​

await harvest.task_assignments.list()

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "task_assignments",
"action": "list"
}'

Parameters​

Parameter NameTypeRequiredDescription
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
idinteger
billablenull | boolean
is_activenull | boolean
created_atnull | string
updated_atnull | string
hourly_ratenull | number
budgetnull | number
projectnull | object
tasknull | object

Meta​

Field NameTypeDescription
next_linknull | string

Search and filter task assignments records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "task_assignments",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"billable": true
}
}
}
}
}'

Python SDK​

await harvest.task_assignments.context_store_search(
query={"filter": {"eq": {"billable": True}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "task_assignments",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"billable": True}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
billablebooleanWhether billable
created_atstringWhen created
hourly_ratenumberHourly rate
idintegerUnique identifier
is_activebooleanWhether active
projectobjectAssociated project
taskobjectAssociated task
updated_atstringWhen last updated
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].billablebooleanWhether billable
data[].created_atstringWhen created
data[].hourly_ratenumberHourly rate
data[].idintegerUnique identifier
data[].is_activebooleanWhether active
data[].projectobjectAssociated project
data[].taskobjectAssociated task
data[].updated_atstringWhen last updated

Task Assignments Context Store SQL Query​

Run a SQL query against task assignments records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "task_assignments",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.task_assignments.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "task_assignments",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Time Projects​

Time Projects List​

Returns time report data grouped by project for a given date range

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_projects",
"action": "list",
"params": {
"from": "<str>",
"to": "<str>"
}
}'

Python SDK​

await harvest.time_projects.list(
from_="<str>",
to="<str>"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_projects",
"action": "list",
"params": {
"from": "<str>",
"to": "<str>"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
fromstringYesStart date for the report in YYYYMMDD format
tostringYesEnd date for the report in YYYYMMDD format
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
project_idnull | integer
project_namenull | string
client_idnull | integer
client_namenull | string
total_hoursnull | number
billable_hoursnull | number
currencynull | string
billable_amountnull | number

Meta​

Field NameTypeDescription
next_linknull | string

Search and filter time projects records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_projects",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"billable_amount": 0.0
}
}
}
}
}'

Python SDK​

await harvest.time_projects.context_store_search(
query={"filter": {"eq": {"billable_amount": 0.0}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_projects",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"billable_amount": 0.0}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
billable_amountnumberTotal billable amount
billable_hoursnumberNumber of billable hours
client_idintegerClient identifier
client_namestringClient name
currencystringCurrency code
project_idintegerProject identifier
project_namestringProject name
total_hoursnumberTotal hours spent
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].billable_amountnumberTotal billable amount
data[].billable_hoursnumberNumber of billable hours
data[].client_idintegerClient identifier
data[].client_namestringClient name
data[].currencystringCurrency code
data[].project_idintegerProject identifier
data[].project_namestringProject name
data[].total_hoursnumberTotal hours spent

Time Projects Context Store SQL Query​

Run a SQL query against time projects records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_projects",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.time_projects.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_projects",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds

Time Tasks​

Time Tasks List​

Returns time report data grouped by task for a given date range

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_tasks",
"action": "list",
"params": {
"from": "<str>",
"to": "<str>"
}
}'

Python SDK​

await harvest.time_tasks.list(
from_="<str>",
to="<str>"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_tasks",
"action": "list",
"params": {
"from": "<str>",
"to": "<str>"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
fromstringYesStart date for the report in YYYYMMDD format
tostringYesEnd date for the report in YYYYMMDD format
per_pageintegerNoNumber of records per page (max 2000)
Response Schema

Records​

Field NameTypeDescription
task_idnull | integer
task_namenull | string
total_hoursnull | number
billable_hoursnull | number
currencynull | string
billable_amountnull | number

Meta​

Field NameTypeDescription
next_linknull | string

Search and filter time tasks records powered by Airbyte's data sync. This often provides additional fields and operators beyond what the API natively supports, making it easier to narrow down results before performing further operations. Only available in hosted mode.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_tasks",
"action": "context_store_search",
"params": {
"query": {
"filter": {
"eq": {
"billable_amount": 0.0
}
}
}
}
}'

Python SDK​

await harvest.time_tasks.context_store_search(
query={"filter": {"eq": {"billable_amount": 0.0}}}
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_tasks",
"action": "context_store_search",
"params": {
"query": {"filter": {"eq": {"billable_amount": 0.0}}}
}
}'

Parameters​

Parameter NameTypeRequiredDescription
queryobjectYesFilter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or
query.filterobjectNoFilter conditions
query.sortarrayNoSort conditions
limitintegerNoMaximum results to return (default 1000)
cursorstringNoPagination cursor from previous response's meta.cursor
fieldsarrayNoField paths to include in results

Searchable Fields​

Field NameTypeDescription
billable_amountnumberTotal billable amount
billable_hoursnumberNumber of billable hours
currencystringCurrency code
task_idintegerTask identifier
task_namestringTask name
total_hoursnumberTotal hours spent
Response Schema
Field NameTypeDescription
dataarrayList of matching records
metaobjectPagination metadata
meta.has_morebooleanWhether additional pages are available
meta.cursorstring | nullCursor for next page of results
meta.took_msnumber | nullQuery execution time in milliseconds
data[].billable_amountnumberTotal billable amount
data[].billable_hoursnumberNumber of billable hours
data[].currencystringCurrency code
data[].task_idintegerTask identifier
data[].task_namestringTask name
data[].total_hoursnumberTotal hours spent

Time Tasks Context Store SQL Query​

Run a SQL query against time tasks records in the Airbyte Context Store. SQL projections may return any set of columns, so each result row is a dictionary matching the query's selected fields. Only available in hosted mode.

Use the hosted server documentation to find the qualified Context Store table name and SQL guidance.

CLI​

airbyte-agent connectors execute --json '{
"workspace": "<your_workspace_name>",
"name": "harvest",
"entity": "time_tasks",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Python SDK​

await harvest.time_tasks.context_store_sql_query(
sql="SELECT * FROM <qualified_context_store_table> LIMIT 100"
)

API​

curl --location 'https://api.airbyte.ai/api/v1/integrations/connectors/{your_connector_id}/execute' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer {your_auth_token}' \
--data '{
"entity": "time_tasks",
"action": "context_store_sql_query",
"params": {
"sql": "SELECT * FROM <qualified_context_store_table> LIMIT 100"
}
}'

Parameters​

Parameter NameTypeRequiredDescription
sqlstringYesSQL query to execute against this entity's Context Store data
limitintegerNoMaximum results to return
Response Schema
Field NameTypeDescription
dataarrayProjected rows, with dictionary keys matching the selected columns
metaobjectQuery metadata
meta.has_morebooleanWhether the result was limited and more rows are available
meta.cursornullSQL query results do not use cursor pagination
meta.took_msnumber | nullQuery execution time in milliseconds
Was this page helpful?