Pulling data from the Projectworks 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 Projectworks 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.
Our Universal MCP Server lets you query your Projectworks data using Claude, ChatGPT or your favourite AI tool.
Our Projectworks Connector connects your Projectworks data to favourite reporting tools.
We connect to over over 70+ cloud services, letting you manage the data needs of your entire business in a single location.
Browse the data model below, or if you'd prefer, we also have an interactive ERD over here.
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Common/Common_GetBillingContacts
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ClientID | long | Client → ID | - |
| ContactName | string | - | - |
| ContactEmail | string | - | - |
| ContactEmailCc | string | - | - |
| ContactPhoneNumber | string | - | - |
| PostalAddress1 | string | - | - |
| PostalAddress2 | string | - | - |
| PostalAddress3 | string | - | - |
| CityOrState | string | - | - |
| Postcode | string | - | - |
| CountryCode | string | - | - |
| Note | string | - | - |
| IsActive | boolean | - | - |
| UseCompanyAddress | boolean | - | - |
| ExternalReference | string | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Clients
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ClientName | string | - | - |
| AccountManagerID | long | User → ID | - |
| OfficeID | long | Office → ID | - |
| ClientTypeID | long | ClientType → ID | - |
| DefaultRateCardID | long | - | - |
| DefaultTaxTypeID | long | TaxType → ID | - |
| DefaultCurrencyID | long | Currency → ID | - |
| FinanceEmail | string | - | - |
| FinancePhone | string | - | - |
| FinanceNotes | string | - | - |
| FinancePaymentTermTypeID | long | - | - |
| FinancePaymentTermDays | decimal | - | - |
| CurrencyID | long | Currency → ID | - |
| IsActive | boolean | - | - |
| AccountManagerName | string | - | - |
| FinancePaymentTermTypeName | string | - | - |
| ExternalReference | string | - | - |
| PostalAddress1 | string | - | - |
| PostalAddress2 | string | - | - |
| PostalAddress3 | string | - | - |
| CityOrState | string | - | - |
| Postcode | string | - | - |
| CountryCode | string | - | - |
| CompanyTaxNumber | string | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Common/Common_GetCountries
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Common/Common_GetCurrencies
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/CustomFields
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/ExpenseClaims
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| UserID | long | User → ID | - |
| ProjectID | long | Project → ID | - |
| ModuleID | long | Module → ID | - |
| ExpenseClaimTypeID | long | - | - |
| ExpenseClaimStatusID | long | - | - |
| ExpenseClaimNumber | string | - | - |
| IsReimbursable | boolean | - | - |
| IsProcessed | boolean | - | - |
| IsExported | boolean | - | - |
| IsExportUpdateRequired | boolean | - | - |
| IsPlanned | boolean | - | - |
| ExportedBy | string | - | - |
| ExportedDate | datetime | - | - |
| Date | datetime | - | - |
| Quantity | decimal | - | - |
| PurchaseAmount | decimal | - | - |
| Amount | decimal | - | - |
| TaxAmount | decimal | - | - |
| AmountWithoutTax | decimal | - | - |
| AmountIncludesSalesTax | boolean | - | - |
| CurrencyID | long | Currency → ID | - |
| TaxTypeID | long | TaxType → ID | - |
| IsBillable | boolean | - | - |
| MarginAmount | decimal | - | - |
| MarginPercent | decimal | - | - |
| BillableAmount | decimal | - | - |
| IncludeTaxInBudget | boolean | - | - |
| Notes | string | - | - |
| InvoiceDescription | string | - | - |
| Response | string | - | - |
| InvoiceID | long | - | - |
| AccountingSystemReference | string | - | - |
| AccountingSystemContactReference | string | - | - |
| TrackingCategoryOptionReferenceOne | string | - | - |
| TrackingCategoryOptionReferenceTwo | string | - | - |
| RowVersion | string | - | - |
| IsReadyForExport | boolean | - | - |
| SupplierInvoiceReference | string | - | - |
| PaymentDueDate | datetime | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Leaves
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| UserID | long | User → ID | - |
| StatusID | long | - | - |
| DateSubmitted | datetime | - | - |
| RequestComment | string | - | - |
| ResponseComment | string | - | - |
| IsReviewRequired | boolean | - | - |
| ExternalReference | string | - | - |
| IsExported | boolean | - | - |
| IsExportUpdateRequired | boolean | - | - |
| ExportedBy | string | - | - |
| ExportedDate | datetime | - | - |
| RowVersion | string | - | - |
| IsReadyForExport | boolean | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Common/Common_GetLocations
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Modules
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ModuleName | string | - | - |
| ProjectID | long | Project → ID | - |
| Budget | decimal | - | - |
| GLCodeID | long | - | - |
| GLCodeCode | string | - | - |
| GLCodeName | string | - | - |
| GLCodeTypeID | long | - | - |
| GLCodeTypeName | string | - | - |
| IsDiscount | boolean | - | - |
| IsActive | boolean | - | - |
| IsServices | boolean | - | - |
| ExternalReference | string | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/CustomFields
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ModuleRemoteID | string | Module → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ModuleID | long | Module → ID | - |
| Value | string | - | - |
| CustomFieldID | long | CustomField → ID | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Offices
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| Name | string | - | - |
| FullName | string | - | - |
| PhoneNumber | string | - | - |
| Website | string | - | - |
| LocationID | long | Location → ID | - |
| DefaultTaxTypeID | long | TaxType → ID | - |
| CurrencyID | long | Currency → ID | - |
| CountryID | long | Country → ID | - |
| IsActive | boolean | - | - |
| ExternalReference | string | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#/Projects
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ProjectNumber | string | - | - |
| ProjectName | string | - | - |
| OfficeID | long | Office → ID | - |
| ClientID | long | Client → ID | - |
| ProjectTypeID | long | ProjectType → ID | - |
| ProjectStatusID | long | ProjectStatus → ID | - |
| ProjectBudgetTypeID | long | - | - |
| HolidayCalendarID | long | - | - |
| HolidayCalendarName | string | - | - |
| DefaultRateCardID | long | - | - |
| CurrencyID | long | Currency → ID | - |
| ProjectManagerID | long | User → ID | - |
| AccountManagerID | long | User → ID | - |
| TaskSelfServiceModeID | long | - | - |
| DefaultInvoicesToForecastAmount | boolean | - | - |
| SendInvoicesToFinanceEmail | boolean | - | - |
| SendInvoicesToBillingContactEmail | boolean | - | - |
| QuoteSendInvoicesToFinanceEmail | boolean | - | - |
| QuoteSendInvoicesToBillingContactEmail | boolean | - | - |
| IsActive | boolean | - | - |
| IsPendingExpenseBillable | boolean | - | - |
| IsApprovedExpenseBillable | boolean | - | - |
| IsNonReimbursableExpenseBillable | boolean | - | - |
| StartDate | datetime | - | - |
| EndDate | datetime | - | - |
| DefaultPONumber | string | - | - |
| DefaultInvoicePOType | long | - | - |
| ProjectManagerName | string | - | - |
| AccountManagerName | string | - | - |
| TaskSelfServiceModeName | string | - | - |
| ExternalReference | string | - | - |
| DefaultBillingContactID | long | BillingContact → ID | - |
| UseContactFromLastInvoice | boolean | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/CustomFields
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ProjectRemoteID | string | Project → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ProjectID | long | Project → ID | - |
| Value | string | - | - |
| CustomFieldID | long | CustomField → ID | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Projects/Projects_GetProjectStatuses
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Projects/Projects_GetProjectTypes
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Resources
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ProjectID | long | Project → ID | - |
| ModuleID | long | Module → ID | - |
| Date | datetime | - | - |
| ResourceTypeID | long | - | - |
| UserID | long | User → ID | - |
| IsPenciled | boolean | - | - |
| Hours | decimal | - | - |
| DaysOfCapacity | decimal | - | - |
| HoursPerDay | decimal | - | - |
| Comment | string | - | - |
| ModeID | long | - | - |
| ShadowOfficeID | long | Office → ID | - |
| ShadowPositionID | long | - | - |
| ShadowTeamID | long | Team → ID | - |
| ShadowRankID | long | - | - |
| ShadowEstimatedRate | decimal | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Tasks
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| TaskName | string | - | - |
| ModuleID | long | Module → ID | - |
| TaskTypeID | long | - | - |
| TaskTypeName | string | - | - |
| StartDate | datetime | - | - |
| EndDate | datetime | - | - |
| IsOnTimesheet | boolean | - | - |
| EnforceTimesheetDates | boolean | - | - |
| IsCommentRequired | boolean | - | - |
| UseDefaultRate | boolean | - | - |
| DefaultRate | decimal | - | - |
| IsScheduled | boolean | - | - |
| IsAutoSchedule | boolean | - | - |
| StatusID | long | - | - |
| PercentComplete | decimal | - | - |
| IsBillable | boolean | - | - |
| ExternalReference | string | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/CustomFields
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| TaskRemoteID | string | Task → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| TaskID | long | Task → ID | - |
| Value | string | - | - |
| CustomFieldID | long | CustomField → ID | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Common/Common_GetTaxTypes
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| Name | string | - | - |
| Jurisdiction | string | - | - |
| CurrencyID | long | Currency → ID | - |
| TaxRate | decimal | - | - |
| IsActive | boolean | - | - |
| ExcludeTaxFromCost | boolean | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Teams
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Timesheets/Timesheets_Get
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| UserID | long | User → ID | - |
| TaskID | long | Task → ID | - |
| Date | datetime | - | - |
| Minutes | decimal | - | - |
| Comment | string | - | - |
| ExternalIssueID | string | - | - |
| IsReviewed | boolean | - | - |
| FirstName | string | - | - |
| LastName | string | - | - |
| TaskName | string | - | - |
| InvoiceNumber | string | - | - |
| ModifiedDateUTC | datetime | - | - |
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/Users
Documentation: https://api.projectworksapp.com/swagger/ui/index#!/CustomFields
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| UserRemoteID | string | User → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| UserID | long | User → ID | - |
| Value | string | - | - |
| CustomFieldID | long | CustomField → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ClientRemoteID | string | Client → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ClientID | long | Client → ID | - |
| ProjectID | long | Project → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ClientRemoteID | string | Client → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ClientID | long | Client → ID | - |
| BillingContactID | long | BillingContact → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ClientRemoteID | string | Client → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| Name | string | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| CustomFieldRemoteID | string | CustomField → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| CustomFieldID | long | CustomField → ID | - |
| ProjectTypeID | long | ProjectType → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| CustomFieldRemoteID | string | CustomField → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| CustomFieldID | long | CustomField → ID | - |
| ProjectStatusID | long | ProjectStatus → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| CustomFieldRemoteID | string | CustomField → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| CustomFieldID | long | CustomField → ID | - |
| OptionID | int | - | - |
| Text | string | - | - |
| IsActive | boolean | - | - |
| Group | string | - | - |
| Order | int | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ExpenseClaimRemoteID | string | ExpenseClaim → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ID | long | - | - |
| ExpenseClaimID | long | ExpenseClaim → ID | - |
| FileName | string | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ModuleRemoteID | string | Module → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ModuleID | long | Module → ID | - |
| TaskID | long | Task → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ModuleCustomFieldValueRemoteID | string | ModuleCustomFieldValue → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| OptionID | int | CustomFieldOption → OptionID | - |
| Count | int | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ProjectRemoteID | string | Project → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| ProjectID | long | Project → ID | - |
| ModuleID | long | Module → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| ProjectCustomFieldValueRemoteID | string | ProjectCustomFieldValue → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| OptionID | int | CustomFieldOption → OptionID | - |
| Count | int | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| TaskRemoteID | string | Task → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| TaskID | long | Task → ID | - |
| UserID | long | User → ID | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| TaskCustomFieldValueRemoteID | string | TaskCustomFieldValue → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| OptionID | int | CustomFieldOption → OptionID | - |
| Count | int | - | - |
| Column | Type | Relates to | Notes |
|---|---|---|---|
| RemoteID | string | - | - |
| UserCustomFieldValueRemoteID | string | UserCustomFieldValue → RemoteID | - |
| WhenUpsertedIntoDataStore | datetime | - | - |
| MirrorRemoteID | int | - | - |
| IsDeleted | boolean | - | - |
| WhenCreated | datetime | - | - |
| WhenModified | datetime | - | - |
| OptionID | int | CustomFieldOption → OptionID | - |
| Count | int | - | - |
SYNCHUB lives and breathes APIs and data. Keep exploring using the links below.