From b4a93ebc106cdbb06b55bc33746a3a95492a2772 Mon Sep 17 00:00:00 2001 From: mvistry Date: Thu, 12 Jun 2025 15:22:41 +0200 Subject: [PATCH 1/5] new v3 --- .../harvest/v3/harvest-v3-foreign-keys.yml | 946 ++++++++++++++++++ .../schemas/harvest/v3/harvest-v3-tables.yml | 333 ++++++ .../taps/schemas/harvest/v3/json/clients.json | 47 + .../schemas/harvest/v3/json/contacts.json | 71 ++ .../v3/json/estimate_item_categories.json | 29 + .../harvest/v3/json/estimate_line_items.json | 59 ++ .../harvest/v3/json/estimate_messages.json | 103 ++ .../schemas/harvest/v3/json/estimates.json | 146 +++ .../harvest/v3/json/expense_categories.json | 47 + .../schemas/harvest/v3/json/expenses.json | 137 +++ .../v3/json/invoice_item_categories.json | 41 + .../harvest/v3/json/invoice_line_items.json | 65 ++ .../harvest/v3/json/invoice_messages.json | 133 +++ .../harvest/v3/json/invoice_payments.json | 83 ++ .../schemas/harvest/v3/json/invoices.json | 194 ++++ .../harvest/v3/json/project_tasks.json | 59 ++ .../harvest/v3/json/project_users.json | 59 ++ .../schemas/harvest/v3/json/projects.json | 149 +++ _data/taps/schemas/harvest/v3/json/roles.json | 29 + _data/taps/schemas/harvest/v3/json/tasks.json | 53 + .../schemas/harvest/v3/json/time_entries.json | 161 +++ .../json/time_entry_external_reference.json | 17 + .../harvest/v3/json/user_project_tasks.json | 17 + .../harvest/v3/json/user_projects.json | 65 ++ .../schemas/harvest/v3/json/user_roles.json | 17 + _data/taps/schemas/harvest/v3/json/users.json | 125 +++ _data/taps/versions/harvest.yml | 6 +- _saas-integrations/harvest/v2/harvest-v2.md | 3 +- _saas-integrations/harvest/v3/harvest-v3.md | 112 +++ 29 files changed, 3304 insertions(+), 2 deletions(-) create mode 100644 _data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml create mode 100644 _data/taps/schemas/harvest/v3/harvest-v3-tables.yml create mode 100644 _data/taps/schemas/harvest/v3/json/clients.json create mode 100644 _data/taps/schemas/harvest/v3/json/contacts.json create mode 100644 _data/taps/schemas/harvest/v3/json/estimate_item_categories.json create mode 100644 _data/taps/schemas/harvest/v3/json/estimate_line_items.json create mode 100644 _data/taps/schemas/harvest/v3/json/estimate_messages.json create mode 100644 _data/taps/schemas/harvest/v3/json/estimates.json create mode 100644 _data/taps/schemas/harvest/v3/json/expense_categories.json create mode 100644 _data/taps/schemas/harvest/v3/json/expenses.json create mode 100644 _data/taps/schemas/harvest/v3/json/invoice_item_categories.json create mode 100644 _data/taps/schemas/harvest/v3/json/invoice_line_items.json create mode 100644 _data/taps/schemas/harvest/v3/json/invoice_messages.json create mode 100644 _data/taps/schemas/harvest/v3/json/invoice_payments.json create mode 100644 _data/taps/schemas/harvest/v3/json/invoices.json create mode 100644 _data/taps/schemas/harvest/v3/json/project_tasks.json create mode 100644 _data/taps/schemas/harvest/v3/json/project_users.json create mode 100644 _data/taps/schemas/harvest/v3/json/projects.json create mode 100644 _data/taps/schemas/harvest/v3/json/roles.json create mode 100644 _data/taps/schemas/harvest/v3/json/tasks.json create mode 100644 _data/taps/schemas/harvest/v3/json/time_entries.json create mode 100644 _data/taps/schemas/harvest/v3/json/time_entry_external_reference.json create mode 100644 _data/taps/schemas/harvest/v3/json/user_project_tasks.json create mode 100644 _data/taps/schemas/harvest/v3/json/user_projects.json create mode 100644 _data/taps/schemas/harvest/v3/json/user_roles.json create mode 100644 _data/taps/schemas/harvest/v3/json/users.json create mode 100644 _saas-integrations/harvest/v3/harvest-v3.md diff --git a/_data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml b/_data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml new file mode 100644 index 000000000..226ad5344 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml @@ -0,0 +1,946 @@ +tap: harvest +version: '2' +keys: + clients_client_id: + - table: clients + keys: + - id + - table: contacts + keys: + - client_id + - table: estimates + keys: + - client_id + - table: expenses + keys: + - client_id + - table: invoices + keys: + - client_id + - table: projects + keys: + - client_id + - table: time_entries + keys: + - client_id + - table: user_projects + keys: + - client_id + contacts_contact_id: + - table: contacts + keys: + - id + estimate_item_categories_: + - table: estimate_item_categories + keys: + - id + estimate_line_items_: + - table: estimate_line_items + keys: + - id + estimate_messages_: + - table: estimate_messages + keys: + - id + estimates_estimate_id: + - table: estimate_line_items + keys: + - estimate_id + - table: estimate_messages + keys: + - estimate_id + - table: estimates + keys: + - id + - table: invoices + keys: + - estimate_id + expense_categories_expense_category_id: + - table: expense_categories + keys: + - id + - table: expenses + keys: + - expense_category_id + expenses_expense_id: + - table: expenses + keys: + - id + - table: time_entries + keys: + - external_reference_id + - table: time_entry_external_reference + keys: + - external_reference_id + invoice_item_categories_invoice_item_category_id: + - table: invoice_item_categories + keys: + - id + invoice_messages_invoice_message_id: + - table: invoice_messages + keys: + - id + invoices_invoice_id: + - table: expenses + keys: + - invoice_id + - table: invoice_line_items + keys: + - invoice_id + - table: invoice_messages + keys: + - invoice_id + - table: invoice_payments + keys: + - invoice_id + - table: invoices + keys: + - id + - table: time_entries + keys: + - invoice_id + invoice_payments_invoice_payment_id: + - table: invoice_payments + keys: + - id + projects_project_id: + - table: expenses + keys: + - project_id + - table: invoice_line_items + keys: + - project_id + - table: project_tasks + keys: + - project_id + - table: project_users + keys: + - project_id + - table: projects + keys: + - id + - table: time_entries + keys: + - project_id + - table: user_projects + keys: + - project_id + project_tasks_project_task_id: + - table: project_tasks + keys: + - id + - table: user_project_tasks + keys: + - project_task_id + project_users_project_user_id: + - table: project_users + keys: + - id + roles_role_id: + - table: roles + keys: + - id + - table: user_roles + keys: + - role_id + tasks_task_id: + - table: tasks + keys: + - id + - table: time_entries + keys: + - task_id + time_entries_time_entry_id: + - table: time_entries + keys: + - id + - table: time_entry_external_reference + keys: + - time_entry_id + users_user_id: + - table: estimates + keys: + - creator_id + - table: invoices + keys: + - creator_id + - table: time_entries + keys: + - user_id + - table: users + keys: + - id + - table: user_project_tasks + keys: + - user_id + - table: user_projects + keys: + - user_id + - table: user_roles + keys: + - user_id + user_project_tasks_user_project_task_id: + - table: user_project_tasks + keys: + - id + user_projects_user_project_id: + - table: user_projects + keys: + - id +tables: +- table-name: clients + join: + - table-name: contacts + keys: + - key: id + foreign-key: client_id + - table-name: estimates + keys: + - key: id + foreign-key: client_id + - table-name: expenses + keys: + - key: id + foreign-key: client_id + - table-name: invoices + keys: + - key: id + foreign-key: client_id + - table-name: projects + keys: + - key: id + foreign-key: client_id + - table-name: time_entries + keys: + - key: id + foreign-key: client_id + - table-name: user_projects + keys: + - key: id + foreign-key: client_id +- table-name: contacts + join: + - table-name: clients + keys: + - key: client_id + foreign-key: id + - table-name: estimates + keys: + - key: client_id + foreign-key: client_id + - table-name: expenses + keys: + - key: client_id + foreign-key: client_id + - table-name: invoices + keys: + - key: client_id + foreign-key: client_id + - table-name: projects + keys: + - key: client_id + foreign-key: client_id + - table-name: time_entries + keys: + - key: client_id + foreign-key: client_id + - table-name: user_projects + keys: + - key: client_id + foreign-key: client_id +- table-name: estimates + join: + - table-name: clients + keys: + - key: client_id + foreign-key: id + - table-name: contacts + keys: + - key: client_id + foreign-key: client_id + - table-name: expenses + keys: + - key: client_id + foreign-key: client_id + - table-name: invoices + keys: + - key: client_id + foreign-key: client_id + - key: id + foreign-key: estimate_id + - key: creator_id + foreign-key: creator_id + - table-name: projects + keys: + - key: client_id + foreign-key: client_id + - table-name: time_entries + keys: + - key: client_id + foreign-key: client_id + - key: creator_id + foreign-key: user_id + - table-name: user_projects + keys: + - key: client_id + foreign-key: client_id + - key: creator_id + foreign-key: user_id + - table-name: estimate_line_items + keys: + - key: id + foreign-key: estimate_id + - table-name: estimate_messages + keys: + - key: id + foreign-key: estimate_id + - table-name: users + keys: + - key: creator_id + foreign-key: id + - table-name: user_project_tasks + keys: + - key: creator_id + foreign-key: user_id + - table-name: user_roles + keys: + - key: creator_id + foreign-key: user_id +- table-name: expenses + join: + - table-name: clients + keys: + - key: client_id + foreign-key: id + - table-name: contacts + keys: + - key: client_id + foreign-key: client_id + - table-name: estimates + keys: + - key: client_id + foreign-key: client_id + - table-name: invoices + keys: + - key: client_id + foreign-key: client_id + - key: invoice_id + foreign-key: id + - table-name: projects + keys: + - key: client_id + foreign-key: client_id + - key: project_id + foreign-key: id + - table-name: time_entries + keys: + - key: client_id + foreign-key: client_id + - key: id + foreign-key: external_reference_id + - key: invoice_id + foreign-key: invoice_id + - key: project_id + foreign-key: project_id + - table-name: user_projects + keys: + - key: client_id + foreign-key: client_id + - key: project_id + foreign-key: project_id + - table-name: expense_categories + keys: + - key: expense_category_id + foreign-key: id + - table-name: time_entry_external_reference + keys: + - key: id + foreign-key: external_reference_id + - table-name: invoice_line_items + keys: + - key: invoice_id + foreign-key: invoice_id + - key: project_id + foreign-key: project_id + - table-name: invoice_messages + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoice_payments + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: project_tasks + keys: + - key: project_id + foreign-key: project_id + - table-name: project_users + keys: + - key: project_id + foreign-key: project_id +- table-name: invoices + join: + - table-name: clients + keys: + - key: client_id + foreign-key: id + - table-name: contacts + keys: + - key: client_id + foreign-key: client_id + - table-name: estimates + keys: + - key: client_id + foreign-key: client_id + - key: estimate_id + foreign-key: id + - key: creator_id + foreign-key: creator_id + - table-name: expenses + keys: + - key: client_id + foreign-key: client_id + - key: id + foreign-key: invoice_id + - table-name: projects + keys: + - key: client_id + foreign-key: client_id + - table-name: time_entries + keys: + - key: client_id + foreign-key: client_id + - key: id + foreign-key: invoice_id + - key: creator_id + foreign-key: user_id + - table-name: user_projects + keys: + - key: client_id + foreign-key: client_id + - key: creator_id + foreign-key: user_id + - table-name: estimate_line_items + keys: + - key: estimate_id + foreign-key: estimate_id + - table-name: estimate_messages + keys: + - key: estimate_id + foreign-key: estimate_id + - table-name: invoice_line_items + keys: + - key: id + foreign-key: invoice_id + - table-name: invoice_messages + keys: + - key: id + foreign-key: invoice_id + - table-name: invoice_payments + keys: + - key: id + foreign-key: invoice_id + - table-name: users + keys: + - key: creator_id + foreign-key: id + - table-name: user_project_tasks + keys: + - key: creator_id + foreign-key: user_id + - table-name: user_roles + keys: + - key: creator_id + foreign-key: user_id +- table-name: projects + join: + - table-name: clients + keys: + - key: client_id + foreign-key: id + - table-name: contacts + keys: + - key: client_id + foreign-key: client_id + - table-name: estimates + keys: + - key: client_id + foreign-key: client_id + - table-name: expenses + keys: + - key: client_id + foreign-key: client_id + - key: id + foreign-key: project_id + - table-name: invoices + keys: + - key: client_id + foreign-key: client_id + - table-name: time_entries + keys: + - key: client_id + foreign-key: client_id + - key: id + foreign-key: project_id + - table-name: user_projects + keys: + - key: client_id + foreign-key: client_id + - key: id + foreign-key: project_id + - table-name: invoice_line_items + keys: + - key: id + foreign-key: project_id + - table-name: project_tasks + keys: + - key: id + foreign-key: project_id + - table-name: project_users + keys: + - key: id + foreign-key: project_id +- table-name: time_entries + join: + - table-name: clients + keys: + - key: client_id + foreign-key: id + - table-name: contacts + keys: + - key: client_id + foreign-key: client_id + - table-name: estimates + keys: + - key: client_id + foreign-key: client_id + - key: user_id + foreign-key: creator_id + - table-name: expenses + keys: + - key: client_id + foreign-key: client_id + - key: external_reference_id + foreign-key: id + - key: invoice_id + foreign-key: invoice_id + - key: project_id + foreign-key: project_id + - table-name: invoices + keys: + - key: client_id + foreign-key: client_id + - key: invoice_id + foreign-key: id + - key: user_id + foreign-key: creator_id + - table-name: projects + keys: + - key: client_id + foreign-key: client_id + - key: project_id + foreign-key: id + - table-name: user_projects + keys: + - key: client_id + foreign-key: client_id + - key: project_id + foreign-key: project_id + - key: user_id + foreign-key: user_id + - table-name: time_entry_external_reference + keys: + - key: external_reference_id + foreign-key: external_reference_id + - key: id + foreign-key: time_entry_id + - table-name: invoice_line_items + keys: + - key: invoice_id + foreign-key: invoice_id + - key: project_id + foreign-key: project_id + - table-name: invoice_messages + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoice_payments + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: project_tasks + keys: + - key: project_id + foreign-key: project_id + - table-name: project_users + keys: + - key: project_id + foreign-key: project_id + - table-name: tasks + keys: + - key: task_id + foreign-key: id + - table-name: users + keys: + - key: user_id + foreign-key: id + - table-name: user_project_tasks + keys: + - key: user_id + foreign-key: user_id + - table-name: user_roles + keys: + - key: user_id + foreign-key: user_id +- table-name: user_projects + join: + - table-name: clients + keys: + - key: client_id + foreign-key: id + - table-name: contacts + keys: + - key: client_id + foreign-key: client_id + - table-name: estimates + keys: + - key: client_id + foreign-key: client_id + - key: user_id + foreign-key: creator_id + - table-name: expenses + keys: + - key: client_id + foreign-key: client_id + - key: project_id + foreign-key: project_id + - table-name: invoices + keys: + - key: client_id + foreign-key: client_id + - key: user_id + foreign-key: creator_id + - table-name: projects + keys: + - key: client_id + foreign-key: client_id + - key: project_id + foreign-key: id + - table-name: time_entries + keys: + - key: client_id + foreign-key: client_id + - key: project_id + foreign-key: project_id + - key: user_id + foreign-key: user_id + - table-name: invoice_line_items + keys: + - key: project_id + foreign-key: project_id + - table-name: project_tasks + keys: + - key: project_id + foreign-key: project_id + - table-name: project_users + keys: + - key: project_id + foreign-key: project_id + - table-name: users + keys: + - key: user_id + foreign-key: id + - table-name: user_project_tasks + keys: + - key: user_id + foreign-key: user_id + - table-name: user_roles + keys: + - key: user_id + foreign-key: user_id +- table-name: estimate_line_items + join: + - table-name: estimate_messages + keys: + - key: estimate_id + foreign-key: estimate_id + - table-name: estimates + keys: + - key: estimate_id + foreign-key: id + - table-name: invoices + keys: + - key: estimate_id + foreign-key: estimate_id +- table-name: estimate_messages + join: + - table-name: estimate_line_items + keys: + - key: estimate_id + foreign-key: estimate_id + - table-name: estimates + keys: + - key: estimate_id + foreign-key: id + - table-name: invoices + keys: + - key: estimate_id + foreign-key: estimate_id +- table-name: expense_categories + join: + - table-name: expenses + keys: + - key: id + foreign-key: expense_category_id +- table-name: time_entry_external_reference + join: + - table-name: expenses + keys: + - key: external_reference_id + foreign-key: id + - table-name: time_entries + keys: + - key: external_reference_id + foreign-key: external_reference_id + - key: time_entry_id + foreign-key: id +- table-name: invoice_messages + join: + - table-name: expenses + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoice_line_items + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoice_payments + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoices + keys: + - key: invoice_id + foreign-key: id + - table-name: time_entries + keys: + - key: invoice_id + foreign-key: invoice_id +- table-name: invoice_line_items + join: + - table-name: expenses + keys: + - key: invoice_id + foreign-key: invoice_id + - key: project_id + foreign-key: project_id + - table-name: invoice_messages + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoice_payments + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoices + keys: + - key: invoice_id + foreign-key: id + - table-name: time_entries + keys: + - key: invoice_id + foreign-key: invoice_id + - key: project_id + foreign-key: project_id + - table-name: project_tasks + keys: + - key: project_id + foreign-key: project_id + - table-name: project_users + keys: + - key: project_id + foreign-key: project_id + - table-name: projects + keys: + - key: project_id + foreign-key: id + - table-name: user_projects + keys: + - key: project_id + foreign-key: project_id +- table-name: invoice_payments + join: + - table-name: expenses + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoice_line_items + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoice_messages + keys: + - key: invoice_id + foreign-key: invoice_id + - table-name: invoices + keys: + - key: invoice_id + foreign-key: id + - table-name: time_entries + keys: + - key: invoice_id + foreign-key: invoice_id +- table-name: project_tasks + join: + - table-name: expenses + keys: + - key: project_id + foreign-key: project_id + - table-name: invoice_line_items + keys: + - key: project_id + foreign-key: project_id + - table-name: project_users + keys: + - key: project_id + foreign-key: project_id + - table-name: projects + keys: + - key: project_id + foreign-key: id + - table-name: time_entries + keys: + - key: project_id + foreign-key: project_id + - table-name: user_projects + keys: + - key: project_id + foreign-key: project_id + - table-name: user_project_tasks + keys: + - key: id + foreign-key: project_task_id +- table-name: project_users + join: + - table-name: expenses + keys: + - key: project_id + foreign-key: project_id + - table-name: invoice_line_items + keys: + - key: project_id + foreign-key: project_id + - table-name: project_tasks + keys: + - key: project_id + foreign-key: project_id + - table-name: projects + keys: + - key: project_id + foreign-key: id + - table-name: time_entries + keys: + - key: project_id + foreign-key: project_id + - table-name: user_projects + keys: + - key: project_id + foreign-key: project_id +- table-name: user_project_tasks + join: + - table-name: project_tasks + keys: + - key: project_task_id + foreign-key: id + - table-name: estimates + keys: + - key: user_id + foreign-key: creator_id + - table-name: invoices + keys: + - key: user_id + foreign-key: creator_id + - table-name: time_entries + keys: + - key: user_id + foreign-key: user_id + - table-name: users + keys: + - key: user_id + foreign-key: id + - table-name: user_projects + keys: + - key: user_id + foreign-key: user_id + - table-name: user_roles + keys: + - key: user_id + foreign-key: user_id +- table-name: roles + join: + - table-name: user_roles + keys: + - key: id + foreign-key: role_id +- table-name: user_roles + join: + - table-name: roles + keys: + - key: role_id + foreign-key: id + - table-name: estimates + keys: + - key: user_id + foreign-key: creator_id + - table-name: invoices + keys: + - key: user_id + foreign-key: creator_id + - table-name: time_entries + keys: + - key: user_id + foreign-key: user_id + - table-name: users + keys: + - key: user_id + foreign-key: id + - table-name: user_project_tasks + keys: + - key: user_id + foreign-key: user_id + - table-name: user_projects + keys: + - key: user_id + foreign-key: user_id +- table-name: tasks + join: + - table-name: time_entries + keys: + - key: id + foreign-key: task_id +- table-name: users + join: + - table-name: estimates + keys: + - key: id + foreign-key: creator_id + - table-name: invoices + keys: + - key: id + foreign-key: creator_id + - table-name: time_entries + keys: + - key: id + foreign-key: user_id + - table-name: user_project_tasks + keys: + - key: id + foreign-key: user_id + - table-name: user_projects + keys: + - key: id + foreign-key: user_id + - table-name: user_roles + keys: + - key: id + foreign-key: user_id diff --git a/_data/taps/schemas/harvest/v3/harvest-v3-tables.yml b/_data/taps/schemas/harvest/v3/harvest-v3-tables.yml new file mode 100644 index 000000000..5c22481e4 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/harvest-v3-tables.yml @@ -0,0 +1,333 @@ +tap: harvest +version: '2' +tables: +- name: clients + description: 'The `{{ table.name }}` table contains info about the clients in your + Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/clients-api/clients/clients/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/clients.json + api-method: https://help.getharvest.com/api-v2/clients-api/clients/clients/#list-all-clients + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: contacts + description: 'The `{{ table.name }}` table contains info about the client contacts + in your Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/clients-api/clients/contacts/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/contacts.json + api-method: https://help.getharvest.com/api-v2/clients-api/clients/contacts/#list-all-contacts + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: estimates + description: 'The `{{ table.name }}` table contains info about the estimates in your + {{ integration.display_name }} account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/estimates.json + api-method: https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-messages/#list-all-messages-for-an-estimate + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: estimate_item_categories + description: 'The `estimate_item_categories` table contains info about the estimate + item categories in your Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-item-categories/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/estimate_item_categories.json + api-method: https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-item-categories/#list-all-estimate-item-categories + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: estimate_line_items + description: 'The `{{ table.name }}` table contains info about the line items contained + in estimates. + + + **Note**: This table is updated based on new and updated `estimates`. This means + that when an estimate is updated, this table will also be updated. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/#the-estimate-line-item-object + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/estimate_line_items.json + api-method: https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/#get-all-estimates + table-details: + replication-method: Key-based Incremental + primary-key: id +- name: estimate_messages + description: 'The `{{ table.name }}` table contains info about the messages associated + with estimates. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-messages/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/estimate_messages.json + api-method: https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-messages/#list-all-messages-for-an-estimate + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: expenses + description: 'The `expenses` table contains info about the expenses recorded in + your Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/expenses-api/expenses/expenses/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/expenses.json + api-method: https://help.getharvest.com/api-v2/expenses-api/expenses/expenses#list-all-expenses + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: expense_categories + description: 'The `expense_categories` table contains info about the expense categories + in your Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/expenses-api/expenses/expense-categories/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/expense_categories.json + api-method: https://help.getharvest.com/api-v2/expenses-api/expenses/expense-categories/#list-all-expense-categories + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: invoices + description: 'The `{{ table.name }}` table contains info about the invoices in your + Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/invoices-api/invoices/invoices/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/invoices.json + api-method: https://help.getharvest.com/api-v2/invoices-api/invoices/invoices#list-all-invoices + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: invoice_item_categories + description: 'The `{{ table.name }}` table contains info about the various categories + that can be applied to invoice line items. + + + **Note**: Harvest includes two non-removable categories by default for the hours + and expenses you bill. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-item-categories/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/invoice_item_categories.json + api-method: http://help.getharvest.com/api-v1/invoices-api/invoices/invoice-messages-payments/#show-all-categories + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: invoice_line_items + description: 'The `{{ table.name }}` table contains info about the line items contained + in invoices. + + + **Note**: This table is updated based on new and updated `invoices`. This means + that when an invoice is updated, this table will also be updated. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/invoices-api/invoices/invoices#the-invoice-line-item-object + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/invoice_line_items.json + api-method: https://help.getharvest.com/api-v2/invoices-api/invoices/invoices#list-all-invoices + table-details: + replication-method: Key-based Incremental + primary-key: id +- name: invoice_messages + description: 'The `{{ table.name }}` table contains info about invoice messages, + or emails sent to clients about invoices. + + ' + links: + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/invoice_messages.json + api-method: https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-messages/ + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: invoice_payments + description: 'The `{{ table.name }}` table contains info about the payments applied + to invoices in your Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-payments/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/invoice_payments.json + api-method: https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-payments#list-all-payments-for-an-invoice + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: projects + description: 'The `{{ table.name }}` table contains info about the projects in your + Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/projects-api/projects/projects/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/projects.json + api-method: https://help.getharvest.com/api-v2/projects-api/projects/projects#list-all-projects + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: project_tasks + description: 'The `{{ table.name }}` table contains info about the tasks assigned + to projects. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/projects-api/projects/task-assignments/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/project_tasks.json + api-method: https://help.getharvest.com/api-v2/projects-api/projects/task-assignments#list-all-task-assignments + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: project_users + description: 'The `{{ table.name }}` table contains info about the users assigned + to projects. + + ' + links: + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/project_users.json + api-method: https://help.getharvest.com/api-v2/projects-api/projects/user-assignments/ + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: roles + description: 'The `{{ table.name }}` table contains info about the roles in your + {{ integration.display_name }} account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/roles-api/roles/roles/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/roles.json + api-method: https://help.getharvest.com/api-v2/roles-api/roles/roles#list-all-roles + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: tasks + description: 'The `{{ table.name }}` table contains info about the tasks in your + Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/tasks-api/tasks/tasks/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/tasks.json + api-method: https://help.getharvest.com/api-v2/tasks-api/tasks/tasks#list-all-tasks + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: time_entries + description: 'The `{{ table.name }}` table contains info about the time entries + in your Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/time_entries.json + api-method: https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries#list-all-time-entries + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: time_entry_external_reference + description: 'The `{{ table.name }}` table contains pairs of time entry IDs and + external reference IDs. This data can be used to tie time entries tracked in external + services (such as Trello) to your other Harvest data. + + + **Note**: This table is updated based on new and updated `time_entries`. This + means that when a time entry is updated, this table will also be updated. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/time_entry_external_reference.json + api-method: https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries#list-all-time-entries + table-details: + replication-method: Key-based Incremental + primary-keys: + - time_entry_id + - external_reference_id +- name: users + description: 'The `{{ table.name }}` table contains info about the users in your + Harvest account. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/users-api/users/users/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/users.json + api-method: https://help.getharvest.com/api-v2/users-api/users/users#list-all-users + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: user_projects + description: 'The `{{ table.name }}` table contains info about the project assignments + users are assigned to. + + ' + links: + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/user_projects.json + api-method: https://help.getharvest.com/api-v2/users-api/users/project-assignments/ + table-details: + replication-method: Key-based Incremental + primary-key: id + replication-key: updated_at +- name: user_project_tasks + description: "The `{{ table.name }}` table contains pairs of user IDs and project\ + \ task IDs.\n\n This data can be used to see lists of all the project tasks associated\ + \ with a user, and join tables together to get a comprehensive look at the user's\ + \ projects.\n\n**Note**: This table is updated based on new and updated `users`.\ + \ This means that when a user is updated, this table will also be updated.\n" + links: + doc-link: null + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/user_project_tasks.json + table-details: + replication-method: Key-based Incremental + primary-keys: + - user_id + - project_task_id +- name: user_roles + description: 'The `{{ table.name }}` table contains a list of user ID and role ID + pairs, enabling you to see the roles users are associated with. + + + **Note**: This table is updated based on new and updated `users`. This means that + when a user is updated, this table will also be updated. + + ' + links: + doc-link: https://help.getharvest.com/api-v2/users-api/users/users/ + singer-schema: https://github.com/singer-io/tap-harvest/blob/master/tap_harvest/schemas/user_roles.json + table-details: + replication-method: Key-based Incremental + primary-keys: + - user_id + - role_id diff --git a/_data/taps/schemas/harvest/v3/json/clients.json b/_data/taps/schemas/harvest/v3/json/clients.json new file mode 100644 index 000000000..0df08b2bd --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/clients.json @@ -0,0 +1,47 @@ +{ + "properties": { + "address": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "currency": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/contacts.json b/_data/taps/schemas/harvest/v3/json/contacts.json new file mode 100644 index 000000000..0868709de --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/contacts.json @@ -0,0 +1,71 @@ +{ + "properties": { + "client_id": { + "type": [ + "null", + "integer" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "email": { + "type": [ + "null", + "string" + ] + }, + "fax": { + "type": [ + "null", + "string" + ] + }, + "first_name": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "last_name": { + "type": [ + "null", + "string" + ] + }, + "phone_mobile": { + "type": [ + "null", + "string" + ] + }, + "phone_office": { + "type": [ + "null", + "string" + ] + }, + "title": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/estimate_item_categories.json b/_data/taps/schemas/harvest/v3/json/estimate_item_categories.json new file mode 100644 index 000000000..87185e5c1 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/estimate_item_categories.json @@ -0,0 +1,29 @@ +{ + "properties": { + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/estimate_line_items.json b/_data/taps/schemas/harvest/v3/json/estimate_line_items.json new file mode 100644 index 000000000..24d0a69ca --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/estimate_line_items.json @@ -0,0 +1,59 @@ +{ + "properties": { + "amount": { + "type": [ + "null", + "number" + ] + }, + "description": { + "type": [ + "null", + "string" + ] + }, + "estimate_id": { + "type": [ + "null", + "integer" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "kind": { + "type": [ + "null", + "string" + ] + }, + "quantity": { + "type": [ + "null", + "integer" + ] + }, + "taxed": { + "type": [ + "null", + "boolean" + ] + }, + "taxed2": { + "type": [ + "null", + "boolean" + ] + }, + "unit_price": { + "type": [ + "null", + "number" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/estimate_messages.json b/_data/taps/schemas/harvest/v3/json/estimate_messages.json new file mode 100644 index 000000000..bbb0afaa8 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/estimate_messages.json @@ -0,0 +1,103 @@ +{ + "properties": { + "body": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "estimate_id": { + "type": [ + "null", + "integer" + ] + }, + "event_type": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "recipients": { + "items": { + "properties": { + "email": { + "type": [ + "null", + "string" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + } + }, + "type": [ + "null", + "object" + ] + }, + "type": [ + "null", + "array" + ] + }, + "send_me_a_copy": { + "type": [ + "null", + "boolean" + ] + }, + "sent_by": { + "type": [ + "null", + "string" + ] + }, + "sent_by_email": { + "type": [ + "null", + "string" + ] + }, + "sent_from": { + "type": [ + "null", + "string" + ] + }, + "sent_from_email": { + "type": [ + "null", + "string" + ] + }, + "subject": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/estimates.json b/_data/taps/schemas/harvest/v3/json/estimates.json new file mode 100644 index 000000000..3e5fbcebc --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/estimates.json @@ -0,0 +1,146 @@ +{ + "properties": { + "accepted_at": { + "type": [ + "null", + "date-time" + ] + }, + "amount": { + "type": [ + "null", + "number" + ] + }, + "client_id": { + "type": [ + "null", + "integer" + ] + }, + "client_key": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "creator_id": { + "type": [ + "null", + "integer" + ] + }, + "currency": { + "type": [ + "null", + "string" + ] + }, + "declined_at": { + "type": [ + "null", + "date-time" + ] + }, + "discount": { + "type": [ + "null", + "string", + "number" + ] + }, + "discount_amount": { + "type": [ + "null", + "number" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "issue_date": { + "type": [ + "null", + "date-time" + ] + }, + "notes": { + "type": [ + "null", + "string" + ] + }, + "number": { + "type": [ + "null", + "string" + ] + }, + "purchase_order": { + "type": [ + "null", + "string" + ] + }, + "sent_at": { + "type": [ + "null", + "date-time" + ] + }, + "state": { + "type": [ + "null", + "string" + ] + }, + "subject": { + "type": [ + "null", + "string" + ] + }, + "tax": { + "type": [ + "null", + "string", + "number" + ] + }, + "tax2": { + "type": [ + "null", + "string", + "number" + ] + }, + "tax2_amount": { + "type": [ + "null", + "number" + ] + }, + "tax_amount": { + "type": [ + "null", + "number" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/expense_categories.json b/_data/taps/schemas/harvest/v3/json/expense_categories.json new file mode 100644 index 000000000..90cfd97a9 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/expense_categories.json @@ -0,0 +1,47 @@ +{ + "properties": { + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "unit_name": { + "type": [ + "null", + "string" + ] + }, + "unit_price": { + "type": [ + "null", + "number" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/expenses.json b/_data/taps/schemas/harvest/v3/json/expenses.json new file mode 100644 index 000000000..6c41d1fce --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/expenses.json @@ -0,0 +1,137 @@ +{ + "properties": { + "billable": { + "type": [ + "null", + "boolean" + ] + }, + "client_id": { + "type": [ + "null", + "integer" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "expense_category_id": { + "type": [ + "null", + "integer" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "invoice_id": { + "type": [ + "null", + "integer" + ] + }, + "is_billed": { + "type": [ + "null", + "boolean" + ] + }, + "is_closed": { + "type": [ + "null", + "boolean" + ] + }, + "is_locked": { + "type": [ + "null", + "boolean" + ] + }, + "locked_reason": { + "type": [ + "null", + "string" + ] + }, + "notes": { + "type": [ + "null", + "string" + ] + }, + "project_id": { + "type": [ + "null", + "integer" + ] + }, + "receipt_content_type": { + "type": [ + "null", + "string" + ] + }, + "receipt_file_name": { + "type": [ + "null", + "string" + ] + }, + "receipt_file_size": { + "type": [ + "null", + "integer" + ] + }, + "receipt_url": { + "type": [ + "null", + "string" + ] + }, + "spent_date": { + "type": [ + "null", + "date-time" + ] + }, + "total_cost": { + "type": [ + "null", + "number" + ] + }, + "units": { + "type": [ + "null", + "number" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + }, + "user_assignment_id": { + "type": [ + "null", + "integer" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/invoice_item_categories.json b/_data/taps/schemas/harvest/v3/json/invoice_item_categories.json new file mode 100644 index 000000000..4e72640f9 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/invoice_item_categories.json @@ -0,0 +1,41 @@ +{ + "properties": { + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + }, + "use_as_expense": { + "type": [ + "null", + "boolean" + ] + }, + "use_as_service": { + "type": [ + "null", + "boolean" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/invoice_line_items.json b/_data/taps/schemas/harvest/v3/json/invoice_line_items.json new file mode 100644 index 000000000..0797fe788 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/invoice_line_items.json @@ -0,0 +1,65 @@ +{ + "properties": { + "amount": { + "type": [ + "null", + "number" + ] + }, + "description": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "invoice_id": { + "type": [ + "null", + "integer" + ] + }, + "kind": { + "type": [ + "null", + "string" + ] + }, + "project_id": { + "type": [ + "null", + "integer" + ] + }, + "quantity": { + "type": [ + "null", + "integer" + ] + }, + "taxed": { + "type": [ + "null", + "boolean" + ] + }, + "taxed2": { + "type": [ + "null", + "boolean" + ] + }, + "unit_price": { + "type": [ + "null", + "number" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/invoice_messages.json b/_data/taps/schemas/harvest/v3/json/invoice_messages.json new file mode 100644 index 000000000..2264fc52f --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/invoice_messages.json @@ -0,0 +1,133 @@ +{ + "properties": { + "attach_pdf": { + "type": [ + "null", + "boolean" + ] + }, + "body": { + "type": [ + "null", + "string" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "event_type": { + "type": [ + "null", + "string" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "include_link_to_client_invoice": { + "type": [ + "null", + "boolean" + ] + }, + "invoice_id": { + "type": [ + "null", + "integer" + ] + }, + "recipients": { + "items": { + "properties": { + "email": { + "type": [ + "null", + "string" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + } + }, + "type": [ + "null", + "object" + ] + }, + "type": [ + "null", + "array" + ] + }, + "reminder": { + "type": [ + "null", + "boolean" + ] + }, + "send_me_a_copy": { + "type": [ + "null", + "boolean" + ] + }, + "send_reminder_on": { + "type": [ + "null", + "date-time" + ] + }, + "sent_by": { + "type": [ + "null", + "string" + ] + }, + "sent_by_email": { + "type": [ + "null", + "string" + ] + }, + "sent_from": { + "type": [ + "null", + "string" + ] + }, + "sent_from_email": { + "type": [ + "null", + "string" + ] + }, + "subject": { + "type": [ + "null", + "string" + ] + }, + "thank_you": { + "type": [ + "null", + "boolean" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/invoice_payments.json b/_data/taps/schemas/harvest/v3/json/invoice_payments.json new file mode 100644 index 000000000..a44155331 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/invoice_payments.json @@ -0,0 +1,83 @@ +{ + "properties": { + "amount": { + "type": [ + "null", + "number" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "invoice_id": { + "type": [ + "null", + "integer" + ] + }, + "notes": { + "type": [ + "null", + "string" + ] + }, + "paid_at": { + "type": [ + "null", + "date-time" + ] + }, + "paid_date": { + "type": [ + "null", + "date-time" + ] + }, + "payment_gateway_id": { + "type": [ + "null", + "integer" + ] + }, + "payment_gateway_name": { + "type": [ + "null", + "integer" + ] + }, + "recorded_by": { + "type": [ + "null", + "string" + ] + }, + "recorded_by_email": { + "type": [ + "null", + "string" + ] + }, + "transaction_id": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/invoices.json b/_data/taps/schemas/harvest/v3/json/invoices.json new file mode 100644 index 000000000..d3e452caa --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/invoices.json @@ -0,0 +1,194 @@ +{ + "properties": { + "amount": { + "type": [ + "null", + "number" + ] + }, + "client_id": { + "type": [ + "null", + "integer" + ] + }, + "client_key": { + "type": [ + "null", + "string" + ] + }, + "closed_at": { + "type": [ + "null", + "date-time" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "creator_id": { + "type": [ + "null", + "integer" + ] + }, + "currency": { + "type": [ + "null", + "string" + ] + }, + "discount": { + "type": [ + "null", + "string", + "number" + ] + }, + "discount_amount": { + "type": [ + "null", + "number" + ] + }, + "due_amount": { + "type": [ + "null", + "number" + ] + }, + "due_date": { + "type": [ + "null", + "date-time" + ] + }, + "estimate_id": { + "type": [ + "null", + "integer" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "issue_date": { + "type": [ + "null", + "date-time" + ] + }, + "notes": { + "type": [ + "null", + "string" + ] + }, + "number": { + "type": [ + "null", + "string" + ] + }, + "paid_at": { + "type": [ + "null", + "date-time" + ] + }, + "paid_date": { + "type": [ + "null", + "date-time" + ] + }, + "payment_term": { + "type": [ + "null", + "string" + ] + }, + "period_end": { + "type": [ + "null", + "date-time" + ] + }, + "period_start": { + "type": [ + "null", + "date-time" + ] + }, + "purchase_order": { + "type": [ + "null", + "string" + ] + }, + "retainer_id": { + "type": [ + "null", + "integer" + ] + }, + "sent_at": { + "type": [ + "null", + "date-time" + ] + }, + "state": { + "type": [ + "null", + "string" + ] + }, + "subject": { + "type": [ + "null", + "string" + ] + }, + "tax": { + "type": [ + "null", + "string", + "number" + ] + }, + "tax2": { + "type": [ + "null", + "string", + "number" + ] + }, + "tax2_amount": { + "type": [ + "null", + "number" + ] + }, + "tax_amount": { + "type": [ + "null", + "number" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/project_tasks.json b/_data/taps/schemas/harvest/v3/json/project_tasks.json new file mode 100644 index 000000000..a83c8f223 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/project_tasks.json @@ -0,0 +1,59 @@ +{ + "properties": { + "billable": { + "type": [ + "null", + "boolean" + ] + }, + "budget": { + "type": [ + "null", + "number" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "hourly_rate": { + "type": [ + "null", + "number" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "project_id": { + "type": [ + "null", + "integer" + ] + }, + "task_id": { + "type": [ + "null", + "integer" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/project_users.json b/_data/taps/schemas/harvest/v3/json/project_users.json new file mode 100644 index 000000000..cb13b6b5f --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/project_users.json @@ -0,0 +1,59 @@ +{ + "properties": { + "budget": { + "type": [ + "null", + "number" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "hourly_rate": { + "type": [ + "null", + "number" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "is_project_manager": { + "type": [ + "null", + "boolean" + ] + }, + "project_id": { + "type": [ + "null", + "integer" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/projects.json b/_data/taps/schemas/harvest/v3/json/projects.json new file mode 100644 index 000000000..d8a96590a --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/projects.json @@ -0,0 +1,149 @@ +{ + "properties": { + "bill_by": { + "type": [ + "null", + "string" + ] + }, + "budget": { + "type": [ + "null", + "number" + ] + }, + "budget_by": { + "type": [ + "null", + "string" + ] + }, + "budget_is_monthly": { + "type": [ + "null", + "boolean" + ] + }, + "client_id": { + "type": [ + "null", + "integer" + ] + }, + "code": { + "type": [ + "null", + "string" + ] + }, + "cost_budget": { + "type": [ + "null", + "number" + ] + }, + "cost_budget_include_expenses": { + "type": [ + "null", + "boolean" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "ends_on": { + "type": [ + "null", + "string" + ] + }, + "fee": { + "type": [ + "null", + "number" + ] + }, + "hourly_rate": { + "type": [ + "null", + "number" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "is_billable": { + "type": [ + "null", + "boolean" + ] + }, + "is_fixed_fee": { + "type": [ + "null", + "boolean" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "notes": { + "type": [ + "null", + "string" + ] + }, + "notify_when_over_budget": { + "type": [ + "null", + "boolean" + ] + }, + "over_budget_notification_date": { + "type": [ + "null", + "date-time" + ] + }, + "over_budget_notification_percentage": { + "type": [ + "null", + "integer" + ] + }, + "show_budget_to_all": { + "type": [ + "null", + "boolean" + ] + }, + "starts_on": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/roles.json b/_data/taps/schemas/harvest/v3/json/roles.json new file mode 100644 index 000000000..87185e5c1 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/roles.json @@ -0,0 +1,29 @@ +{ + "properties": { + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/tasks.json b/_data/taps/schemas/harvest/v3/json/tasks.json new file mode 100644 index 000000000..4f7fdab2a --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/tasks.json @@ -0,0 +1,53 @@ +{ + "properties": { + "billable_by_default": { + "type": [ + "null", + "boolean" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "default_hourly_rate": { + "type": [ + "null", + "number" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "is_default": { + "type": [ + "null", + "boolean" + ] + }, + "name": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/time_entries.json b/_data/taps/schemas/harvest/v3/json/time_entries.json new file mode 100644 index 000000000..f0a43779f --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/time_entries.json @@ -0,0 +1,161 @@ +{ + "properties": { + "billable": { + "type": [ + "null", + "boolean" + ] + }, + "billable_rate": { + "type": [ + "null", + "number" + ] + }, + "budgeted": { + "type": [ + "null", + "number" + ] + }, + "client_id": { + "type": [ + "null", + "integer" + ] + }, + "cost_rate": { + "type": [ + "null", + "number" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "ended_time": { + "type": [ + "null", + "time" + ] + }, + "external_reference_id": { + "type": [ + "null", + "string" + ] + }, + "hours": { + "type": [ + "null", + "number" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "invoice_id": { + "type": [ + "null", + "integer" + ] + }, + "is_billed": { + "type": [ + "null", + "boolean" + ] + }, + "is_closed": { + "type": [ + "null", + "boolean" + ] + }, + "is_locked": { + "type": [ + "null", + "boolean" + ] + }, + "is_running": { + "type": [ + "null", + "boolean" + ] + }, + "locked_reason": { + "type": [ + "null", + "string" + ] + }, + "notes": { + "type": [ + "null", + "string" + ] + }, + "project_id": { + "type": [ + "null", + "integer" + ] + }, + "spent_date": { + "type": [ + "null", + "date-time" + ] + }, + "started_time": { + "type": [ + "null", + "time" + ] + }, + "task_assignment_id": { + "type": [ + "null", + "integer" + ] + }, + "task_id": { + "type": [ + "null", + "integer" + ] + }, + "timer_started_at": { + "type": [ + "null", + "date-time" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + }, + "user_assignment_id": { + "type": [ + "null", + "integer" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/time_entry_external_reference.json b/_data/taps/schemas/harvest/v3/json/time_entry_external_reference.json new file mode 100644 index 000000000..16f340b69 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/time_entry_external_reference.json @@ -0,0 +1,17 @@ +{ + "properties": { + "external_reference_id": { + "type": [ + "null", + "string" + ] + }, + "time_entry_id": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/user_project_tasks.json b/_data/taps/schemas/harvest/v3/json/user_project_tasks.json new file mode 100644 index 000000000..446fd3330 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/user_project_tasks.json @@ -0,0 +1,17 @@ +{ + "properties": { + "project_task_id": { + "type": [ + "null", + "integer" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/user_projects.json b/_data/taps/schemas/harvest/v3/json/user_projects.json new file mode 100644 index 000000000..183aa71d2 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/user_projects.json @@ -0,0 +1,65 @@ +{ + "properties": { + "budget": { + "type": [ + "null", + "number" + ] + }, + "client_id": { + "type": [ + "null", + "integer" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "hourly_rate": { + "type": [ + "null", + "number" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "is_project_manager": { + "type": [ + "null", + "boolean" + ] + }, + "project_id": { + "type": [ + "null", + "integer" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/user_roles.json b/_data/taps/schemas/harvest/v3/json/user_roles.json new file mode 100644 index 000000000..39ba08837 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/user_roles.json @@ -0,0 +1,17 @@ +{ + "properties": { + "role_id": { + "type": [ + "null", + "integer" + ] + }, + "user_id": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/schemas/harvest/v3/json/users.json b/_data/taps/schemas/harvest/v3/json/users.json new file mode 100644 index 000000000..24163bdd7 --- /dev/null +++ b/_data/taps/schemas/harvest/v3/json/users.json @@ -0,0 +1,125 @@ +{ + "properties": { + "avatar_url": { + "type": [ + "null", + "string" + ] + }, + "can_create_invoices": { + "type": [ + "null", + "boolean" + ] + }, + "can_create_projects": { + "type": [ + "null", + "boolean" + ] + }, + "can_see_rates": { + "type": [ + "null", + "boolean" + ] + }, + "cost_rate": { + "type": [ + "null", + "number" + ] + }, + "created_at": { + "type": [ + "null", + "date-time" + ] + }, + "default_hourly_rate": { + "type": [ + "null", + "number" + ] + }, + "email": { + "type": [ + "null", + "string" + ] + }, + "first_name": { + "type": [ + "null", + "string" + ] + }, + "has_access_to_all_future_projects": { + "type": [ + "null", + "boolean" + ] + }, + "id": { + "type": [ + "null", + "integer" + ] + }, + "is_active": { + "type": [ + "null", + "boolean" + ] + }, + "is_admin": { + "type": [ + "null", + "boolean" + ] + }, + "is_contractor": { + "type": [ + "null", + "boolean" + ] + }, + "is_project_manager": { + "type": [ + "null", + "boolean" + ] + }, + "last_name": { + "type": [ + "null", + "string" + ] + }, + "telephone": { + "type": [ + "null", + "string" + ] + }, + "timezone": { + "type": [ + "null", + "string" + ] + }, + "updated_at": { + "type": [ + "null", + "date-time" + ] + }, + "weekly_capacity": { + "type": [ + "null", + "integer" + ] + } + }, + "type": "object" +} \ No newline at end of file diff --git a/_data/taps/versions/harvest.yml b/_data/taps/versions/harvest.yml index 62b774223..a91225053 100644 --- a/_data/taps/versions/harvest.yml +++ b/_data/taps/versions/harvest.yml @@ -2,13 +2,17 @@ # HARVEST VERSIONS # # -------------------------- # -latest-version: "2" +latest-version: "3" released-versions: + - number: "3" + date-released: "June 14, 2025" + - number: "2" date-released: "August 30, 2018" # date-last-connection: sunset-date: + deprecation-date: "June 14, 2025" - number: "1" status: "sunset" diff --git a/_saas-integrations/harvest/v2/harvest-v2.md b/_saas-integrations/harvest/v2/harvest-v2.md index 8a928cfc4..024a3d6d9 100755 --- a/_saas-integrations/harvest/v2/harvest-v2.md +++ b/_saas-integrations/harvest/v2/harvest-v2.md @@ -1,9 +1,10 @@ --- title: Harvest (v2) -permalink: /integrations/saas/harvest +permalink: /integrations/saas/harvest/v2 keywords: harvest, harvest integration, schema, etl harvest, harvest etl, harvest schema summary: "Connection instructions, replication info, and schema details for Stitch's Harvest integration." layout: singer +input: false key: "harvest-setup" diff --git a/_saas-integrations/harvest/v3/harvest-v3.md b/_saas-integrations/harvest/v3/harvest-v3.md new file mode 100644 index 000000000..7bc5e7277 --- /dev/null +++ b/_saas-integrations/harvest/v3/harvest-v3.md @@ -0,0 +1,112 @@ +--- +title: Harvest (v3) +permalink: /integrations/saas/harvest +keywords: harvest, harvest integration, schema, etl harvest, harvest etl, harvest schema +summary: "Connection instructions, replication info, and schema details for Stitch's Harvest integration." +layout: singer + +key: "harvest-setup" + +# -------------------------- # +# Tap Details # +# -------------------------- # + +name: "harvest" +display_name: "Harvest" +singer: true +repo-url: https://github.com/singer-io/tap-harvest + +this-version: "3" + +api: | + [{{ integration.display_name }} REST API V2](https://help.getharvest.com/api-v2/){:target="new"} + +# -------------------------- # +# Stitch Details # +# -------------------------- # + +certified: false + +historical: "1 year" +frequency: "30 minutes" +tier: "Standard" +status-url: http://harveststatus.com/ + +api-type: "platform.harvest" + +table-selection: false +column-selection: false +select-all: false +select-all-reason: | + As this integration doesn't support table or column selection, all available tables and columns are automatically replicated. + +anchor-scheduling: true +cron-scheduling: false + +extraction-logs: true +loading-reports: true + + +# -------------------------- # +# Feature Summary # +# -------------------------- # + +feature-summary: | + Stitch's {{ integration.display_name }} integration replicates data using the {{ integration.api | flatify | strip }}. Refer to the [Schema](#schema) section for a list of objects available for replication. + + +# -------------------------- # +# Setup Instructions # +# -------------------------- # + +requirements-list: + - item: | + **Verify your Harvest user's access.** Stitch will have the same permissions as the user setting up the integration. This means Stitch will only be able to access the same objects and data as the authorizing user. + + For example: if you're unable to access expenses in Harvest, Stitch will be unable to replicate expense data. + +requirements-info: | + Before diving into the setup process, verify that the user setting up the integration has access to all the objects - such as expenses - that you want to replicate. + + [Read more about Harvest permissions in their documentation](http://help.getharvest.com/harvest/team/overview/new-permissions/). + +setup-steps: + - title: "Add {{ integration.display_name }} as a Stitch data source" + anchor: "add-stitch-data-source" + content: | + {% include integrations/shared-setup/connection-setup.html %} + 4. Enter your Harvest account name in the **Account Name** field. For example: if your Harvest account URL is `stitch.harvestapp.com`, you'd enter `stitch` in this field. + - title: "Define the historical replication start date" + anchor: "define-historical-sync" + content: | + {% include integrations/saas/setup/historical-sync.html %} + + - title: "Create a replication schedule" + anchor: "define-rep-frequency" + content: | + {% include integrations/shared-setup/replication-frequency.html %} + + - title: "Authorize Stitch to Access Harvest" + anchor: "grant-stitch-authorization" + content: | + Lastly, you'll be directed to Harvest's website to complete the setup. + + 1. Enter your Harvest credentials and click **Create Integration**. + 2. A screen asking for authorization to Harvest will display. **Note that Stitch will only ever read your data.** + 3. Click **Connect.** + 4. After the authorization process successfully completes, you'll be redirected back to Stitch. + 5. Click {{ app.buttons.finish-int-setup }}. + + - title: "Set objects to replicate" + anchor: "setting-data-to-replicate" + content: | + {% include integrations/shared-setup/data-selection/object-selection.html %} +# -------------------------- # +# Table Schemas # +# -------------------------- # + +# Looking for the table schemas & info? +# Each table has a its own .md file in /_integration-schemas/harvest +--- +{% assign integration = page %} +{% include misc/data-files.html %} \ No newline at end of file From 2995caad369c988ac9e0acb57b1b239a9bfeb7fe Mon Sep 17 00:00:00 2001 From: mvistry Date: Thu, 12 Jun 2025 17:24:41 +0200 Subject: [PATCH 2/5] Fixing replication section --- _saas-integrations/harvest/v3/harvest-v3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_saas-integrations/harvest/v3/harvest-v3.md b/_saas-integrations/harvest/v3/harvest-v3.md index 7bc5e7277..f7ae12670 100644 --- a/_saas-integrations/harvest/v3/harvest-v3.md +++ b/_saas-integrations/harvest/v3/harvest-v3.md @@ -96,11 +96,11 @@ setup-steps: 3. Click **Connect.** 4. After the authorization process successfully completes, you'll be redirected back to Stitch. 5. Click {{ app.buttons.finish-int-setup }}. - - title: "Set objects to replicate" anchor: "setting-data-to-replicate" content: | {% include integrations/shared-setup/data-selection/object-selection.html %} + # -------------------------- # # Table Schemas # # -------------------------- # From 03caf86383358ba2606d27688238dd01b5a17fee Mon Sep 17 00:00:00 2001 From: mvistry Date: Fri, 13 Jun 2025 14:58:04 +0200 Subject: [PATCH 3/5] Update versions in yml files --- _data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml | 2 +- _data/taps/schemas/harvest/v3/harvest-v3-tables.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/_data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml b/_data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml index 226ad5344..a82a57167 100644 --- a/_data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml +++ b/_data/taps/schemas/harvest/v3/harvest-v3-foreign-keys.yml @@ -1,5 +1,5 @@ tap: harvest -version: '2' +version: '3' keys: clients_client_id: - table: clients diff --git a/_data/taps/schemas/harvest/v3/harvest-v3-tables.yml b/_data/taps/schemas/harvest/v3/harvest-v3-tables.yml index 5c22481e4..6d321da55 100644 --- a/_data/taps/schemas/harvest/v3/harvest-v3-tables.yml +++ b/_data/taps/schemas/harvest/v3/harvest-v3-tables.yml @@ -1,5 +1,5 @@ tap: harvest -version: '2' +version: '3' tables: - name: clients description: 'The `{{ table.name }}` table contains info about the clients in your From f18531985da23574f0b786183454546fb9fd95b7 Mon Sep 17 00:00:00 2001 From: mvistry Date: Fri, 13 Jun 2025 15:27:27 +0200 Subject: [PATCH 4/5] select-all set to true --- _saas-integrations/harvest/v3/harvest-v3.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/_saas-integrations/harvest/v3/harvest-v3.md b/_saas-integrations/harvest/v3/harvest-v3.md index f7ae12670..d8bcce51e 100644 --- a/_saas-integrations/harvest/v3/harvest-v3.md +++ b/_saas-integrations/harvest/v3/harvest-v3.md @@ -36,7 +36,7 @@ api-type: "platform.harvest" table-selection: false column-selection: false -select-all: false +select-all: true select-all-reason: | As this integration doesn't support table or column selection, all available tables and columns are automatically replicated. From 5f3fdc5644f50595d449e94bd4d835ecf2c23d6f Mon Sep 17 00:00:00 2001 From: mvistry Date: Fri, 13 Jun 2025 15:30:29 +0200 Subject: [PATCH 5/5] selction settings to true --- _saas-integrations/harvest/v3/harvest-v3.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/_saas-integrations/harvest/v3/harvest-v3.md b/_saas-integrations/harvest/v3/harvest-v3.md index d8bcce51e..0ad0c1767 100644 --- a/_saas-integrations/harvest/v3/harvest-v3.md +++ b/_saas-integrations/harvest/v3/harvest-v3.md @@ -34,8 +34,8 @@ status-url: http://harveststatus.com/ api-type: "platform.harvest" -table-selection: false -column-selection: false +table-selection: true +column-selection: true select-all: true select-all-reason: | As this integration doesn't support table or column selection, all available tables and columns are automatically replicated.