Pulling data from the Harvest API is only the first part of your reporting. You also need to understand the relationships between different endpoints - something that APIs typically fail to convey.
At SyncHub, we not only sync your Harvest API endpoints down into a reportable format, we also describe their relationships (e.g. in terms of foreign keys) so that you can quickly get a grasp of your data and how it fits together. This page is intended as technical documentation of these relationships.
Documentation: https://help.getharvest.com/api-v2/clients-api/clients/clients/
Documentation: https://help.getharvest.com/api-v2/company-api/company/company/
Documentation: https://help.getharvest.com/api-v2/clients-api/clients/contacts/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| Title | string | - | - |
| FirstName | string | - | - |
| LastName | string | - | - |
| string | - | - | |
| PhoneOffice | string | - | - |
| PhoneMobile | string | - | - |
| Fax | string | - | - |
| ClientID | long | Client → ID | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/estimates-api/estimates/estimates/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ClientID | long | Client → ID | - |
| CreatedByUserID | long | User → ID | - |
| ClientKey | string | - | - |
| Number | string | - | - |
| PurchaseOrder | string | - | - |
| Amount | decimal | - | - |
| Tax | decimal | - | - |
| TaxAmount | decimal | - | - |
| Tax2 | decimal | - | - |
| Tax2Amount | decimal | - | - |
| Discount | decimal | - | - |
| DiscountAmount | decimal | - | - |
| Subject | string | - | - |
| Notes | string | - | - |
| State | string | - | - |
| IssueDate | string | - | - |
| SentAt | datetime | - | - |
| AcceptedAt | datetime | - | - |
| DeclinedAt | datetime | - | - |
| Currency | string | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/estimates-api/estimates/estimate-item-categories/
Documentation: https://help.getharvest.com/api-v2/expenses-api/expenses/expenses/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ReceiptUrl | string | - | - |
| ReceiptFileName | string | - | - |
| ReceiptFileSize | decimal | - | - |
| ReceiptContentType | string | - | - |
| UserID | long | User → ID | - |
| UserAssignmentID | long | UserAssignment → ID | - |
| ProjectID | long | Project → ID | - |
| ClientID | long | Client → ID | - |
| InvoiceID | long | Invoice → ID | - |
| ExpenseCategoryID | long | - | - |
| Notes | string | - | - |
| TotalCost | decimal | - | - |
| Units | decimal | - | - |
| IsClosed | boolean | - | - |
| IsLocked | boolean | - | - |
| IsBilled | boolean | - | - |
| LockedReason | string | - | - |
| SpentDate | string | - | - |
| Billable | boolean | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/expenses-api/expenses/expense-categories/
Documentation: https://help.getharvest.com/api-v2/invoices-api/invoices/invoices/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ClientID | long | Client → ID | - |
| CreatedByUserID | long | User → ID | - |
| ClientKey | string | - | - |
| Number | string | - | - |
| PurchaseOrder | string | - | - |
| Amount | decimal | - | - |
| DueAmount | decimal | - | - |
| Tax | string | - | - |
| TaxAmount | decimal | - | - |
| Tax2 | decimal | - | - |
| Tax2Amount | decimal | - | - |
| Discount | decimal | - | - |
| DiscountAmount | decimal | - | - |
| Subject | string | - | - |
| Notes | string | - | - |
| State | string | - | - |
| PeriodStart | string | - | - |
| PeriodEnd | string | - | - |
| IssueDate | string | - | - |
| DueDate | string | - | - |
| PaymentTerm | string | - | - |
| SentAt | datetime | - | - |
| PaidAt | datetime | - | - |
| PaidDate | string | - | - |
| ClosedAt | datetime | - | - |
| RecurringInvoiceID | long | Invoice → ID | - |
| Currency | string | - | - |
| EstimateID | long | Estimate → ID | - |
| RetainerID | long | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-item-categories/
Documentation: https://help.getharvest.com/api-v2/invoices-api/invoices/invoice-payments/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| InvoiceRemoteID | string | Invoice → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| InvoiceID | long | Invoice → ID | - |
| PaymentGatewayID | long | - | - |
| PaymentGatewayName | string | - | - |
| Amount | decimal | - | - |
| PaidAt | datetime | - | - |
| PaidDate | string | - | - |
| RecordedBy | string | - | - |
| RecordedByEmail | string | - | - |
| Notes | string | - | - |
| TransactionID | string | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/projects-api/projects/projects/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| Name | string | - | - |
| ClientID | long | Client → ID | - |
| Code | string | - | - |
| BillBy | string | - | - |
| Budget | decimal | - | - |
| BudgetBy | string | - | - |
| BudgetIsMonthly | boolean | - | - |
| NotifyWhenOverBudget | boolean | - | - |
| OverBudgetNotificationPercentage | decimal | - | - |
| OverBudgetNotificationDate | datetime | - | - |
| ShowBudgetToAll | boolean | - | - |
| StartsOn | string | - | - |
| EndsOn | string | - | - |
| IsBillable | boolean | - | - |
| IsFixedFee | boolean | - | - |
| Notes | string | - | - |
| CostBudget | decimal | - | - |
| CostBudgetIncludeExpenses | boolean | - | - |
| HourlyRate | decimal | - | - |
| Fee | decimal | - | - |
| IsActive | boolean | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/roles-api/roles/roles/
Documentation: https://help.getharvest.com/api-v2/tasks-api/tasks/tasks/
Documentation: https://help.getharvest.com/api-v2/projects-api/projects/task-assignments/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ProjectID | long | Project → ID | - |
| TaskID | long | Task → ID | - |
| Billable | boolean | - | - |
| HourlyRate | decimal | - | - |
| Budget | decimal | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
| IsActive | boolean | - | - |
Documentation: https://help.getharvest.com/api-v2/timesheets-api/timesheets/time-entries/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| SpentDate | string | - | - |
| ExternalReferenceID | string | - | - |
| ExternalReferenceGroupID | string | - | - |
| ExternalReferenceAccountID | string | - | - |
| ExternalReferencePermaLink | string | - | - |
| ExternalReferenceService | string | - | - |
| UserID | long | User → ID | - |
| ClientID | long | Client → ID | - |
| ProjectID | long | Project → ID | - |
| TaskID | long | Task → ID | - |
| UserAssignmentID | long | UserAssignment → ID | - |
| TaskAssignmentID | long | TaskAssignment → ID | - |
| InvoiceID | long | Invoice → ID | - |
| ApprovalStatus | string | - | - |
| Hours | decimal | - | - |
| HoursWithoutTimer | decimal | - | - |
| RoundedHours | decimal | - | - |
| Notes | string | - | - |
| IsLocked | boolean | - | - |
| LockedReason | string | - | - |
| IsClosed | boolean | - | - |
| IsBilled | boolean | - | - |
| TimerStartedAt | datetime | - |
|
| StartedTime | string | - |
|
| EndedTime | string | - |
|
| IsRunning | boolean | - | - |
| Billable | boolean | - | - |
| Budgeted | boolean | - | - |
| BillableRate | decimal | - | - |
| CostRate | decimal | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/users-api/users/users/
Documentation: https://help.getharvest.com/api-v2/projects-api/projects/user-assignments/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ProjectID | long | Project → ID | - |
| UserID | long | User → ID | - |
| IsProjectManager | boolean | - | - |
| UseDefaultRates | boolean | - | - |
| Budget | decimal | - | - |
| HourlyRate | decimal | - | - |
| IsActive | boolean | - | - |
| CreatedAt | datetime | - | - |
| UpdatedAt | datetime | - | - |
Documentation: https://help.getharvest.com/api-v2/users-api/users/billable-rates/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| UserRemoteID | string | User → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - |
|
| UserID | long | User → ID | - |
| Amount | decimal | - | - |
| StartDate | string | - | - |
| EndDate | string | - | - |
Documentation: https://help.getharvest.com/api-v2/users-api/users/cost-rates/
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| UserRemoteID | string | User → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - |
|
| UserID | long | User → ID | - |
| Amount | decimal | - | - |
| StartDate | string | - | - |
| EndDate | string | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| EstimateRemoteID | string | Estimate → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| Description | string | - | - |
| EstimateID | long | Estimate → ID | - |
| LineNumber | int | - | - |
| Kind | string | EstimateItemCategory → Name | - |
| Quantity | decimal | - | - |
| UnitPrice | decimal | - | - |
| Amount | decimal | - | - |
| Taxed | boolean | - | - |
| Taxed2 | boolean | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| InvoiceRemoteID | string | Invoice → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| Description | string | - | - |
| InvoiceID | long | Invoice → ID | - |
| LineNumber | int | - | - |
| ProjectID | long | - | - |
| Kind | string | InvoiceItemCategory → Name | - |
| Quantity | decimal | - | - |
| UnitPrice | decimal | - | - |
| Amount | decimal | - | - |
| Taxed | boolean | - | - |
| Taxed2 | boolean | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| RoleRemoteID | string | Role → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| UserID | long | User → ID | - |
| RoleID | long | Role → ID | - |
SyncHub lives and breathes APIs and data. Keep exploring using the links below.