This is the full reference documentation for the Harvest agent connector.
Supported entities and actions
The Harvest connector supports the following entities and actions.
| Entity | Actions |
|---|
| Users | List, Get, Context Store Search, Context Store SQL Query |
| Clients | List, Get, Context Store Search, Context Store SQL Query |
| Contacts | List, Get, Context Store Search, Context Store SQL Query |
| Company | Get, Context Store Search, Context Store SQL Query |
| Projects | List, Get, Context Store Search, Context Store SQL Query |
| Tasks | List, Get, Context Store Search, Context Store SQL Query |
| Time Entries | List, Get, Context Store Search, Context Store SQL Query |
| Invoices | List, Get, Context Store Search, Context Store SQL Query |
| Invoice Item Categories | List, Get, Context Store Search, Context Store SQL Query |
| Estimates | List, Get, Context Store Search, Context Store SQL Query |
| Estimate Item Categories | List, Get, Context Store Search, Context Store SQL Query |
| Expenses | List, Get, Context Store Search, Context Store SQL Query |
| Expense Categories | List, Get, Context Store Search, Context Store SQL Query |
| Roles | List, Get, Context Store Search, Context Store SQL Query |
| User Assignments | List, Context Store Search, Context Store SQL Query |
| Task Assignments | List, Context Store Search, Context Store SQL Query |
| Time Projects | List, Context Store Search, Context Store SQL Query |
| Time Tasks | List, 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
first_name | null | string | |
last_name | null | string | |
email | null | string | |
telephone | null | string | |
timezone | null | string | |
has_access_to_all_future_projects | null | boolean | |
is_contractor | null | boolean | |
is_active | null | boolean | |
weekly_capacity | null | integer | |
default_hourly_rate | null | number | |
cost_rate | null | number | |
roles | null | array | |
access_roles | null | array | |
avatar_url | null | string | |
created_at | null | string | |
updated_at | null | string | |
employee_id | null | string | |
calendar_integration_enabled | null | boolean | |
calendar_integration_source | null | string | |
can_create_projects | null | boolean | |
permissions_claims | null | array | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | User ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
first_name | null | string | |
last_name | null | string | |
email | null | string | |
telephone | null | string | |
timezone | null | string | |
has_access_to_all_future_projects | null | boolean | |
is_contractor | null | boolean | |
is_active | null | boolean | |
weekly_capacity | null | integer | |
default_hourly_rate | null | number | |
cost_rate | null | number | |
roles | null | array | |
access_roles | null | array | |
avatar_url | null | string | |
created_at | null | string | |
updated_at | null | string | |
employee_id | null | string | |
calendar_integration_enabled | null | boolean | |
calendar_integration_source | null | string | |
can_create_projects | null | boolean | |
permissions_claims | null | array | |
Users Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
avatar_url | string | Avatar URL |
cost_rate | number | Cost rate |
created_at | string | When created |
default_hourly_rate | number | Default hourly rate |
email | string | Email address |
first_name | string | First name |
id | integer | Unique identifier |
is_active | boolean | Whether active |
is_contractor | boolean | Whether contractor |
last_name | string | Last name |
roles | array | Assigned roles |
telephone | string | Phone number |
timezone | string | Timezone |
updated_at | string | When last updated |
weekly_capacity | integer | Weekly capacity in seconds |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].avatar_url | string | Avatar URL |
data[].cost_rate | number | Cost rate |
data[].created_at | string | When created |
data[].default_hourly_rate | number | Default hourly rate |
data[].email | string | Email address |
data[].first_name | string | First name |
data[].id | integer | Unique identifier |
data[].is_active | boolean | Whether active |
data[].is_contractor | boolean | Whether contractor |
data[].last_name | string | Last name |
data[].roles | array | Assigned roles |
data[].telephone | string | Phone number |
data[].timezone | string | Timezone |
data[].updated_at | string | When last updated |
data[].weekly_capacity | integer | Weekly 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
is_active | null | boolean | |
address | null | string | |
statement_key | null | string | |
currency | null | string | |
created_at | null | string | |
updated_at | null | string | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Client ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
is_active | null | boolean | |
address | null | string | |
statement_key | null | string | |
currency | null | string | |
created_at | null | string | |
updated_at | null | string | |
Clients Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
address | string | The client's postal address |
created_at | string | When the client record was created |
currency | string | The currency used by the client |
id | integer | Unique identifier for the client |
is_active | boolean | Whether the client is active |
name | string | The client's name |
updated_at | string | When the client record was last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].address | string | The client's postal address |
data[].created_at | string | When the client record was created |
data[].currency | string | The currency used by the client |
data[].id | integer | Unique identifier for the client |
data[].is_active | boolean | Whether the client is active |
data[].name | string | The client's name |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query execution time in milliseconds |
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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
title | null | string | |
first_name | null | string | |
last_name | null | string | |
email | null | string | |
phone_office | null | string | |
phone_mobile | null | string | |
fax | null | string | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
| Field Name | Type | Description |
|---|
next_link | null | string | |
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 Name | Type | Required | Description |
|---|
id | integer | Yes | Contact ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
title | null | string | |
first_name | null | string | |
last_name | null | string | |
email | null | string | |
phone_office | null | string | |
phone_mobile | null | string | |
fax | null | string | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
Contacts Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
client | object | Client associated with the contact |
created_at | string | When created |
email | string | Email address |
first_name | string | First name |
id | integer | Unique identifier |
last_name | string | Last name |
title | string | Job title |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].client | object | Client associated with the contact |
data[].created_at | string | When created |
data[].email | string | Email address |
data[].first_name | string | First name |
data[].id | integer | Unique identifier |
data[].last_name | string | Last name |
data[].title | string | Job title |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Description |
|---|
base_uri | null | string | |
full_domain | null | string | |
name | null | string | |
is_active | null | boolean | |
week_start_day | null | string | |
wants_timestamp_timers | null | boolean | |
time_format | null | string | |
date_format | null | string | |
plan_type | null | string | |
clock | null | string | |
currency_code_display | null | string | |
currency_symbol_display | null | string | |
decimal_symbol | null | string | |
thousands_separator | null | string | |
color_scheme | null | string | |
weekly_capacity | null | integer | |
expense_feature | null | boolean | |
invoice_feature | null | boolean | |
estimate_feature | null | boolean | |
approval_feature | null | boolean | |
team_feature | null | boolean | |
currency | null | string | |
saml_sign_in_required | null | boolean | |
day_entry_notes_required | null | boolean | |
Company Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
base_uri | string | The base URI |
currency | string | Currency used by the company |
full_domain | string | The full domain name |
is_active | boolean | Whether the company is active |
name | string | The name of the company |
plan_type | string | The plan type |
weekly_capacity | integer | Weekly capacity in seconds |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].base_uri | string | The base URI |
data[].currency | string | Currency used by the company |
data[].full_domain | string | The full domain name |
data[].is_active | boolean | Whether the company is active |
data[].name | string | The name of the company |
data[].plan_type | string | The plan type |
data[].weekly_capacity | integer | Weekly 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
code | null | string | |
is_active | null | boolean | |
is_billable | null | boolean | |
is_fixed_fee | null | boolean | |
bill_by | null | string | |
hourly_rate | null | number | |
budget_by | null | string | |
budget_is_monthly | null | boolean | |
budget | null | number | |
cost_budget | null | number | |
cost_budget_include_expenses | null | boolean | |
notify_when_over_budget | null | boolean | |
over_budget_notification_percentage | null | number | |
over_budget_notification_date | null | string | |
show_budget_to_all | null | boolean | |
fee | null | number | |
notes | null | string | |
starts_on | null | string | |
ends_on | null | string | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Project ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
code | null | string | |
is_active | null | boolean | |
is_billable | null | boolean | |
is_fixed_fee | null | boolean | |
bill_by | null | string | |
hourly_rate | null | number | |
budget_by | null | string | |
budget_is_monthly | null | boolean | |
budget | null | number | |
cost_budget | null | number | |
cost_budget_include_expenses | null | boolean | |
notify_when_over_budget | null | boolean | |
over_budget_notification_percentage | null | number | |
over_budget_notification_date | null | string | |
show_budget_to_all | null | boolean | |
fee | null | number | |
notes | null | string | |
starts_on | null | string | |
ends_on | null | string | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
Projects Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
budget | number | Budget amount |
client | object | Client details |
code | string | Project code |
created_at | string | When created |
hourly_rate | number | Hourly rate |
id | integer | Unique identifier |
is_active | boolean | Whether active |
is_billable | boolean | Whether billable |
name | string | Project name |
starts_on | string | Start date |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].budget | number | Budget amount |
data[].client | object | Client details |
data[].code | string | Project code |
data[].created_at | string | When created |
data[].hourly_rate | number | Hourly rate |
data[].id | integer | Unique identifier |
data[].is_active | boolean | Whether active |
data[].is_billable | boolean | Whether billable |
data[].name | string | Project name |
data[].starts_on | string | Start date |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
billable_by_default | null | boolean | |
default_hourly_rate | null | number | |
is_default | null | boolean | |
is_active | null | boolean | |
created_at | null | string | |
updated_at | null | string | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Task ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
billable_by_default | null | boolean | |
default_hourly_rate | null | number | |
is_default | null | boolean | |
is_active | null | boolean | |
created_at | null | string | |
updated_at | null | string | |
Tasks Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
billable_by_default | boolean | Whether billable by default |
created_at | string | When created |
default_hourly_rate | number | Default hourly rate |
id | integer | Unique identifier |
is_active | boolean | Whether active |
name | string | Task name |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].billable_by_default | boolean | Whether billable by default |
data[].created_at | string | When created |
data[].default_hourly_rate | number | Default hourly rate |
data[].id | integer | Unique identifier |
data[].is_active | boolean | Whether active |
data[].name | string | Task name |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
spent_date | null | string | |
hours | null | number | |
hours_without_timer | null | number | |
rounded_hours | null | number | |
notes | null | string | |
is_locked | null | boolean | |
locked_reason | null | string | |
is_closed | null | boolean | |
is_billed | null | boolean | |
timer_started_at | null | string | |
started_time | null | string | |
ended_time | null | string | |
is_running | null | boolean | |
billable | null | boolean | |
budgeted | null | boolean | |
billable_rate | null | number | |
cost_rate | null | number | |
created_at | null | string | |
updated_at | null | string | |
approval_status | null | string | |
is_explicitly_locked | null | boolean | |
user | null | object | |
client | null | object | |
project | null | object | |
task | null | object | |
user_assignment | null | object | |
task_assignment | null | object | |
external_reference | null | object | |
invoice | null | object | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Time entry ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
spent_date | null | string | |
hours | null | number | |
hours_without_timer | null | number | |
rounded_hours | null | number | |
notes | null | string | |
is_locked | null | boolean | |
locked_reason | null | string | |
is_closed | null | boolean | |
is_billed | null | boolean | |
timer_started_at | null | string | |
started_time | null | string | |
ended_time | null | string | |
is_running | null | boolean | |
billable | null | boolean | |
budgeted | null | boolean | |
billable_rate | null | number | |
cost_rate | null | number | |
created_at | null | string | |
updated_at | null | string | |
approval_status | null | string | |
is_explicitly_locked | null | boolean | |
user | null | object | |
client | null | object | |
project | null | object | |
task | null | object | |
user_assignment | null | object | |
task_assignment | null | object | |
external_reference | null | object | |
invoice | null | object | |
Time Entries Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
billable | boolean | Whether billable |
client | object | Associated client |
created_at | string | When created |
hours | number | Hours logged |
id | integer | Unique identifier |
is_billed | boolean | Whether billed |
notes | string | Notes |
project | object | Associated project |
spent_date | string | Date time was spent |
task | object | Associated task |
updated_at | string | When last updated |
user | object | Associated user |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].billable | boolean | Whether billable |
data[].client | object | Associated client |
data[].created_at | string | When created |
data[].hours | number | Hours logged |
data[].id | integer | Unique identifier |
data[].is_billed | boolean | Whether billed |
data[].notes | string | Notes |
data[].project | object | Associated project |
data[].spent_date | string | Date time was spent |
data[].task | object | Associated task |
data[].updated_at | string | When last updated |
data[].user | object | Associated 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
client_key | null | string | |
number | null | string | |
purchase_order | null | string | |
amount | null | number | |
due_amount | null | number | |
tax | null | number | |
tax_amount | null | number | |
tax2 | null | number | |
tax2_amount | null | number | |
discount | null | number | |
discount_amount | null | number | |
subject | null | string | |
notes | null | string | |
currency | null | string | |
state | null | string | |
period_start | null | string | |
period_end | null | string | |
issue_date | null | string | |
due_date | null | string | |
payment_term | null | string | |
payment_options | null | array | |
sent_at | null | string | |
paid_at | null | string | |
paid_date | null | string | |
closed_at | null | string | |
recurring_invoice_id | null | integer | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
estimate | null | object | |
retainer | null | object | |
creator | null | object | |
line_items | null | array | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Invoice ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
client_key | null | string | |
number | null | string | |
purchase_order | null | string | |
amount | null | number | |
due_amount | null | number | |
tax | null | number | |
tax_amount | null | number | |
tax2 | null | number | |
tax2_amount | null | number | |
discount | null | number | |
discount_amount | null | number | |
subject | null | string | |
notes | null | string | |
currency | null | string | |
state | null | string | |
period_start | null | string | |
period_end | null | string | |
issue_date | null | string | |
due_date | null | string | |
payment_term | null | string | |
payment_options | null | array | |
sent_at | null | string | |
paid_at | null | string | |
paid_date | null | string | |
closed_at | null | string | |
recurring_invoice_id | null | integer | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
estimate | null | object | |
retainer | null | object | |
creator | null | object | |
line_items | null | array | |
Invoices Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
amount | number | Total amount |
client | object | Client details |
created_at | string | When created |
currency | string | Currency |
due_amount | number | Amount due |
due_date | string | Due date |
id | integer | Unique identifier |
issue_date | string | Issue date |
number | string | Invoice number |
state | string | Current state |
subject | string | Subject |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].amount | number | Total amount |
data[].client | object | Client details |
data[].created_at | string | When created |
data[].currency | string | Currency |
data[].due_amount | number | Amount due |
data[].due_date | string | Due date |
data[].id | integer | Unique identifier |
data[].issue_date | string | Issue date |
data[].number | string | Invoice number |
data[].state | string | Current state |
data[].subject | string | Subject |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
use_as_service | null | boolean | |
use_as_expense | null | boolean | |
created_at | null | string | |
updated_at | null | string | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Invoice item category ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
use_as_service | null | boolean | |
use_as_expense | null | boolean | |
created_at | null | string | |
updated_at | null | string | |
Invoice Item Categories Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
created_at | string | When created |
id | integer | Unique identifier |
name | string | Category name |
updated_at | string | When last updated |
use_as_expense | boolean | Whether used as expense type |
use_as_service | boolean | Whether used as service type |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].created_at | string | When created |
data[].id | integer | Unique identifier |
data[].name | string | Category name |
data[].updated_at | string | When last updated |
data[].use_as_expense | boolean | Whether used as expense type |
data[].use_as_service | boolean | Whether 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
client_key | null | string | |
number | null | string | |
purchase_order | null | string | |
amount | null | number | |
tax | null | number | |
tax_amount | null | number | |
tax2 | null | number | |
tax2_amount | null | number | |
discount | null | number | |
discount_amount | null | number | |
subject | null | string | |
notes | null | string | |
currency | null | string | |
state | null | string | |
issue_date | null | string | |
sent_at | null | string | |
accepted_at | null | string | |
declined_at | null | string | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
creator | null | object | |
line_items | null | array | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Estimate ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
client_key | null | string | |
number | null | string | |
purchase_order | null | string | |
amount | null | number | |
tax | null | number | |
tax_amount | null | number | |
tax2 | null | number | |
tax2_amount | null | number | |
discount | null | number | |
discount_amount | null | number | |
subject | null | string | |
notes | null | string | |
currency | null | string | |
state | null | string | |
issue_date | null | string | |
sent_at | null | string | |
accepted_at | null | string | |
declined_at | null | string | |
created_at | null | string | |
updated_at | null | string | |
client | null | object | |
creator | null | object | |
line_items | null | array | |
Estimates Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
amount | number | Total amount |
client | object | Client details |
created_at | string | When created |
currency | string | Currency |
id | integer | Unique identifier |
issue_date | string | Issue date |
number | string | Estimate number |
state | string | Current state |
subject | string | Subject |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].amount | number | Total amount |
data[].client | object | Client details |
data[].created_at | string | When created |
data[].currency | string | Currency |
data[].id | integer | Unique identifier |
data[].issue_date | string | Issue date |
data[].number | string | Estimate number |
data[].state | string | Current state |
data[].subject | string | Subject |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
created_at | null | string | |
updated_at | null | string | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Estimate item category ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
created_at | null | string | |
updated_at | null | string | |
Estimate Item Categories Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
created_at | string | When created |
id | integer | Unique identifier |
name | string | Category name |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].created_at | string | When created |
data[].id | integer | Unique identifier |
data[].name | string | Category name |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
notes | null | string | |
total_cost | null | number | |
units | null | number | |
is_closed | null | boolean | |
is_locked | null | boolean | |
is_billed | null | boolean | |
locked_reason | null | string | |
spent_date | null | string | |
created_at | null | string | |
updated_at | null | string | |
billable | null | boolean | |
approval_status | null | string | |
is_explicitly_locked | null | boolean | |
receipt | null | object | |
user | null | object | |
user_assignment | null | object | |
project | null | object | |
expense_category | null | object | |
client | null | object | |
invoice | null | object | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Expense ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
notes | null | string | |
total_cost | null | number | |
units | null | number | |
is_closed | null | boolean | |
is_locked | null | boolean | |
is_billed | null | boolean | |
locked_reason | null | string | |
spent_date | null | string | |
created_at | null | string | |
updated_at | null | string | |
billable | null | boolean | |
approval_status | null | string | |
is_explicitly_locked | null | boolean | |
receipt | null | object | |
user | null | object | |
user_assignment | null | object | |
project | null | object | |
expense_category | null | object | |
client | null | object | |
invoice | null | object | |
Expenses Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
billable | boolean | Whether billable |
client | object | Associated client |
created_at | string | When created |
expense_category | object | Expense category |
id | integer | Unique identifier |
is_billed | boolean | Whether billed |
notes | string | Notes |
project | object | Associated project |
spent_date | string | Date spent |
total_cost | number | Total cost |
updated_at | string | When last updated |
user | object | Associated user |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].billable | boolean | Whether billable |
data[].client | object | Associated client |
data[].created_at | string | When created |
data[].expense_category | object | Expense category |
data[].id | integer | Unique identifier |
data[].is_billed | boolean | Whether billed |
data[].notes | string | Notes |
data[].project | object | Associated project |
data[].spent_date | string | Date spent |
data[].total_cost | number | Total cost |
data[].updated_at | string | When last updated |
data[].user | object | Associated 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
unit_name | null | string | |
unit_price | null | number | |
is_active | null | boolean | |
created_at | null | string | |
updated_at | null | string | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Expense category ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
unit_name | null | string | |
unit_price | null | number | |
is_active | null | boolean | |
created_at | null | string | |
updated_at | null | string | |
Expense Categories Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
created_at | string | When created |
id | integer | Unique identifier |
is_active | boolean | Whether active |
name | string | Category name |
unit_name | string | Unit name |
unit_price | number | Unit price |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].created_at | string | When created |
data[].id | integer | Unique identifier |
data[].is_active | boolean | Whether active |
data[].name | string | Category name |
data[].unit_name | string | Unit name |
data[].unit_price | number | Unit price |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
user_ids | null | array | |
created_at | null | string | |
updated_at | null | string | |
| Field Name | Type | Description |
|---|
next_link | null | 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 Name | Type | Required | Description |
|---|
id | integer | Yes | Role ID |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
name | null | string | |
user_ids | null | array | |
created_at | null | string | |
updated_at | null | string | |
Roles Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
created_at | string | When created |
id | integer | Unique identifier |
name | string | Role name |
updated_at | string | When last updated |
user_ids | array | User IDs with this role |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].created_at | string | When created |
data[].id | integer | Unique identifier |
data[].name | string | Role name |
data[].updated_at | string | When last updated |
data[].user_ids | array | User 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
is_project_manager | null | boolean | |
is_active | null | boolean | |
budget | null | number | |
created_at | null | string | |
updated_at | null | string | |
hourly_rate | null | number | |
use_default_rates | null | boolean | |
project | null | object | |
user | null | object | |
| Field Name | Type | Description |
|---|
next_link | null | string | |
User Assignments Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
budget | number | Budget |
created_at | string | When created |
hourly_rate | number | Hourly rate |
id | integer | Unique identifier |
is_active | boolean | Whether active |
is_project_manager | boolean | Whether project manager |
project | object | Associated project |
updated_at | string | When last updated |
user | object | Associated user |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].budget | number | Budget |
data[].created_at | string | When created |
data[].hourly_rate | number | Hourly rate |
data[].id | integer | Unique identifier |
data[].is_active | boolean | Whether active |
data[].is_project_manager | boolean | Whether project manager |
data[].project | object | Associated project |
data[].updated_at | string | When last updated |
data[].user | object | Associated 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
id | integer | |
billable | null | boolean | |
is_active | null | boolean | |
created_at | null | string | |
updated_at | null | string | |
hourly_rate | null | number | |
budget | null | number | |
project | null | object | |
task | null | object | |
| Field Name | Type | Description |
|---|
next_link | null | string | |
Task Assignments Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
billable | boolean | Whether billable |
created_at | string | When created |
hourly_rate | number | Hourly rate |
id | integer | Unique identifier |
is_active | boolean | Whether active |
project | object | Associated project |
task | object | Associated task |
updated_at | string | When last updated |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].billable | boolean | Whether billable |
data[].created_at | string | When created |
data[].hourly_rate | number | Hourly rate |
data[].id | integer | Unique identifier |
data[].is_active | boolean | Whether active |
data[].project | object | Associated project |
data[].task | object | Associated task |
data[].updated_at | string | When 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
from | string | Yes | Start date for the report in YYYYMMDD format |
to | string | Yes | End date for the report in YYYYMMDD format |
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
project_id | null | integer | |
project_name | null | string | |
client_id | null | integer | |
client_name | null | string | |
total_hours | null | number | |
billable_hours | null | number | |
currency | null | string | |
billable_amount | null | number | |
| Field Name | Type | Description |
|---|
next_link | null | string | |
Time Projects Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
billable_amount | number | Total billable amount |
billable_hours | number | Number of billable hours |
client_id | integer | Client identifier |
client_name | string | Client name |
currency | string | Currency code |
project_id | integer | Project identifier |
project_name | string | Project name |
total_hours | number | Total hours spent |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].billable_amount | number | Total billable amount |
data[].billable_hours | number | Number of billable hours |
data[].client_id | integer | Client identifier |
data[].client_name | string | Client name |
data[].currency | string | Currency code |
data[].project_id | integer | Project identifier |
data[].project_name | string | Project name |
data[].total_hours | number | Total 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query 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 Name | Type | Required | Description |
|---|
from | string | Yes | Start date for the report in YYYYMMDD format |
to | string | Yes | End date for the report in YYYYMMDD format |
per_page | integer | No | Number of records per page (max 2000) |
Response Schema
Records
| Field Name | Type | Description |
|---|
task_id | null | integer | |
task_name | null | string | |
total_hours | null | number | |
billable_hours | null | number | |
currency | null | string | |
billable_amount | null | number | |
| Field Name | Type | Description |
|---|
next_link | null | string | |
Time Tasks Context Store Search
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 Name | Type | Required | Description |
|---|
query | object | Yes | Filter and sort conditions. Supports operators: eq, neq, gt, gte, lt, lte, in, startswith, endswith, contains, array_contains, fuzzy, keyword, not, and, or |
query.filter | object | No | Filter conditions |
query.sort | array | No | Sort conditions |
limit | integer | No | Maximum results to return (default 1000) |
cursor | string | No | Pagination cursor from previous response's meta.cursor |
fields | array | No | Field paths to include in results |
Searchable Fields
| Field Name | Type | Description |
|---|
billable_amount | number | Total billable amount |
billable_hours | number | Number of billable hours |
currency | string | Currency code |
task_id | integer | Task identifier |
task_name | string | Task name |
total_hours | number | Total hours spent |
Response Schema
| Field Name | Type | Description |
|---|
data | array | List of matching records |
meta | object | Pagination metadata |
meta.has_more | boolean | Whether additional pages are available |
meta.cursor | string | null | Cursor for next page of results |
meta.took_ms | number | null | Query execution time in milliseconds |
data[].billable_amount | number | Total billable amount |
data[].billable_hours | number | Number of billable hours |
data[].currency | string | Currency code |
data[].task_id | integer | Task identifier |
data[].task_name | string | Task name |
data[].total_hours | number | Total 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 Name | Type | Required | Description |
|---|
sql | string | Yes | SQL query to execute against this entity's Context Store data |
limit | integer | No | Maximum results to return |
Response Schema
| Field Name | Type | Description |
|---|
data | array | Projected rows, with dictionary keys matching the selected columns |
meta | object | Query metadata |
meta.has_more | boolean | Whether the result was limited and more rows are available |
meta.cursor | null | SQL query results do not use cursor pagination |
meta.took_ms | number | null | Query execution time in milliseconds |