@knpkv/clockify-api-client 0.3.0 → 1.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/CHANGELOG.md +29 -0
  2. package/README.md +92 -80
  3. package/dist/ClockifyApiClient.d.ts +44 -45
  4. package/dist/ClockifyApiClient.d.ts.map +1 -1
  5. package/dist/ClockifyApiClient.js +52 -121
  6. package/dist/ClockifyApiClient.js.map +1 -1
  7. package/dist/generated/ClockifyApi.d.ts +14432 -0
  8. package/dist/generated/ClockifyApi.d.ts.map +1 -0
  9. package/dist/generated/ClockifyApi.js +1239 -0
  10. package/dist/generated/ClockifyApi.js.map +1 -0
  11. package/dist/index.d.ts +4 -6
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +3 -4
  14. package/dist/index.js.map +1 -1
  15. package/package.json +15 -21
  16. package/scripts/regenerate.ts +182 -201
  17. package/scripts/tsconfig.json +13 -0
  18. package/src/ClockifyApiClient.ts +125 -226
  19. package/src/generated/ClockifyApi.ts +3020 -0
  20. package/src/index.ts +10 -14
  21. package/test/ClockifyApiClient.test.ts +195 -0
  22. package/vitest.config.ts +7 -0
  23. package/.specs/VERSION +0 -1
  24. package/.specs/clockify-v1.json +0 -31670
  25. package/.specs/clockify-v1.patch.json +0 -48
  26. package/dist/ClockifyApiError.d.ts +0 -11
  27. package/dist/ClockifyApiError.d.ts.map +0 -1
  28. package/dist/ClockifyApiError.js +0 -14
  29. package/dist/ClockifyApiError.js.map +0 -1
  30. package/dist/OpenApiFetchClient.d.ts +0 -55
  31. package/dist/OpenApiFetchClient.d.ts.map +0 -1
  32. package/dist/OpenApiFetchClient.js +0 -63
  33. package/dist/OpenApiFetchClient.js.map +0 -1
  34. package/dist/generated/index.d.ts +0 -2
  35. package/dist/generated/index.d.ts.map +0 -1
  36. package/dist/generated/index.js +0 -2
  37. package/dist/generated/index.js.map +0 -1
  38. package/dist/generated/schema.d.ts +0 -16204
  39. package/src/ClockifyApiError.ts +0 -17
  40. package/src/OpenApiFetchClient.ts +0 -92
  41. package/src/generated/index.ts +0 -1
  42. package/src/generated/schema.d.ts +0 -16204
  43. package/tsconfig.tsbuildinfo +0 -1
@@ -0,0 +1,3020 @@
1
+ import * as Data from "effect/Data"
2
+ import * as Effect from "effect/Effect"
3
+ import type { SchemaError } from "effect/Schema"
4
+ import * as Schema from "effect/Schema"
5
+ import type * as HttpClient from "effect/unstable/http/HttpClient"
6
+ import * as HttpClientError from "effect/unstable/http/HttpClientError"
7
+ import * as HttpClientRequest from "effect/unstable/http/HttpClientRequest"
8
+ import * as HttpClientResponse from "effect/unstable/http/HttpClientResponse"
9
+ // non-recursive definitions
10
+ export type AccountStatus = "ACTIVE" | "PENDING_EMAIL_VERIFICATION" | "DELETED" | "NOT_REGISTERED" | "LIMITED" | "LIMITED_DELETED"
11
+ export const AccountStatus = Schema.Literals(["ACTIVE", "PENDING_EMAIL_VERIFICATION", "DELETED", "NOT_REGISTERED", "LIMITED", "LIMITED_DELETED"]).annotate({ "description": "Represents account status enum." })
12
+ export type AddUserToWorkspaceRequest = { readonly "email": string }
13
+ export const AddUserToWorkspaceRequest = Schema.Struct({ "email": Schema.String.annotate({ "description": "Represents an email address of the user." }).check(Schema.isMinLength(1)) })
14
+ export type ApplyTaxes = never
15
+ export const ApplyTaxes = Schema.Never
16
+ export type ApprovalRequestCreatorDtoV1 = { readonly "userEmail"?: string, readonly "userId"?: string, readonly "userName"?: string }
17
+ export const ApprovalRequestCreatorDtoV1 = Schema.Struct({ "userEmail": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user email." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user name." })) }).annotate({ "description": "Represents approval request creator object." })
18
+ export type ApprovalRequestOwnerDtoV1 = { readonly "startOfWeek"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "timeZone"?: string, readonly "userId"?: string, readonly "userName"?: string }
19
+ export const ApprovalRequestOwnerDtoV1 = Schema.Struct({ "startOfWeek": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "timeZone": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time zone." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user name." })) }).annotate({ "description": "Represents approval request owner object." })
20
+ export type ApprovalRequestStatusDtoV1 = { readonly "note"?: string, readonly "state"?: "PENDING" | "APPROVED" | "WITHDRAWN_SUBMISSION" | "WITHDRAWN_APPROVAL" | "REJECTED", readonly "updatedAt"?: string, readonly "updatedBy"?: string, readonly "updatedByUserName"?: string }
21
+ export const ApprovalRequestStatusDtoV1 = Schema.Struct({ "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an approval requesst note." })), "state": Schema.optionalKey(Schema.Literals(["PENDING", "APPROVED", "WITHDRAWN_SUBMISSION", "WITHDRAWN_APPROVAL", "REJECTED"]).annotate({ "description": "Represents approval state enum." })), "updatedAt": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "updatedBy": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "updatedByUserName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user name." })) }).annotate({ "description": "Represents approval request status object." })
22
+ export type AssignmentPerDayDto = { readonly "date"?: string, readonly "hasAssignment"?: boolean }
23
+ export const AssignmentPerDayDto = Schema.Struct({ "date": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "hasAssignment": Schema.optionalKey(Schema.Boolean) }).annotate({ "description": "Represents a list of assignment per day objects." })
24
+ export type AssignmentUpdateRequestV1 = { readonly "billable"?: boolean, readonly "end": string, readonly "hoursPerDay"?: number, readonly "includeNonWorkingDays"?: boolean, readonly "note"?: string, readonly "seriesUpdateOption"?: "THIS_ONE" | "THIS_AND_FOLLOWING" | "ALL", readonly "start": string, readonly "startTime"?: string, readonly "taskId"?: string }
25
+ export const AssignmentUpdateRequestV1 = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is billable or not." })), "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format." }), "hoursPerDay": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents assignment total hours per day.", "format": "double" }).check(Schema.isFinite())), "includeNonWorkingDays": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to include non-working days or not." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an assignment note." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))), "seriesUpdateOption": Schema.optionalKey(Schema.Literals(["THIS_ONE", "THIS_AND_FOLLOWING", "ALL"]).annotate({ "description": "Valid series option" })), "start": Schema.String.annotate({ "description": "Represents start date in yyyy-MM-ddThh:mm:ssZ format." }), "startTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a start time in the hh:mm:ss format." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })) })
26
+ export type AuthorizationSourceDtoV1 = { readonly "id"?: string, readonly "type"?: "USER_GROUP" }
27
+ export const AuthorizationSourceDtoV1 = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents authorization source identifier across the system." })), "type": Schema.optionalKey(Schema.Literal("USER_GROUP").annotate({ "description": "Represents a valid authorization source type." })) }).annotate({ "description": "Represents an authorization data transfer object." })
28
+ export type AutomaticAccrualDto = { readonly "amount"?: number, readonly "period"?: "MONTH" | "YEAR", readonly "timeUnit"?: "DAYS" | "HOURS" }
29
+ export const AutomaticAccrualDto = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents automatic accrual's amount", "format": "double" }).check(Schema.isFinite())), "period": Schema.optionalKey(Schema.Literals(["MONTH", "YEAR"]).annotate({ "description": "Represents automatic accrual's period" })), "timeUnit": Schema.optionalKey(Schema.Literals(["DAYS", "HOURS"]).annotate({ "description": "Represents automatic accrual's time unit" })) }).annotate({ "description": "Represents automatic approval settings." })
30
+ export type AutomaticAccrualRequest = { readonly "amount": number, readonly "period"?: "MONTH" | "YEAR", readonly "timeUnit"?: "DAYS" | "HOURS" }
31
+ export const AutomaticAccrualRequest = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents amount of automatic accrual.", "format": "double" }).check(Schema.isFinite()).check(Schema.isGreaterThanOrEqualTo(0)), "period": Schema.optionalKey(Schema.Literals(["MONTH", "YEAR"]).annotate({ "description": "Represents automatic accrual period." })), "timeUnit": Schema.optionalKey(Schema.Literals(["DAYS", "HOURS"]).annotate({ "description": "Represents automatic accrual time unit." })) }).annotate({ "description": "Provide automatic accrual settings." })
32
+ export type AutomaticLockDtoV1 = { readonly "changeDay"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "dayOfMonth"?: number, readonly "firstDay"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "olderThanPeriod"?: "DAYS" | "WEEKS" | "MONTHS", readonly "olderThanValue"?: number, readonly "type"?: "WEEKLY" | "MONTHLY" | "OLDER_THAN" }
33
+ export const AutomaticLockDtoV1 = Schema.Struct({ "changeDay": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "dayOfMonth": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a day of month as integer.", "format": "int32" }).check(Schema.isInt())), "firstDay": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "olderThanPeriod": Schema.optionalKey(Schema.Literals(["DAYS", "WEEKS", "MONTHS"]).annotate({ "description": "Represents a time entry automatic lock period enum." })), "olderThanValue": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an integer as the criteria for locking time entries.", "format": "int32" }).check(Schema.isInt())), "type": Schema.optionalKey(Schema.Literals(["WEEKLY", "MONTHLY", "OLDER_THAN"]).annotate({ "description": "Represents a time entry automatic lock type enum." })) }).annotate({ "description": "Represents an automatic lock object." })
34
+ export type BalanceDtoV1 = { readonly "balance"?: number, readonly "id"?: string, readonly "negativeBalanceAmount"?: number, readonly "negativeBalanceLimit"?: boolean, readonly "policyArchived"?: boolean, readonly "policyId"?: string, readonly "policyName"?: string, readonly "policyTimeUnit"?: "DAYS" | "HOURS", readonly "total"?: number, readonly "used"?: number, readonly "userId"?: string, readonly "userName"?: string, readonly "workspaceId"?: string }
35
+ export const BalanceDtoV1 = Schema.Struct({ "balance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the balance amount of the time unit", "format": "double" }).check(Schema.isFinite())), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represent balance identifier across the system." })), "negativeBalanceAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represent negative balance amount.", "format": "double" }).check(Schema.isFinite())), "negativeBalanceLimit": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the negative balance limit is allowed." })), "policyArchived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the policy is archived." })), "policyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represent policy identifier across the system." })), "policyName": Schema.optionalKey(Schema.String.annotate({ "description": "Represent policy name." })), "policyTimeUnit": Schema.optionalKey(Schema.Literals(["DAYS", "HOURS"]).annotate({ "description": "Represent policy time unit." })), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the total amount", "format": "double" }).check(Schema.isFinite())), "used": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the balance used amount", "format": "double" }).check(Schema.isFinite())), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represent user identifier across the system." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represent user's username." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represent workspace identifier across the system." })) }).annotate({ "description": "Represent the list of balances." })
36
+ export type BaseFilterRequest = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string> }
37
+ export const BaseFilterRequest = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Filter type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of filter identifiers." })).annotate({ "description": "Represents a list of filter identifiers." }).check(Schema.isUnique())) }).annotate({ "description": "Represents a company filter object. If provided, you'll get a filtered list of invoices that matches the specified company filter." })
38
+ export type CalculationType = never
39
+ export const CalculationType = Schema.Never
40
+ export type ChangeInvoiceStatusRequestV1 = { readonly "invoiceStatus"?: "UNSENT" | "SENT" | "PAID" | "PARTIALLY_PAID" | "VOID" | "OVERDUE" }
41
+ export const ChangeInvoiceStatusRequestV1 = Schema.Struct({ "invoiceStatus": Schema.optionalKey(Schema.Literals(["UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE"]).annotate({ "description": "Represents the invoice status to be set." })) })
42
+ export type ChangePolicyStatusRequestV1 = { readonly "status": "ACTIVE" | "ARCHIVED" | "ALL" }
43
+ export const ChangePolicyStatusRequestV1 = Schema.Struct({ "status": Schema.Literals(["ACTIVE", "ARCHIVED", "ALL"]).annotate({ "description": "Provide the status you would like to use for changing the policy." }) })
44
+ export type ClientDtoV1 = { readonly "address"?: string, readonly "archived"?: boolean, readonly "ccEmails"?: ReadonlyArray<string>, readonly "currencyId"?: string, readonly "email"?: string, readonly "id"?: string, readonly "name"?: string, readonly "note"?: string, readonly "workspaceId"?: string }
45
+ export const ClientDtoV1 = Schema.Struct({ "address": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client's address." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represents whether a client is archived or not." })), "ccEmails": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents additional emails for sending invoices." })).annotate({ "description": "Represents additional emails for sending invoices." })), "currencyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents currency identifier across the system." })), "email": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client email." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents saved notes for the client." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
46
+ export type ClientWithCurrencyDtoV1 = { readonly "address"?: string, readonly "archived"?: boolean, readonly "ccEmails"?: ReadonlyArray<string>, readonly "currencyCode"?: string, readonly "currencyId"?: string, readonly "email"?: string, readonly "id"?: string, readonly "name"?: string, readonly "note"?: string, readonly "workspaceId"?: string }
47
+ export const ClientWithCurrencyDtoV1 = Schema.Struct({ "address": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client's address." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represents whether a client is archived or not." })), "ccEmails": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents additional emails for sending invoices." })).annotate({ "description": "Represents additional emails for sending invoices." })), "currencyCode": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client currency code." })), "currencyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents currency identifier across the system." })), "email": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client email." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents saved notes for the client." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
48
+ export type ContainsArchivedFilterRequest = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ACTIVE" | "ARCHIVED" | "ALL" }
49
+ export const ContainsArchivedFilterRequest = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Filter type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of filter identifiers." })).annotate({ "description": "Represents a list of filter identifiers." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ACTIVE", "ARCHIVED", "ALL"]).annotate({ "description": "Filters entities by status." })) }).annotate({ "description": "Represents a project filter for imported items." })
50
+ export type ContainsUserGroupFilterRequest = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL" }
51
+ export const ContainsUserGroupFilterRequest = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Filter type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of filter identifiers." })).annotate({ "description": "Represents a list of filter identifiers." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"]).annotate({ "description": "Filters entities by status." })) }).annotate({ "description": "Provide list with user group ids and corresponding status." })
52
+ export type ContainsUserGroupFilterRequestV1 = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL" }
53
+ export const ContainsUserGroupFilterRequestV1 = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Filter type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of filter identifiers." })).annotate({ "description": "Represents a list of filter identifiers." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"]).annotate({ "description": "Filters entities by status." })) }).annotate({ "description": "Represents a user group filter request object." })
54
+ export type ContainsUsersFilterRequestForHoliday = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ALL" | "ACTIVE" | "INACTIVE", readonly "statuses"?: ReadonlyArray<string> }
55
+ export const ContainsUsersFilterRequestForHoliday = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Filter type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of filter identifiers." })).annotate({ "description": "Represents a list of filter identifiers." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ALL", "ACTIVE", "INACTIVE"]).annotate({ "description": "Filters entities by status." })), "statuses": Schema.optionalKey(Schema.Array(Schema.String)) }).annotate({ "description": "Provide list with users ids and corresponding status." })
56
+ export type ContainsUsersFilterRequestV1 = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "sourceType"?: "USER_GROUP", readonly "status"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL", readonly "statuses"?: ReadonlyArray<"PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL"> }
57
+ export const ContainsUsersFilterRequestV1 = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Filter type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of filter identifiers." })).annotate({ "description": "Represents a list of filter identifiers." }).check(Schema.isUnique())), "sourceType": Schema.optionalKey(Schema.Literal("USER_GROUP").annotate({ "description": "Valid authorization source type." })), "status": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"]).annotate({ "description": "Filters entities by status." })), "statuses": Schema.optionalKey(Schema.Array(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"]).annotate({ "description": "Valid array of membership statuses." })).annotate({ "description": "Valid array of membership statuses." })) }).annotate({ "description": "Represents a user filter request object." })
58
+ export type CopyAssignmentRequestV1 = { readonly "seriesUpdateOption"?: "THIS_ONE" | "THIS_AND_FOLLOWING" | "ALL", readonly "userId": string }
59
+ export const CopyAssignmentRequestV1 = Schema.Struct({ "seriesUpdateOption": Schema.optionalKey(Schema.Literals(["THIS_ONE", "THIS_AND_FOLLOWING", "ALL"]).annotate({ "description": "Represents a series update option." })), "userId": Schema.String.annotate({ "description": "Represents a user identifier across the system." }) })
60
+ export type CostRateRequest = { readonly "amount"?: number, readonly "since"?: string, readonly "sinceAsInstant"?: string }
61
+ export const CostRateRequest = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an amount as integer.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "since": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a datetime in yyyy-MM-ddThh:mm:ssZ format." })), "sinceAsInstant": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })) }).annotate({ "description": "Represents a cost rate request object." })
62
+ export type CostRateRequestV1 = { readonly "amount": number, readonly "since"?: string }
63
+ export const CostRateRequestV1 = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents an amount as integer.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0)), "since": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date and time in yyyy-MM-ddThh:mm:ssZ format." })) })
64
+ export type CreateApprovalRequest = { readonly "period"?: "WEEKLY" | "SEMI_MONTHLY" | "MONTHLY", readonly "periodStart": string }
65
+ export const CreateApprovalRequest = Schema.Struct({ "period": Schema.optionalKey(Schema.Literals(["WEEKLY", "SEMI_MONTHLY", "MONTHLY"]).annotate({ "description": "Specifies the approval period. It has to match the workspace approval period setting." })), "periodStart": Schema.String.annotate({ "description": "Specifies an approval period start date in yyyy-MM-ddThh:mm:ssZ format." }).check(Schema.isMinLength(1)) })
66
+ export type CreateClientRequestV1 = { readonly "address"?: string, readonly "email"?: string, readonly "name"?: string, readonly "note"?: string }
67
+ export const CreateClientRequestV1 = Schema.Struct({ "address": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a client's address." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))), "email": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a client email.", "format": "email" })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a client name." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents additional notes for the client." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))) })
68
+ export type CreateCustomAttributeRequest = { readonly "name": string, readonly "namespace": string, readonly "value": string }
69
+ export const CreateCustomAttributeRequest = Schema.Struct({ "name": Schema.String.annotate({ "description": "Represents custom attribute name." }).check(Schema.isMinLength(1)), "namespace": Schema.String.annotate({ "description": "Represents custom attribute namespace." }).check(Schema.isMinLength(1)), "value": Schema.String.annotate({ "description": "Represents custom attribute value." }).check(Schema.isMinLength(1)) }).annotate({ "description": "Represents a list of create custom field request objects." })
70
+ export type CreateExpenseV1Request = { readonly "amount": number, readonly "billable"?: boolean, readonly "categoryId": string, readonly "date": string, readonly "file": string, readonly "notes"?: string, readonly "projectId": string, readonly "taskId"?: string, readonly "userId": string }
71
+ export const CreateExpenseV1Request = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents an expense amount as the double data type.", "format": "double" }).check(Schema.isFinite()).check(Schema.isLessThanOrEqualTo(92233720368547760)), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether expense is billable or not." })), "categoryId": Schema.String.annotate({ "description": "Represents a category identifier across the system." }), "date": Schema.String.annotate({ "description": "Provides a valid yyyy-MM-ddThh:mm:ssZ format date.", "format": "date-time" }), "file": Schema.String.annotate({ "format": "binary" }), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents notes for an expense." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))), "projectId": Schema.String.annotate({ "description": "Represents a project identifier across the system." }), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "userId": Schema.String.annotate({ "description": "Represents a user identifier across the system." }).check(Schema.isMinLength(1)) })
72
+ export type CreateInvoiceDtoV1 = { readonly "billFrom"?: string, readonly "clientId"?: string, readonly "currency"?: string, readonly "dueDate"?: string, readonly "id"?: string, readonly "issuedDate"?: string, readonly "number"?: string }
73
+ export const CreateInvoiceDtoV1 = Schema.Struct({ "billFrom": Schema.optionalKey(Schema.String.annotate({ "description": "Represents to whom the invoice should be billed from." })), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the currency used by the invoice." })), "dueDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice identifier across the system." })), "issuedDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "number": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice number." })) })
74
+ export type CreateInvoiceItemRequestV1 = { readonly "applyTaxes": "TAX1" | "TAX2" | "TAX1TAX2" | "NONE", readonly "description": string, readonly "itemType": string, readonly "quantity": number, readonly "unitPrice": number }
75
+ export const CreateInvoiceItemRequestV1 = Schema.Struct({ "applyTaxes": Schema.Literals(["TAX1", "TAX2", "TAX1TAX2", "NONE"]).annotate({ "description": "Represents taxes applied to the invoice item. Applies only when the specified taxes are active on the invoice." }), "description": Schema.String.annotate({ "description": "Represents an invoice item description." }), "itemType": Schema.String.annotate({ "description": "Represents an item type." }).check(Schema.isMinLength(1)), "quantity": Schema.Number.annotate({ "description": "Represents an item quantity.", "format": "int64" }).check(Schema.isInt()), "unitPrice": Schema.Number.annotate({ "description": "Represents an item unit price.", "format": "int64" }).check(Schema.isInt()) })
76
+ export type CreateInvoicePaymentRequest = { readonly "amount"?: number, readonly "note"?: string, readonly "paymentDate"?: string }
77
+ export const CreateInvoicePaymentRequest = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice payment amount as long.", "format": "int64" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice payment note." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(1000))), "paymentDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice payment date in yyyy-MM-ddThh:mm:ssZ format." })) })
78
+ export type CreateInvoiceRequest = { readonly "clientId": string, readonly "currency": string, readonly "dueDate": string, readonly "issuedDate": string, readonly "number": string, readonly "timeViewMode"?: "TIME_SENSITIVE_VIEW" | "AGGREGATED_TIME_VIEW" }
79
+ export const CreateInvoiceRequest = Schema.Struct({ "clientId": Schema.String.annotate({ "description": "Represents a client identifier across the system." }).check(Schema.isMinLength(1)), "currency": Schema.String.annotate({ "description": "Represents the currency used by the invoice." }).check(Schema.isMinLength(1)), "dueDate": Schema.String.annotate({ "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "issuedDate": Schema.String.annotate({ "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "number": Schema.String.annotate({ "description": "Represents an invoice number." }).check(Schema.isMinLength(1)), "timeViewMode": Schema.optionalKey(Schema.Literals(["TIME_SENSITIVE_VIEW", "AGGREGATED_TIME_VIEW"])) })
80
+ export type CreateProjectFromTemplateV1 = { readonly "clientId"?: string, readonly "color"?: string, readonly "isPublic"?: boolean, readonly "name": string, readonly "templateProjectId": string }
81
+ export const CreateProjectFromTemplateV1 = Schema.Struct({ "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a client identifier across the system." })), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }).check(Schema.isPattern(new RegExp("^#(?:[0-9a-fA-F]{6}){1}$")))), "isPublic": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the project is public or not." })), "name": Schema.String.annotate({ "description": "Represents a project name." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(250)), "templateProjectId": Schema.String.annotate({ "description": "Represents a project identifier across the system." }).check(Schema.isMinLength(1)) })
82
+ export type CreateRecurringAssignmentRequestV1 = { readonly "repeat"?: boolean, readonly "weeks": number }
83
+ export const CreateRecurringAssignmentRequestV1 = Schema.Struct({ "repeat": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is recurring or not." })), "weeks": Schema.Number.annotate({ "description": "Indicates number of weeks for assignment.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(99)) }).annotate({ "description": "Represents a recurring assignment object. This parameter is optional." })
84
+ export type CreateWebhookRequestV1 = { readonly "name"?: string, readonly "triggerSource": ReadonlyArray<string>, readonly "triggerSourceType": "PROJECT_ID" | "USER_ID" | "TAG_ID" | "TASK_ID" | "WORKSPACE_ID" | "ASSIGNMENT_ID" | "EXPENSE_ID", readonly "url": string, readonly "webhookEvent": "NEW_PROJECT" | "NEW_TASK" | "NEW_CLIENT" | "NEW_TIMER_STARTED" | "TIMER_STOPPED" | "TIME_ENTRY_UPDATED" | "TIME_ENTRY_DELETED" | "TIME_ENTRY_SPLIT" | "NEW_TIME_ENTRY" | "TIME_ENTRY_RESTORED" | "NEW_TAG" | "USER_DELETED_FROM_WORKSPACE" | "USER_JOINED_WORKSPACE" | "USER_DEACTIVATED_ON_WORKSPACE" | "USER_ACTIVATED_ON_WORKSPACE" | "USER_EMAIL_CHANGED" | "USER_UPDATED" | "NEW_INVOICE" | "INVOICE_UPDATED" | "NEW_APPROVAL_REQUEST" | "APPROVAL_REQUEST_STATUS_UPDATED" | "TIME_OFF_REQUESTED" | "TIME_OFF_REQUEST_UPDATED" | "TIME_OFF_REQUEST_APPROVED" | "TIME_OFF_REQUEST_REJECTED" | "TIME_OFF_REQUEST_STARTED" | "TIME_OFF_REQUEST_WITHDRAWN" | "BALANCE_UPDATED" | "TAG_UPDATED" | "TAG_DELETED" | "TASK_UPDATED" | "CLIENT_UPDATED" | "TASK_DELETED" | "CLIENT_DELETED" | "EXPENSE_RESTORED" | "ASSIGNMENT_CREATED" | "ASSIGNMENT_DELETED" | "ASSIGNMENT_PUBLISHED" | "ASSIGNMENT_UPDATED" | "EXPENSE_CREATED" | "EXPENSE_DELETED" | "EXPENSE_UPDATED" | "PROJECT_UPDATED" | "PROJECT_DELETED" | "USER_GROUP_CREATED" | "USER_GROUP_UPDATED" | "USER_GROUP_DELETED" | "USERS_INVITED_TO_WORKSPACE" | "LIMITED_USERS_ADDED_TO_WORKSPACE" | "COST_RATE_UPDATED" | "BILLABLE_RATE_UPDATED" }
85
+ export const CreateWebhookRequestV1 = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a webhook name." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(30))), "triggerSource": Schema.Array(Schema.String.annotate({ "description": "Represents a list of trigger sources." })).annotate({ "description": "Represents a list of trigger sources." }), "triggerSourceType": Schema.Literals(["PROJECT_ID", "USER_ID", "TAG_ID", "TASK_ID", "WORKSPACE_ID", "ASSIGNMENT_ID", "EXPENSE_ID"]).annotate({ "description": "Represents a webhook event trigger source type." }), "url": Schema.String.annotate({ "description": "Represents a webhook target url." }).check(Schema.isMinLength(1)), "webhookEvent": Schema.Literals(["NEW_PROJECT", "NEW_TASK", "NEW_CLIENT", "NEW_TIMER_STARTED", "TIMER_STOPPED", "TIME_ENTRY_UPDATED", "TIME_ENTRY_DELETED", "TIME_ENTRY_SPLIT", "NEW_TIME_ENTRY", "TIME_ENTRY_RESTORED", "NEW_TAG", "USER_DELETED_FROM_WORKSPACE", "USER_JOINED_WORKSPACE", "USER_DEACTIVATED_ON_WORKSPACE", "USER_ACTIVATED_ON_WORKSPACE", "USER_EMAIL_CHANGED", "USER_UPDATED", "NEW_INVOICE", "INVOICE_UPDATED", "NEW_APPROVAL_REQUEST", "APPROVAL_REQUEST_STATUS_UPDATED", "TIME_OFF_REQUESTED", "TIME_OFF_REQUEST_UPDATED", "TIME_OFF_REQUEST_APPROVED", "TIME_OFF_REQUEST_REJECTED", "TIME_OFF_REQUEST_STARTED", "TIME_OFF_REQUEST_WITHDRAWN", "BALANCE_UPDATED", "TAG_UPDATED", "TAG_DELETED", "TASK_UPDATED", "CLIENT_UPDATED", "TASK_DELETED", "CLIENT_DELETED", "EXPENSE_RESTORED", "ASSIGNMENT_CREATED", "ASSIGNMENT_DELETED", "ASSIGNMENT_PUBLISHED", "ASSIGNMENT_UPDATED", "EXPENSE_CREATED", "EXPENSE_DELETED", "EXPENSE_UPDATED", "PROJECT_UPDATED", "PROJECT_DELETED", "USER_GROUP_CREATED", "USER_GROUP_UPDATED", "USER_GROUP_DELETED", "USERS_INVITED_TO_WORKSPACE", "LIMITED_USERS_ADDED_TO_WORKSPACE", "COST_RATE_UPDATED", "BILLABLE_RATE_UPDATED"]).annotate({ "description": "Represents a webhook event type." }) })
86
+ export type CreateWorkspaceRequestV1 = { readonly "name"?: string, readonly "organizationId"?: string }
87
+ export const CreateWorkspaceRequestV1 = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a workspace name." }).check(Schema.isMinLength(1)).check(Schema.isMaxLength(50))), "organizationId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the Cake organization identifier across the system." })) })
88
+ export type CurrencyWithDefaultInfoDtoV1 = { readonly "code"?: string, readonly "id"?: string, readonly "isDefault"?: boolean }
89
+ export const CurrencyWithDefaultInfoDtoV1 = Schema.Struct({ "code": Schema.optionalKey(Schema.String.annotate({ "description": "Represents currency code." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents currency identifier across the system." })), "isDefault": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether curency should be set as default." })) }).annotate({ "description": "Represents currency with default info object." })
90
+ export type CustomFieldDefaultValuesDtoV1 = { readonly "projectId"?: string, readonly "status"?: string, readonly "value"?: { } }
91
+ export const CustomFieldDefaultValuesDtoV1 = Schema.Struct({ "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "status": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field status" })), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents a custom field's default value" })) }).annotate({ "description": "Represents a list of custom field default values data transfer objects." })
92
+ export type CustomFieldProjectDefaultValuesRequest = { readonly "defaultValue"?: { }, readonly "status"?: "INACTIVE" | "VISIBLE" | "INVISIBLE" }
93
+ export const CustomFieldProjectDefaultValuesRequest = Schema.Struct({ "defaultValue": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents a custom field's default value." })), "status": Schema.optionalKey(Schema.Literals(["INACTIVE", "VISIBLE", "INVISIBLE"]).annotate({ "description": "Represents a custom field status." })) })
94
+ export type CustomFieldRequestV1 = { readonly "allowedValues"?: ReadonlyArray<string>, readonly "description"?: string, readonly "entityType"?: "TIMEENTRY" | "USER", readonly "name": string, readonly "onlyAdminCanEdit"?: boolean, readonly "placeholder"?: string, readonly "status"?: "INACTIVE" | "VISIBLE" | "INVISIBLE", readonly "type": "TXT" | "NUMBER" | "DROPDOWN_SINGLE" | "DROPDOWN_MULTIPLE" | "CHECKBOX" | "LINK", readonly "workspaceDefaultValue"?: { } }
95
+ export const CustomFieldRequestV1 = Schema.Struct({ "allowedValues": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of custom field's allowed values." })).annotate({ "description": "Represents a list of custom field's allowed values." })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field description." })), "entityType": Schema.optionalKey(Schema.Literals(["TIMEENTRY", "USER"]).annotate({ "description": "Represents custom field entity type" })), "name": Schema.String.annotate({ "description": "Represents custom field name." }), "onlyAdminCanEdit": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether custom field is modifiable only by admin users." })), "placeholder": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field placeholder value." })), "status": Schema.optionalKey(Schema.Literals(["INACTIVE", "VISIBLE", "INVISIBLE"]).annotate({ "description": "Represents custom field status" })), "type": Schema.Literals(["TXT", "NUMBER", "DROPDOWN_SINGLE", "DROPDOWN_MULTIPLE", "CHECKBOX", "LINK"]).annotate({ "description": "Represents custom field type." }), "workspaceDefaultValue": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents a custom field's default value in the workspace.<li>if type = NUMBER, then value must be a number</li><li>if type = DROPDOWN_MULTIPLE, value must be a list</li><li>if type = CHECKBOX, value must be true/false</li><li>otherwise any string</li>" })) })
96
+ export type CustomFieldType = never
97
+ export const CustomFieldType = Schema.Never
98
+ export type CustomFieldValueDto = { readonly "customFieldId"?: string, readonly "sourceType"?: "WORKSPACE" | "PROJECT" | "TIMEENTRY", readonly "timeEntryId"?: string, readonly "value"?: { } }
99
+ export const CustomFieldValueDto = Schema.Struct({ "customFieldId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field identifier across the system." })), "sourceType": Schema.optionalKey(Schema.Literals(["WORKSPACE", "PROJECT", "TIMEENTRY"]).annotate({ "description": "Represents a custom field value source type." })), "timeEntryId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time entry identifier across the system." })), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents custom field value." })) }).annotate({ "description": "Represents a list of custom field value objects." })
100
+ export type CustomFieldValueDtoV1 = { readonly "customFieldId"?: string, readonly "name"?: string, readonly "timeEntryId"?: string, readonly "type"?: string, readonly "value"?: { } }
101
+ export const CustomFieldValueDtoV1 = Schema.Struct({ "customFieldId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field name." })), "timeEntryId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time entry identifier across the system." })), "type": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a custom field value source type." })), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents custom field value." })) }).annotate({ "description": "Represents a list of custom field value objects." })
102
+ export type DatePeriod = { readonly "endDate"?: string, readonly "startDate"?: string }
103
+ export const DatePeriod = Schema.Struct({ "endDate": Schema.optionalKey(Schema.String.annotate({ "format": "date" })), "startDate": Schema.optionalKey(Schema.String.annotate({ "format": "date" })) }).annotate({ "description": "Represents startDate and endDate of the holiday. Date is in format yyyy-mm-dd" })
104
+ export type DatePeriodRequest = { readonly "endDate": string, readonly "startDate": string }
105
+ export const DatePeriodRequest = Schema.Struct({ "endDate": Schema.String.annotate({ "description": "yyyy-MM-dd format date" }).check(Schema.isMinLength(1)), "startDate": Schema.String.annotate({ "description": "yyyy-MM-dd format date" }).check(Schema.isMinLength(1)) }).annotate({ "description": "Provide startDate and endDate for the holiday." })
106
+ export type DateRangeDto = { readonly "end"?: string, readonly "start"?: string }
107
+ export const DateRangeDto = Schema.Struct({ "end": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "start": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })) }).annotate({ "description": "Represents date range object." })
108
+ export type DefaultEntitiesDto = { readonly "projectId"?: string, readonly "taskId"?: string }
109
+ export const DefaultEntitiesDto = Schema.Struct({ "projectId": Schema.optionalKey(Schema.String), "taskId": Schema.optionalKey(Schema.String) })
110
+ export type DefaultEntitiesRequest = { readonly "projectId"?: string, readonly "taskId"?: string }
111
+ export const DefaultEntitiesRequest = Schema.Struct({ "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Default project for automatically created time entries" })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Default task for automatically created time entries" })) }).annotate({ "description": "Provides information about default project and task for automatically created time entries." })
112
+ export type EntityCreationPermission = never
113
+ export const EntityCreationPermission = Schema.Never
114
+ export type EntityIdNameDto = { readonly "id"?: string, readonly "name"?: string }
115
+ export const EntityIdNameDto = Schema.Struct({ "id": Schema.optionalKey(Schema.String), "name": Schema.optionalKey(Schema.String) }).annotate({ "description": "Contains names of user groups that are assigned to holiday." })
116
+ export type EstimateDtoV1 = { readonly "estimate"?: string, readonly "type"?: "AUTO" | "MANUAL" }
117
+ export const EstimateDtoV1 = Schema.Struct({ "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task duration estimate." })), "type": Schema.optionalKey(Schema.Literals(["AUTO", "MANUAL"]).annotate({ "description": "Represents an estimate type enum." })) }).annotate({ "description": "Represents a project estimate object." })
118
+ export type EstimateRequest = { readonly "estimate"?: string, readonly "type"?: "AUTO" | "MANUAL" }
119
+ export const EstimateRequest = Schema.Struct({ "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time duration in ISO-8601 format." })), "type": Schema.optionalKey(Schema.Literals(["AUTO", "MANUAL"]).annotate({ "description": "Represents an estimate type enum." })) }).annotate({ "description": "Represents an estimate request object." })
120
+ export type EstimateResetDto = { readonly "dayOfMonth"?: number, readonly "dayOfWeek"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "hour"?: number, readonly "interval"?: "WEEKLY" | "MONTHLY" | "YEARLY", readonly "month"?: "JANUARY" | "FEBRUARY" | "MARCH" | "APRIL" | "MAY" | "JUNE" | "JULY" | "AUGUST" | "SEPTEMBER" | "OCTOBER" | "NOVEMBER" | "DECEMBER" }
121
+ export const EstimateResetDto = Schema.Struct({ "dayOfMonth": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "dayOfWeek": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"])), "hour": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "interval": Schema.optionalKey(Schema.Literals(["WEEKLY", "MONTHLY", "YEARLY"])), "month": Schema.optionalKey(Schema.Literals(["JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"])) }).annotate({ "description": "Represents project estimate reset object" })
122
+ export type EstimateResetRequest = { readonly "active"?: boolean, readonly "dayOfMonth"?: number, readonly "dayOfWeek"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "hour"?: number, readonly "interval"?: "WEEKLY" | "MONTHLY" | "YEARLY", readonly "isActive"?: boolean, readonly "month"?: "JANUARY" | "FEBRUARY" | "MARCH" | "APRIL" | "MAY" | "JUNE" | "JULY" | "AUGUST" | "SEPTEMBER" | "OCTOBER" | "NOVEMBER" | "DECEMBER" }
123
+ export const EstimateResetRequest = Schema.Struct({ "active": Schema.optionalKey(Schema.Boolean), "dayOfMonth": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a day of the month.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(31))), "dayOfWeek": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "hour": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an hour of the day in 24 hour time format.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0)).check(Schema.isLessThanOrEqualTo(23))), "interval": Schema.optionalKey(Schema.Literals(["WEEKLY", "MONTHLY", "YEARLY"]).annotate({ "description": "Represents a reset option enum." })), "isActive": Schema.optionalKey(Schema.Boolean.annotate({ "writeOnly": true })), "month": Schema.optionalKey(Schema.Literals(["JANUARY", "FEBRUARY", "MARCH", "APRIL", "MAY", "JUNE", "JULY", "AUGUST", "SEPTEMBER", "OCTOBER", "NOVEMBER", "DECEMBER"]).annotate({ "description": "Represents a month enum." })) }).annotate({ "description": "Represents estimate reset request object." })
124
+ export type EstimateWithOptionsDto = { readonly "active"?: boolean, readonly "estimate"?: number, readonly "includeExpenses"?: boolean, readonly "resetOption"?: "WEEKLY" | "MONTHLY" | "YEARLY", readonly "type"?: "AUTO" | "MANUAL" }
125
+ export const EstimateWithOptionsDto = Schema.Struct({ "active": Schema.optionalKey(Schema.Boolean), "estimate": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an estimate as long.", "format": "int64" }).check(Schema.isInt())), "includeExpenses": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether estimate includes non-billable or not." })), "resetOption": Schema.optionalKey(Schema.Literals(["WEEKLY", "MONTHLY", "YEARLY"]).annotate({ "description": "Represents a reset option enum." })), "type": Schema.optionalKey(Schema.Literals(["AUTO", "MANUAL"]).annotate({ "description": "Represents an estimate type enum." })) }).annotate({ "description": "Represents a project budget estimate object." })
126
+ export type EstimateWithOptionsRequest = { readonly "active"?: boolean, readonly "estimate"?: number, readonly "includeExpenses"?: boolean, readonly "resetOption"?: "WEEKLY" | "MONTHLY" | "YEARLY", readonly "type"?: "AUTO" | "MANUAL" }
127
+ export const EstimateWithOptionsRequest = Schema.Struct({ "active": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag whether to set estimate as active or not." })), "estimate": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an estimate as long.", "format": "int64" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "includeExpenses": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag whether to include billable expenses." })), "resetOption": Schema.optionalKey(Schema.Literals(["WEEKLY", "MONTHLY", "YEARLY"]).annotate({ "description": "Represents a reset option enum." })), "type": Schema.optionalKey(Schema.Literals(["AUTO", "MANUAL"]).annotate({ "description": "Represents an estimate type enum." })) }).annotate({ "description": "Represents estimate with options request object." })
128
+ export type ExpenseCategoryArchiveV1Request = { readonly "archived"?: boolean }
129
+ export const ExpenseCategoryArchiveV1Request = Schema.Struct({ "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag whether to archive the expense category or not." })) })
130
+ export type ExpenseCategoryDto = { readonly "archived"?: boolean, readonly "hasUnitPrice"?: boolean, readonly "id"?: string, readonly "name"?: string, readonly "priceInCents"?: number, readonly "unit"?: string, readonly "workspaceId"?: string }
131
+ export const ExpenseCategoryDto = Schema.Struct({ "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag that indicates whether the expense category is archived or not." })), "hasUnitPrice": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represents whether expense category has unit price or none." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense category identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense category name." })), "priceInCents": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents price in cents as integer.", "format": "int32" }).check(Schema.isInt())), "unit": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense category unit." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represents an expense category object." })
132
+ export type ExpenseCategoryDtoV1 = { readonly "archived"?: boolean, readonly "hasUnitPrice"?: boolean, readonly "id"?: string, readonly "name"?: string, readonly "priceInCents"?: number, readonly "unit"?: string, readonly "workspaceId"?: string }
133
+ export const ExpenseCategoryDtoV1 = Schema.Struct({ "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag that indicates whether the expense category is archived or not." })), "hasUnitPrice": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represents whether expense category has unit price or none." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense category identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense category name." })), "priceInCents": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents price in cents as integer.", "format": "int32" }).check(Schema.isInt())), "unit": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense category unit." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represents a list of expense categories data transfer object." })
134
+ export type ExpenseCategoryV1Request = { readonly "hasUnitPrice"?: boolean, readonly "name": string, readonly "priceInCents"?: number, readonly "unit"?: string }
135
+ export const ExpenseCategoryV1Request = Schema.Struct({ "hasUnitPrice": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag whether expense category has unit price or none." })), "name": Schema.String.annotate({ "description": "Represents a valid expense category name." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(250)), "priceInCents": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents price in cents as integer.", "format": "int32" }).check(Schema.isInt())), "unit": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a valid expense category unit." })) })
136
+ export type ExpenseDailyTotalsDtoV1 = { readonly "date"?: string, readonly "dateAsInstant"?: string, readonly "total"?: number }
137
+ export const ExpenseDailyTotalsDtoV1 = Schema.Struct({ "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-dd format." })), "dateAsInstant": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense total.", "format": "double" }).check(Schema.isFinite())) }).annotate({ "description": "Represents a list of expense daily total data transfer objects." })
138
+ export type ExpenseDtoV1 = { readonly "billable"?: boolean, readonly "categoryId"?: string, readonly "date"?: string, readonly "fileId"?: string, readonly "id"?: string, readonly "isLocked"?: boolean, readonly "locked"?: boolean, readonly "notes"?: string, readonly "projectId"?: string, readonly "quantity"?: number, readonly "taskId"?: string, readonly "total"?: number, readonly "userId"?: string, readonly "workspaceId"?: string }
139
+ export const ExpenseDtoV1 = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether expense is billable or not." })), "categoryId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents category identifier across the system." })), "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-dd format." })), "fileId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents file identifier across the system." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense identifier across the system." })), "isLocked": Schema.optionalKey(Schema.Boolean.annotate({ "writeOnly": true })), "locked": Schema.optionalKey(Schema.Boolean), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents notes for an expense." })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "quantity": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense quantity as double data type.", "format": "double" }).check(Schema.isFinite())), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense total as double data type.", "format": "double" }).check(Schema.isFinite())), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
140
+ export type ExpenseWeeklyTotalsDtoV1 = { readonly "date"?: string, readonly "total"?: number }
141
+ export const ExpenseWeeklyTotalsDtoV1 = Schema.Struct({ "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-dd format." })), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense total.", "format": "double" }).check(Schema.isFinite())) }).annotate({ "description": "Represents a list of expense weekly total data transfer objects." })
142
+ export type Feature = never
143
+ export const Feature = Schema.Never
144
+ export type FeaturePlan = never
145
+ export const FeaturePlan = Schema.Never
146
+ export type GetTimeOffRequestsV1Request = { readonly "end"?: string, readonly "page"?: number, readonly "pageSize"?: number, readonly "start"?: string, readonly "statuses"?: ReadonlyArray<"PENDING" | "APPROVED" | "REJECTED" | "ALL">, readonly "userGroups"?: ReadonlyArray<string>, readonly "users"?: ReadonlyArray<string> }
147
+ export const GetTimeOffRequestsV1Request = Schema.Struct({ "end": Schema.optionalKey(Schema.String.annotate({ "description": "Provide the end of the filtering period. Used with `start` to filter for time-off requests periods that occur (fully or partially) within this range. Both parameters must be provided for filtering to take effect. Provide end in format YYYY-MM-DDTHH:MM:SS.ssssssZ", "format": "date-time" })), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt()).check(Schema.isLessThanOrEqualTo(1000))), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(200))), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Provide the beginning of the filtering period. Used with `end` to filter for time-off requests periods that occur (fully or partially) within this range. Both parameters must be provided for filtering to take effect. Provide start in format YYYY-MM-DDTHH:MM:SS.ssssssZ", "format": "date-time" })), "statuses": Schema.optionalKey(Schema.Array(Schema.Literals(["PENDING", "APPROVED", "REJECTED", "ALL"]).annotate({ "description": "Filters time off requests by status." })).annotate({ "description": "Filters time off requests by status." }).check(Schema.isUnique())), "userGroups": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Provide the user group ids of time off requests." })).annotate({ "description": "Provide the user group ids of time off requests." }).check(Schema.isUnique())), "users": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Provide the user ids of time off requests. If empty, will return time off requests of all users (with a maximum of 5000 users)." })).annotate({ "description": "Provide the user ids of time off requests. If empty, will return time off requests of all users (with a maximum of 5000 users)." }).check(Schema.isUnique())) })
148
+ export type GetUsersRequestV1 = { readonly "accountStatuses"?: ReadonlyArray<string>, readonly "email"?: string, readonly "includeRoles"?: boolean, readonly "memberships"?: "ALL" | "NONE" | "WORKSPACE" | "PROJECT" | "USERGROUP", readonly "name"?: string, readonly "page"?: number, readonly "pageSize"?: number, readonly "projectId"?: string, readonly "roles"?: ReadonlyArray<"WORKSPACE_ADMIN" | "OWNER" | "TEAM_MANAGER" | "PROJECT_MANAGER">, readonly "sortColumn"?: "ID" | "EMAIL" | "NAME" | "NAME_LOWERCASE" | "ACCESS" | "HOURLYRATE" | "COSTRATE", readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "status"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL", readonly "userGroups"?: ReadonlyArray<string> }
149
+ export const GetUsersRequestV1 = Schema.Struct({ "accountStatuses": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of users with the corresponding account status filter. If not, this will only filter ACTIVE, PENDING_EMAIL_VERIFICATION, and NOT_REGISTERED Users." })).annotate({ "description": "If provided, you'll get a filtered list of users with the corresponding account status filter. If not, this will only filter ACTIVE, PENDING_EMAIL_VERIFICATION, and NOT_REGISTERED Users." }).check(Schema.isUnique())), "email": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of users that contain the provided string in their email address." })), "includeRoles": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If you pass along includeRoles=true, you'll get each user's detailed manager role (including projects and members for whom they're managers)" })), "memberships": Schema.optionalKey(Schema.Literals(["ALL", "NONE", "WORKSPACE", "PROJECT", "USERGROUP"]).annotate({ "description": "If provided, you'll get all users along with workspaces, groups, or projects they have access to." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of users that contain the provided string in their name." })), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a list of users that have access to the project." })), "roles": Schema.optionalKey(Schema.Array(Schema.Literals(["WORKSPACE_ADMIN", "OWNER", "TEAM_MANAGER", "PROJECT_MANAGER"]).annotate({ "description": "If provided, you'll get a filtered list of users that have any of the specified roles. Owners are counted as admins when filtering." })).annotate({ "description": "If provided, you'll get a filtered list of users that have any of the specified roles. Owners are counted as admins when filtering." }).check(Schema.isUnique())), "sortColumn": Schema.optionalKey(Schema.Literals(["ID", "EMAIL", "NAME", "NAME_LOWERCASE", "ACCESS", "HOURLYRATE", "COSTRATE"]).annotate({ "description": "Sorting criteria" })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "Sorting mode" })), "status": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"]).annotate({ "description": "If provided, you'll get a filtered list of users with the corresponding status." })), "userGroups": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "If provided, you'll get a list of users that belong to the specified user group IDs." })).annotate({ "description": "If provided, you'll get a list of users that belong to the specified user group IDs." }).check(Schema.isUnique())) })
150
+ export type HourlyRateDtoV1 = { readonly "amount"?: number, readonly "currency"?: string }
151
+ export const HourlyRateDtoV1 = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an amount as integer.", "format": "int32" }).check(Schema.isInt())), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a currency." })) }).annotate({ "description": "Represents an hourly rate object." })
152
+ export type HourlyRateRequest = { readonly "amount": number, readonly "since"?: string }
153
+ export const HourlyRateRequest = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents a cost rate amount as integer.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0)), "since": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a datetime in yyyy-MM-ddThh:mm:ssZ format." })) }).annotate({ "description": "Represents an hourly rate request object." })
154
+ export type HourlyRateRequestV1 = { readonly "amount": number, readonly "since"?: string }
155
+ export const HourlyRateRequestV1 = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents an hourly rate amount as integer.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0)), "since": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date and time in yyyy-MM-ddThh:mm:ssZ format." })) })
156
+ export type InvoiceDefaultSettingsDto = { readonly "companyId"?: string, readonly "defaultImportExpenseItemTypeId"?: string, readonly "defaultImportTimeItemTypeId"?: string, readonly "dueDays"?: number, readonly "itemType"?: string, readonly "itemTypeId"?: string, readonly "notes"?: string, readonly "subject"?: string, readonly "tax"?: number, readonly "tax2"?: number, readonly "tax2Percent"?: number, readonly "taxPercent"?: number, readonly "taxType"?: "COMPOUND" | "SIMPLE" | "NONE" }
157
+ export const InvoiceDefaultSettingsDto = Schema.Struct({ "companyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents company identifier across the system." })), "defaultImportExpenseItemTypeId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents item type identifier across the system." })), "defaultImportTimeItemTypeId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents item type identifier across the system." })), "dueDays": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice number of due days.", "format": "int32" }).check(Schema.isInt())), "itemType": Schema.optionalKey(Schema.String.annotate({ "writeOnly": true })), "itemTypeId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents item type identifier across the system." })), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice note." })), "subject": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice subject." })), "tax": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt())), "tax2": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt())), "tax2Percent": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a tax amount in percentage.", "format": "double" }).check(Schema.isFinite())), "taxPercent": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a tax amount in percentage.", "format": "double" }).check(Schema.isFinite())), "taxType": Schema.optionalKey(Schema.Literals(["COMPOUND", "SIMPLE", "NONE"]).annotate({ "description": "Represents a tax type." })) }).annotate({ "description": "Represents an invoice default settings object." })
158
+ export type InvoiceDefaultSettingsRequestV1 = { readonly "companyId"?: string, readonly "dueDays"?: number, readonly "itemTypeId"?: string, readonly "notes": string, readonly "subject": string, readonly "tax2Percent"?: number, readonly "taxPercent"?: number, readonly "taxType"?: "COMPOUND" | "SIMPLE" | "NONE" }
159
+ export const InvoiceDefaultSettingsRequestV1 = Schema.Struct({ "companyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents company identifier across the system." })), "dueDays": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice number of due days.", "format": "int32" }).check(Schema.isInt())), "itemTypeId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents item type identifier across the system." })), "notes": Schema.String.annotate({ "description": "Represents an invoice note." }), "subject": Schema.String.annotate({ "description": "Represents an invoice subject." }), "tax2Percent": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a tax amount in percentage.", "format": "double" }).check(Schema.isFinite())), "taxPercent": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a tax amount in percentage.", "format": "double" }).check(Schema.isFinite())), "taxType": Schema.optionalKey(Schema.Literals(["COMPOUND", "SIMPLE", "NONE"]).annotate({ "description": "Represents a tax type." })) }).annotate({ "description": "Represents an invoice default settings object." })
160
+ export type InvoiceDtoV1 = { readonly "amount"?: number, readonly "balance"?: number, readonly "clientId"?: string, readonly "clientName"?: string, readonly "currency"?: string, readonly "dueDate"?: string, readonly "id"?: string, readonly "issuedDate"?: string, readonly "number"?: string, readonly "paid"?: number, readonly "status"?: "UNSENT" | "SENT" | "PAID" | "PARTIALLY_PAID" | "VOID" | "OVERDUE" }
161
+ export const InvoiceDtoV1 = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice amount as long.", "format": "int64" }).check(Schema.isInt())), "balance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice balance amount as long.", "format": "int64" }).check(Schema.isInt())), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name for an invoice." })), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the currency used by the invoice." })), "dueDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice identifier across the system." })), "issuedDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "number": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice number." })), "paid": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice paid amount as long.", "format": "int64" }).check(Schema.isInt())), "status": Schema.optionalKey(Schema.Literals(["UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE"]).annotate({ "description": "Represents the status of an invoice." })) }).annotate({ "description": "Represents a list of invoices." })
162
+ export type InvoiceExportFields = { readonly "RTL"?: boolean, readonly "itemType"?: boolean, readonly "quantity"?: boolean, readonly "rtl"?: boolean, readonly "tax"?: boolean, readonly "tax2"?: boolean, readonly "unitPrice"?: boolean }
163
+ export const InvoiceExportFields = Schema.Struct({ "RTL": Schema.optionalKey(Schema.Boolean.annotate({ "writeOnly": true })), "itemType": Schema.optionalKey(Schema.Boolean), "quantity": Schema.optionalKey(Schema.Boolean), "rtl": Schema.optionalKey(Schema.Boolean), "tax": Schema.optionalKey(Schema.Boolean), "tax2": Schema.optionalKey(Schema.Boolean), "unitPrice": Schema.optionalKey(Schema.Boolean) }).annotate({ "description": "Represents an invoice export fields object." })
164
+ export type InvoiceExportFieldsRequest = { readonly "itemType"?: boolean, readonly "quantity"?: boolean, readonly "rtl"?: boolean, readonly "tax"?: boolean, readonly "tax2"?: boolean, readonly "unitPrice"?: boolean }
165
+ export const InvoiceExportFieldsRequest = Schema.Struct({ "itemType": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to export item type." })), "quantity": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to export quantity." })), "rtl": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to export RTL." })), "tax": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to export tax." })), "tax2": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to export tax2." })), "unitPrice": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to export unit price." })) }).annotate({ "description": "Represents an invoice export fields object." })
166
+ export type InvoicePaymentDtoV1 = { readonly "amount"?: number, readonly "author"?: string, readonly "date"?: string, readonly "id"?: string, readonly "note"?: string }
167
+ export const InvoicePaymentDtoV1 = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice payment amount as long.", "format": "int64" }).check(Schema.isInt())), "author": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice payment author." })), "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice payment date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice payment identifier across the system." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice payment note." })) })
168
+ export type LabelsCustomization = { readonly "amount"?: string, readonly "billFrom"?: string, readonly "billTo"?: string, readonly "description"?: string, readonly "discount"?: string, readonly "dueDate"?: string, readonly "issueDate"?: string, readonly "itemType"?: string, readonly "notes"?: string, readonly "paid"?: string, readonly "quantity"?: string, readonly "subtotal"?: string, readonly "tax"?: string, readonly "tax2"?: string, readonly "total"?: string, readonly "totalAmount"?: string, readonly "unitPrice"?: string }
169
+ export const LabelsCustomization = Schema.Struct({ "amount": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice amount." })), "billFrom": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a string an invoice is billed from." })), "billTo": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a string an invoice is billed to." })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a description of an invoice." })), "discount": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice discount amount." })), "dueDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a due date in yyyy-MM-dd format." })), "issueDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an issue date in yyyy-MM-dd format." })), "itemType": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an item type." })), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents notes for an invoice." })), "paid": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice paid amount." })), "quantity": Schema.optionalKey(Schema.String.annotate({ "description": "Represents quantity." })), "subtotal": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice subtotal." })), "tax": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice tax amount." })), "tax2": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice tax amount." })), "total": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice total amount." })), "totalAmount": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice total amount." })), "unitPrice": Schema.optionalKey(Schema.String.annotate({ "description": "Represents unit price." })) }).annotate({ "description": "Represents a label customization object." })
170
+ export type LabelsCustomizationRequest = { readonly "amount": string, readonly "billFrom": string, readonly "billTo": string, readonly "description": string, readonly "discount": string, readonly "dueDate": string, readonly "issueDate": string, readonly "itemType": string, readonly "notes": string, readonly "paid": string, readonly "quantity": string, readonly "subtotal": string, readonly "tax": string, readonly "tax2": string, readonly "total": string, readonly "totalAmountDue": string, readonly "unitPrice": string }
171
+ export const LabelsCustomizationRequest = Schema.Struct({ "amount": Schema.String.annotate({ "description": "Represents invoice amount label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "billFrom": Schema.String.annotate({ "description": "Represents invoice bill from label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "billTo": Schema.String.annotate({ "description": "Represents invoice bill to label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "description": Schema.String.annotate({ "description": "Represents invoice description label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "discount": Schema.String.annotate({ "description": "Represents invoice discount amount label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "dueDate": Schema.String.annotate({ "description": "Represents invoice due date label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "issueDate": Schema.String.annotate({ "description": "Represents invoice issue date label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "itemType": Schema.String.annotate({ "description": "Represents invoice item type label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "notes": Schema.String.annotate({ "description": "Represents invoice notes label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "paid": Schema.String.annotate({ "description": "Represents invoice paid amount label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "quantity": Schema.String.annotate({ "description": "Represents invoice quantity label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "subtotal": Schema.String.annotate({ "description": "Represents invoice subtotal label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "tax": Schema.String.annotate({ "description": "Represents invoice tax amount label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "tax2": Schema.String.annotate({ "description": "Represents invoice tax 2 amount label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "total": Schema.String.annotate({ "description": "Represents invoice total amount label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "totalAmountDue": Schema.String.annotate({ "description": "Represents invoice total amount due label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)), "unitPrice": Schema.String.annotate({ "description": "Represents invoice unit price label." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(20)) }).annotate({ "description": "Represents a label customization object." })
172
+ export type LogBinDocumentDto = { readonly "deletedAt"?: string, readonly "document"?: { }, readonly "documentCode"?: string, readonly "id"?: string }
173
+ export const LogBinDocumentDto = Schema.Struct({ "deletedAt": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "document": Schema.optionalKey(Schema.Struct({ })), "documentCode": Schema.optionalKey(Schema.String), "id": Schema.optionalKey(Schema.String) })
174
+ export type MilestoneDto = { readonly "date"?: string, readonly "id"?: string, readonly "name"?: string, readonly "projectId"?: string, readonly "workspaceId"?: string }
175
+ export const MilestoneDto = Schema.Struct({ "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents milestone identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents milestone name." })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represents a list of milestone objects." })
176
+ export type NegativeBalanceDto = { readonly "amount"?: number, readonly "period"?: string, readonly "shouldReset"?: boolean, readonly "timeUnit"?: string }
177
+ export const NegativeBalanceDto = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "format": "double" }).check(Schema.isFinite())), "period": Schema.optionalKey(Schema.String), "shouldReset": Schema.optionalKey(Schema.Boolean), "timeUnit": Schema.optionalKey(Schema.String) }).annotate({ "description": "Represents the data about negative balance including amount, time unit and period." })
178
+ export type NegativeBalanceRequest = { readonly "amount": number, readonly "period"?: "MONTH" | "YEAR", readonly "shouldReset"?: boolean }
179
+ export const NegativeBalanceRequest = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents negative balance amount.", "format": "double" }).check(Schema.isFinite()).check(Schema.isGreaterThanOrEqualTo(0)), "period": Schema.optionalKey(Schema.Literals(["MONTH", "YEAR"]).annotate({ "description": "Represents negative balance period." })), "shouldReset": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether negative balance should be reset at the end of the negative balance period." })) }).annotate({ "description": "Provide the negative balance data you would like to use for updating the policy." })
180
+ export type PatchProjectTemplateRequest = { readonly "isTemplate"?: boolean }
181
+ export const PatchProjectTemplateRequest = Schema.Struct({ "isTemplate": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is a template or not." })) })
182
+ export type Period = { readonly "end"?: string, readonly "start"?: string }
183
+ export const Period = Schema.Struct({ "end": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "start": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })) })
184
+ export type PeriodV1Request = { readonly "days"?: number, readonly "end"?: string, readonly "start"?: string }
185
+ export const PeriodV1Request = Schema.Struct({ "days": Schema.optionalKey(Schema.Number.annotate({ "description": "Provide number of days.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(999))), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Provide end date in YYYY-MM-DD format." })), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Provide start date in YYYY-MM-DD format." })) }).annotate({ "description": "Represents period of time off request including start and end date." })
186
+ export type PolicyApprovalDto = { readonly "requiresApproval"?: boolean, readonly "specificMembers"?: boolean, readonly "teamManagers"?: boolean, readonly "userIds"?: ReadonlyArray<string> }
187
+ export const PolicyApprovalDto = Schema.Struct({ "requiresApproval": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether it requires approval" })), "specificMembers": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether it requires specific members" })), "teamManagers": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether it requires team manager's approval" })), "userIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents set of user's identifier across the system" })).annotate({ "description": "Represents set of user's identifier across the system" }).check(Schema.isUnique())) }).annotate({ "description": "Represents approval settings." })
188
+ export type ProjectInfoDto = { readonly "clientId"?: string, readonly "clientName"?: string, readonly "color"?: string, readonly "id"?: string, readonly "name"?: string }
189
+ export const ProjectInfoDto = Schema.Struct({ "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name." })), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project name." })) }).annotate({ "description": "Represents a project info object." })
190
+ export type ProjectTaskTupleDto = { readonly "projectId"?: string, readonly "taskId"?: string }
191
+ export const ProjectTaskTupleDto = Schema.Struct({ "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project identifier across the system." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })) }).annotate({ "description": "Represents a list of template's projects and tasks." })
192
+ export type ProjectTaskTupleRequest = { readonly "projectId": string, readonly "taskId"?: string, readonly "type"?: string }
193
+ export const ProjectTaskTupleRequest = Schema.Struct({ "projectId": Schema.String.annotate({ "description": "Represents a project identifier across the system." }).check(Schema.isMinLength(1)), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "type": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time entry type." })) }).annotate({ "description": "Represents a list of template's projects and tasks." })
194
+ export type ProjectTotalsRequestV1 = { readonly "end": string, readonly "page"?: number, readonly "pageSize"?: number, readonly "search"?: string, readonly "start": string, readonly "statusFilter"?: "PUBLISHED" | "UNPUBLISHED" | "ALL" }
195
+ export const ProjectTotalsRequestV1 = Schema.Struct({ "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isLessThanOrEqualTo(200))), "search": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a term for searching projects and clients by name." })), "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "statusFilter": Schema.optionalKey(Schema.Literals(["PUBLISHED", "UNPUBLISHED", "ALL"]).annotate({ "description": "Filters assignments by status." })) })
196
+ export type RateDto = { readonly "amount"?: number, readonly "currency"?: string }
197
+ export const RateDto = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an amount as integer.", "format": "int32" }).check(Schema.isInt())), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a currency." })) }).annotate({ "description": "Represents cost rate object." })
198
+ export type RateDtoV1 = { readonly "amount"?: number, readonly "currency"?: string }
199
+ export const RateDtoV1 = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an amount as integer.", "format": "int32" }).check(Schema.isInt())), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a currency." })) }).annotate({ "description": "Represents cost rate object." })
200
+ export type RateWithCurrencyRequestV1 = { readonly "amount": number, readonly "currency": string, readonly "since"?: string }
201
+ export const RateWithCurrencyRequestV1 = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents an amount as integer.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0)), "currency": Schema.String.annotate({ "description": "Represents a currency." }).check(Schema.isMinLength(1)).check(Schema.isMaxLength(100)), "since": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date and time in yyyy-MM-ddThh:mm:ssZ format." })) })
202
+ export type RecurringAssignmentDto = { readonly "repeat"?: boolean, readonly "seriesId"?: string, readonly "weeks"?: number }
203
+ export const RecurringAssignmentDto = Schema.Struct({ "repeat": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is recurring or not." })), "seriesId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents series identifier." })), "weeks": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents number of weeks for thhis assignment.", "format": "int32" }).check(Schema.isInt())) }).annotate({ "description": "Represents recurring assignment object." })
204
+ export type RecurringAssignmentRequestV1 = { readonly "repeat"?: boolean, readonly "weeks": number }
205
+ export const RecurringAssignmentRequestV1 = Schema.Struct({ "repeat": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is recurring or not." })), "weeks": Schema.Number.annotate({ "description": "Indicates number of weeks for assignment.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(99)) })
206
+ export type RoleRequestV1 = { readonly "entityId": string, readonly "role": "WORKSPACE_ADMIN" | "TEAM_MANAGER" | "PROJECT_MANAGER", readonly "sourceType"?: "USER_GROUP" }
207
+ export const RoleRequestV1 = Schema.Struct({ "entityId": Schema.String.annotate({ "description": "Represents an entity identifier across the system." }).check(Schema.isMinLength(1)), "role": Schema.Literals(["WORKSPACE_ADMIN", "TEAM_MANAGER", "PROJECT_MANAGER"]).annotate({ "description": "Represents a valid role." }), "sourceType": Schema.optionalKey(Schema.Literal("USER_GROUP").annotate({ "description": "Optional field used to indicate that the target of the operation is a\nuser group, in which case the value USER_GROUP should be used, alongside a valid user group\nID for the entityId field. If omitted, a user ID should be used for the entityId field.\n" })) })
208
+ export type RoundDto = { readonly "minutes"?: string, readonly "round"?: string }
209
+ export const RoundDto = Schema.Struct({ "minutes": Schema.optionalKey(Schema.String), "round": Schema.optionalKey(Schema.String) }).annotate({ "description": "Represents a time rounding object." })
210
+ export type SchedulingExcludeDay = { readonly "date"?: string, readonly "type"?: "WEEKEND" | "HOLIDAY" | "TIME_OFF" }
211
+ export const SchedulingExcludeDay = Schema.Struct({ "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a datetimr in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "type": Schema.optionalKey(Schema.Literals(["WEEKEND", "HOLIDAY", "TIME_OFF"]).annotate({ "description": "Represents the scheduling exclude day enum." })) }).annotate({ "description": "Represents a list of excluded days objects" })
212
+ export type StatusTimeOffRequestV1Request = { readonly "note"?: string, readonly "status"?: "APPROVED" | "REJECTED" }
213
+ export const StatusTimeOffRequestV1Request = Schema.Struct({ "note": Schema.optionalKey(Schema.String.annotate({ "description": "Provide the note you would like to use for changing the time off request." })), "status": Schema.optionalKey(Schema.Literals(["APPROVED", "REJECTED"]).annotate({ "description": "Provide the status you would like to use for changing the time off request." })) })
214
+ export type StopTimeEntryRequest = { readonly "end": string }
215
+ export const StopTimeEntryRequest = Schema.Struct({ "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }) })
216
+ export type SummaryReportSettingsDtoV1 = { readonly "group": string, readonly "subgroup": string }
217
+ export const SummaryReportSettingsDtoV1 = Schema.Struct({ "group": Schema.String.check(Schema.isMinLength(1)), "subgroup": Schema.String.check(Schema.isMinLength(1)) }).annotate({ "description": "Represents a summary report settings object." })
218
+ export type TagDto = { readonly "archived": boolean, readonly "id": string, readonly "name": string, readonly "workspaceId": string }
219
+ export const TagDto = Schema.Struct({ "archived": Schema.Boolean.annotate({ "description": "Indicates whether tag is archived or not." }), "id": Schema.String.annotate({ "description": "Represents tag identifier across the system." }), "name": Schema.String.annotate({ "description": "Represents tag name." }), "workspaceId": Schema.String.annotate({ "description": "Represents workspace identifier across the system." }) }).annotate({ "description": "Represents a list of tag objects." })
220
+ export type TagDtoV1 = { readonly "archived": boolean, readonly "id": string, readonly "name": string, readonly "workspaceId": string }
221
+ export const TagDtoV1 = Schema.Struct({ "archived": Schema.Boolean.annotate({ "description": "Indicates whether a tag is archived or not." }), "id": Schema.String.annotate({ "description": "Represents tag identifier across the system." }), "name": Schema.String.annotate({ "description": "Represents tag name." }), "workspaceId": Schema.String.annotate({ "description": "Represents workspace identifier across the system." }) })
222
+ export type TagRequest = { readonly "name"?: string }
223
+ export const TagRequest = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a tag name." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))) })
224
+ export type TaskInfoDto = { readonly "id"?: string, readonly "name"?: string }
225
+ export const TaskInfoDto = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task name." })) }).annotate({ "description": "Represents a project info object." })
226
+ export type TaskRequestV1 = { readonly "assigneeId"?: string, readonly "assigneeIds"?: ReadonlyArray<string>, readonly "budgetEstimate"?: number, readonly "estimate"?: string, readonly "id"?: string, readonly "name": string, readonly "status"?: "ACTIVE" | "DONE" | "ALL", readonly "userGroupIds"?: ReadonlyArray<string> }
227
+ export const TaskRequestV1 = Schema.Struct({ "assigneeId": Schema.optionalKey(Schema.String), "assigneeIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of assignee ids for the task." })).annotate({ "description": "Represents list of assignee ids for the task." }).check(Schema.isUnique())), "budgetEstimate": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a task budget estimate as long.", "format": "int64" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task duration estimate in ISO-8601 format." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "name": Schema.String.annotate({ "description": "Represents task name." }).check(Schema.isMinLength(1)).check(Schema.isMaxLength(1000)), "status": Schema.optionalKey(Schema.Literals(["ACTIVE", "DONE", "ALL"]).annotate({ "description": "Represents task status." })), "userGroupIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of user group ids for the task." })).annotate({ "description": "Represents list of user group ids for the task." }).check(Schema.isUnique())) })
228
+ export type TaskStatus = never
229
+ export const TaskStatus = Schema.Never
230
+ export type TaxType = never
231
+ export const TaxType = Schema.Never
232
+ export type TemplateDto = { readonly "id"?: string, readonly "name"?: string, readonly "userId"?: string, readonly "workspaceId"?: string }
233
+ export const TemplateDto = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a template identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a template name." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a workspace identifier across the system." })) })
234
+ export type TemplatePatchRequest = { readonly "name": string }
235
+ export const TemplatePatchRequest = Schema.Struct({ "name": Schema.String.annotate({ "description": "Represents a template name." }).check(Schema.isMinLength(1)) })
236
+ export type TimeEntryId = { readonly "dateOfCreationFromObjectId"?: string }
237
+ export const TimeEntryId = Schema.Struct({ "dateOfCreationFromObjectId": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })) }).annotate({ "description": "Represents a list of invoiced time entry ids" })
238
+ export type TimeEstimateDto = { readonly "active"?: boolean, readonly "estimate"?: string, readonly "includeNonBillable"?: boolean, readonly "resetOption"?: "WEEKLY" | "MONTHLY" | "YEARLY", readonly "type"?: "AUTO" | "MANUAL" }
239
+ export const TimeEstimateDto = Schema.Struct({ "active": Schema.optionalKey(Schema.Boolean), "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project duration in milliseconds." })), "includeNonBillable": Schema.optionalKey(Schema.Boolean), "resetOption": Schema.optionalKey(Schema.Literals(["WEEKLY", "MONTHLY", "YEARLY"]).annotate({ "description": "Represents a reset option enum." })), "type": Schema.optionalKey(Schema.Literals(["AUTO", "MANUAL"]).annotate({ "description": "Represents an estimate type enum." })) }).annotate({ "description": "Represents a project time estimate object." })
240
+ export type TimeEstimateRequest = { readonly "active"?: boolean, readonly "estimate"?: string, readonly "includeNonBillable"?: boolean, readonly "resetOption"?: "WEEKLY" | "MONTHLY" | "YEARLY", readonly "type"?: "AUTO" | "MANUAL" }
241
+ export const TimeEstimateRequest = Schema.Struct({ "active": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag whether to include only active or inactive estimates." })), "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time duration in ISO-8601 format." })), "includeNonBillable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag whether to include non-billable expenses." })), "resetOption": Schema.optionalKey(Schema.Literals(["WEEKLY", "MONTHLY", "YEARLY"]).annotate({ "description": "Represents a reset option enum." })), "type": Schema.optionalKey(Schema.Literals(["AUTO", "MANUAL"]).annotate({ "description": "Represents an estimate type enum." })) }).annotate({ "description": "Represents project time estimate request object." })
242
+ export type TimeIntervalDto = { readonly "duration"?: string | null, readonly "end"?: string, readonly "offsetEnd"?: number, readonly "offsetStart"?: number, readonly "start": string, readonly "timeZone"?: string, readonly "zonedEnd"?: string, readonly "zonedStart"?: string }
243
+ export const TimeIntervalDto = Schema.Struct({ "duration": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null])), "end": Schema.optionalKey(Schema.Union([Schema.String.annotate({ "format": "date-time" })])), "offsetEnd": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "offsetStart": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "start": Schema.String.annotate({ "format": "date-time" }), "timeZone": Schema.optionalKey(Schema.String), "zonedEnd": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "zonedStart": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })) }).annotate({ "description": "Represents a time interval object." })
244
+ export type TimeIntervalDtoV1 = { readonly "duration"?: string | null, readonly "end"?: string | null, readonly "start"?: string }
245
+ export const TimeIntervalDtoV1 = Schema.Struct({ "duration": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents a time duration." })), "end": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents an end date in yyyy-MM-ddThh:mm:ssZ format." })), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a start date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })) }).annotate({ "description": "Represents a time interval object." })
246
+ export type TimeOffRequestStatus = { readonly "changedAt"?: string, readonly "changedByUserId"?: string, readonly "changedByUserName"?: string, readonly "changedForUserName"?: string, readonly "note"?: string, readonly "statusType"?: "PENDING" | "APPROVED" | "REJECTED" | "ALL" }
247
+ export const TimeOffRequestStatus = Schema.Struct({ "changedAt": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "changedByUserId": Schema.optionalKey(Schema.String), "changedByUserName": Schema.optionalKey(Schema.String), "changedForUserName": Schema.optionalKey(Schema.String), "note": Schema.optionalKey(Schema.String), "statusType": Schema.optionalKey(Schema.Literals(["PENDING", "APPROVED", "REJECTED", "ALL"])) }).annotate({ "description": "Represents the status the time off request." })
248
+ export type TimeRangeRequestDtoV1 = { readonly "issue-date-end"?: string, readonly "issue-date-start"?: string }
249
+ export const TimeRangeRequestDtoV1 = Schema.Struct({ "issue-date-end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-dd format. This is the lower bound of the time range." })), "issue-date-start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-dd format. This is the lower bound of the time range." })) }).annotate({ "description": "Represents a time range object. If provided, you'll get a filtered list of invoices that has issue date within the time range specified." })
250
+ export type TotalsPerDayDto = { readonly "date"?: string, readonly "totalHours"?: number }
251
+ export const TotalsPerDayDto = Schema.Struct({ "date": Schema.optionalKey(Schema.String.annotate({ "format": "date-time" })), "totalHours": Schema.optionalKey(Schema.Number.annotate({ "format": "double" }).check(Schema.isFinite())) }).annotate({ "description": "Represents total hours per day object." })
252
+ export type UpdateApprovalRequest = { readonly "note"?: string, readonly "state": "PENDING" | "APPROVED" | "WITHDRAWN_SUBMISSION" | "WITHDRAWN_APPROVAL" | "REJECTED" }
253
+ export const UpdateApprovalRequest = Schema.Struct({ "note": Schema.optionalKey(Schema.String.annotate({ "description": "Additional notes for the approval request." })), "state": Schema.Literals(["PENDING", "APPROVED", "WITHDRAWN_SUBMISSION", "WITHDRAWN_APPROVAL", "REJECTED"]).annotate({ "description": "Specifies the approval state to set." }) })
254
+ export type UpdateBalanceRequestV1 = { readonly "note"?: string, readonly "userIds": ReadonlyArray<string>, readonly "value": number }
255
+ export const UpdateBalanceRequestV1 = Schema.Struct({ "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a new balance note value." })), "userIds": Schema.Array(Schema.String.annotate({ "description": "Represents the list of users' identifiers whose balance is to be updated." })).annotate({ "description": "Represents the list of users' identifiers whose balance is to be updated." }).check(Schema.isMinLength(1)).check(Schema.isUnique()), "value": Schema.Number.annotate({ "description": "Represents a new balance value.", "format": "double" }).check(Schema.isFinite()).check(Schema.isGreaterThanOrEqualTo(-10000)).check(Schema.isLessThanOrEqualTo(10000)) })
256
+ export type UpdateClientRequestV1 = { readonly "address"?: string, readonly "archived"?: boolean, readonly "ccEmails"?: ReadonlyArray<string>, readonly "currencyId"?: string, readonly "email"?: string, readonly "name"?: string, readonly "note"?: string }
257
+ export const UpdateClientRequestV1 = Schema.Struct({ "address": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a client's address." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates if client will be archived or not." })), "ccEmails": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "format": "email" })).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3))), "currencyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a currency identifier across the system." })), "email": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a client email.", "format": "email" })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a client name." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents additional notes for the client." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))) })
258
+ export type UpdateCustomFieldRequest = { readonly "customFieldId": string, readonly "sourceType"?: "WORKSPACE" | "PROJECT" | "TIMEENTRY", readonly "value"?: { } }
259
+ export const UpdateCustomFieldRequest = Schema.Struct({ "customFieldId": Schema.String.annotate({ "description": "Represents custom field identifier across the system." }), "sourceType": Schema.optionalKey(Schema.Literals(["WORKSPACE", "PROJECT", "TIMEENTRY"]).annotate({ "description": "Represents a custom field value source type." })), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents a custom field's value." })) }).annotate({ "description": "Represents a list of value objects for user’s custom fields." })
260
+ export type UpdateCustomFieldRequestV1 = { readonly "allowedValues"?: ReadonlyArray<string>, readonly "description"?: string, readonly "name": string, readonly "onlyAdminCanEdit"?: boolean, readonly "placeholder"?: string, readonly "required"?: boolean, readonly "status"?: "INACTIVE" | "VISIBLE" | "INVISIBLE", readonly "type": "TXT" | "NUMBER" | "DROPDOWN_SINGLE" | "DROPDOWN_MULTIPLE" | "CHECKBOX" | "LINK", readonly "workspaceDefaultValue"?: { } }
261
+ export const UpdateCustomFieldRequestV1 = Schema.Struct({ "allowedValues": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of custom field's allowed values." })).annotate({ "description": "Represents a list of custom field's allowed values." })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a custom field description." })), "name": Schema.String.annotate({ "description": "Represents a custom field name." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(250)), "onlyAdminCanEdit": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether custom field is modifiable only by admin users." })), "placeholder": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a custom field placeholder value." })), "required": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether custom field is mandatory or not." })), "status": Schema.optionalKey(Schema.Literals(["INACTIVE", "VISIBLE", "INVISIBLE"]).annotate({ "description": "Represents a custom field status" })), "type": Schema.Literals(["TXT", "NUMBER", "DROPDOWN_SINGLE", "DROPDOWN_MULTIPLE", "CHECKBOX", "LINK"]).annotate({ "description": "Represents a custom field type." }), "workspaceDefaultValue": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents a custom field's default value in the workspace." })) })
262
+ export type UpdateExpenseV1Request = { readonly "amount": number, readonly "billable"?: boolean, readonly "categoryId": string, readonly "changeFields": ReadonlyArray<"USER" | "DATE" | "PROJECT" | "TASK" | "CATEGORY" | "NOTES" | "AMOUNT" | "BILLABLE" | "FILE">, readonly "date": string, readonly "file": string, readonly "notes"?: string, readonly "projectId"?: string, readonly "taskId"?: string, readonly "userId": string }
263
+ export const UpdateExpenseV1Request = Schema.Struct({ "amount": Schema.Number.annotate({ "description": "Represents an expense amount as the double data type.", "format": "double" }).check(Schema.isFinite()).check(Schema.isGreaterThanOrEqualTo(0)).check(Schema.isLessThanOrEqualTo(92233720368547760)), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether expense is billable or not." })), "categoryId": Schema.String.annotate({ "description": "Represents a category identifier across the system." }), "changeFields": Schema.Array(Schema.Literals(["USER", "DATE", "PROJECT", "TASK", "CATEGORY", "NOTES", "AMOUNT", "BILLABLE", "FILE"]).annotate({ "description": "Represents a list of expense change fields." })).annotate({ "description": "Represents a list of expense change fields." }), "date": Schema.String.annotate({ "description": "Provides a valid yyyy-MM-ddThh:mm:ssZ format date.", "format": "date-time" }), "file": Schema.String.annotate({ "format": "binary" }), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents notes for an expense." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project identifier across the system." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "userId": Schema.String.annotate({ "description": "Represents a user identifier across the system." }).check(Schema.isMinLength(1)) })
264
+ export type UpdateTagRequest = { readonly "archived"?: boolean, readonly "name"?: string }
265
+ export const UpdateTagRequest = Schema.Struct({ "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a tag will be archived or not." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a tag name." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))) })
266
+ export type UpdateTaskRequest = { readonly "assigneeId"?: string, readonly "assigneeIds"?: ReadonlyArray<string>, readonly "billable"?: boolean, readonly "budgetEstimate"?: number, readonly "estimate"?: string, readonly "name": string, readonly "status"?: "ACTIVE" | "DONE" | "ALL", readonly "userGroupIds"?: ReadonlyArray<string> }
267
+ export const UpdateTaskRequest = Schema.Struct({ "assigneeId": Schema.optionalKey(Schema.String), "assigneeIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of assignee ids for the task." })).annotate({ "description": "Represents list of assignee ids for the task." }).check(Schema.isUnique())), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a task is billable or not." })), "budgetEstimate": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a task budget estimate as integer.", "format": "int64" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task duration estimate." })), "name": Schema.String.annotate({ "description": "Represents task name." }).check(Schema.isMinLength(1)).check(Schema.isMaxLength(1000)), "status": Schema.optionalKey(Schema.Literals(["ACTIVE", "DONE", "ALL"]).annotate({ "description": "Represents task status." })), "userGroupIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of user group ids for the task." })).annotate({ "description": "Represents list of user group ids for the task." }).check(Schema.isUnique())) })
268
+ export type UpdateUserGroupRequest = { readonly "name"?: string }
269
+ export const UpdateUserGroupRequest = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user group name." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))) })
270
+ export type UpdateUserStatusRequest = { readonly "status": "ACTIVE" | "INACTIVE" }
271
+ export const UpdateUserStatusRequest = Schema.Struct({ "status": Schema.Literals(["ACTIVE", "INACTIVE"]).annotate({ "description": "Represents membership status." }) })
272
+ export type UpdateWebhookRequestV1 = { readonly "name"?: string, readonly "triggerSource": ReadonlyArray<string>, readonly "triggerSourceType": "PROJECT_ID" | "USER_ID" | "TAG_ID" | "TASK_ID" | "WORKSPACE_ID" | "ASSIGNMENT_ID" | "EXPENSE_ID", readonly "url": string, readonly "webhookEvent": "NEW_PROJECT" | "NEW_TASK" | "NEW_CLIENT" | "NEW_TIMER_STARTED" | "TIMER_STOPPED" | "TIME_ENTRY_UPDATED" | "TIME_ENTRY_DELETED" | "TIME_ENTRY_SPLIT" | "NEW_TIME_ENTRY" | "TIME_ENTRY_RESTORED" | "NEW_TAG" | "USER_DELETED_FROM_WORKSPACE" | "USER_JOINED_WORKSPACE" | "USER_DEACTIVATED_ON_WORKSPACE" | "USER_ACTIVATED_ON_WORKSPACE" | "USER_EMAIL_CHANGED" | "USER_UPDATED" | "NEW_INVOICE" | "INVOICE_UPDATED" | "NEW_APPROVAL_REQUEST" | "APPROVAL_REQUEST_STATUS_UPDATED" | "TIME_OFF_REQUESTED" | "TIME_OFF_REQUEST_UPDATED" | "TIME_OFF_REQUEST_APPROVED" | "TIME_OFF_REQUEST_REJECTED" | "TIME_OFF_REQUEST_STARTED" | "TIME_OFF_REQUEST_WITHDRAWN" | "BALANCE_UPDATED" | "TAG_UPDATED" | "TAG_DELETED" | "TASK_UPDATED" | "CLIENT_UPDATED" | "TASK_DELETED" | "CLIENT_DELETED" | "EXPENSE_RESTORED" | "ASSIGNMENT_CREATED" | "ASSIGNMENT_DELETED" | "ASSIGNMENT_PUBLISHED" | "ASSIGNMENT_UPDATED" | "EXPENSE_CREATED" | "EXPENSE_DELETED" | "EXPENSE_UPDATED" | "PROJECT_UPDATED" | "PROJECT_DELETED" | "USER_GROUP_CREATED" | "USER_GROUP_UPDATED" | "USER_GROUP_DELETED" | "USERS_INVITED_TO_WORKSPACE" | "LIMITED_USERS_ADDED_TO_WORKSPACE" | "COST_RATE_UPDATED" | "BILLABLE_RATE_UPDATED" }
273
+ export const UpdateWebhookRequestV1 = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a webhook name." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(30))), "triggerSource": Schema.Array(Schema.String.annotate({ "description": "Represents a list of trigger sources." })).annotate({ "description": "Represents a list of trigger sources." }), "triggerSourceType": Schema.Literals(["PROJECT_ID", "USER_ID", "TAG_ID", "TASK_ID", "WORKSPACE_ID", "ASSIGNMENT_ID", "EXPENSE_ID"]).annotate({ "description": "Represents a webhook event trigger source type." }), "url": Schema.String.annotate({ "description": "Represents a workspace identifier across the system." }).check(Schema.isMinLength(1)), "webhookEvent": Schema.Literals(["NEW_PROJECT", "NEW_TASK", "NEW_CLIENT", "NEW_TIMER_STARTED", "TIMER_STOPPED", "TIME_ENTRY_UPDATED", "TIME_ENTRY_DELETED", "TIME_ENTRY_SPLIT", "NEW_TIME_ENTRY", "TIME_ENTRY_RESTORED", "NEW_TAG", "USER_DELETED_FROM_WORKSPACE", "USER_JOINED_WORKSPACE", "USER_DEACTIVATED_ON_WORKSPACE", "USER_ACTIVATED_ON_WORKSPACE", "USER_EMAIL_CHANGED", "USER_UPDATED", "NEW_INVOICE", "INVOICE_UPDATED", "NEW_APPROVAL_REQUEST", "APPROVAL_REQUEST_STATUS_UPDATED", "TIME_OFF_REQUESTED", "TIME_OFF_REQUEST_UPDATED", "TIME_OFF_REQUEST_APPROVED", "TIME_OFF_REQUEST_REJECTED", "TIME_OFF_REQUEST_STARTED", "TIME_OFF_REQUEST_WITHDRAWN", "BALANCE_UPDATED", "TAG_UPDATED", "TAG_DELETED", "TASK_UPDATED", "CLIENT_UPDATED", "TASK_DELETED", "CLIENT_DELETED", "EXPENSE_RESTORED", "ASSIGNMENT_CREATED", "ASSIGNMENT_DELETED", "ASSIGNMENT_PUBLISHED", "ASSIGNMENT_UPDATED", "EXPENSE_CREATED", "EXPENSE_DELETED", "EXPENSE_UPDATED", "PROJECT_UPDATED", "PROJECT_DELETED", "USER_GROUP_CREATED", "USER_GROUP_UPDATED", "USER_GROUP_DELETED", "USERS_INVITED_TO_WORKSPACE", "LIMITED_USERS_ADDED_TO_WORKSPACE", "COST_RATE_UPDATED", "BILLABLE_RATE_UPDATED"]).annotate({ "description": "Represents a webhook event type." }) })
274
+ export type UploadFileResponseV1 = { readonly "name"?: string, readonly "url"?: string }
275
+ export const UploadFileResponseV1 = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "File name of the uploaded image" })), "url": Schema.optionalKey(Schema.String.annotate({ "description": "The URL of the uploaded image in the server" })) })
276
+ export type UpsertUserCustomFieldRequest = { readonly "customFieldId": string, readonly "value"?: { } }
277
+ export const UpsertUserCustomFieldRequest = Schema.Struct({ "customFieldId": Schema.String.annotate({ "description": "Represents custom field identifier across the system." }), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents custom field value." })) }).annotate({ "description": "Represents a list of upsert user custom field request." })
278
+ export type UpsertUserCustomFieldRequestV1 = { readonly "value"?: { } }
279
+ export const UpsertUserCustomFieldRequestV1 = Schema.Struct({ "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents custom field value." })) })
280
+ export type UserGroupIdsSchema = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ALL" | "ACTIVE" | "INACTIVE" }
281
+ export const UserGroupIdsSchema = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN"])), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents ids upon which filtering is performed." })).annotate({ "description": "Represents ids upon which filtering is performed." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ALL", "ACTIVE", "INACTIVE"]).annotate({ "description": "Represents user status." })) }).annotate({ "description": "Provide list with user group ids and corresponding status." })
282
+ export type UserGroupRequest = { readonly "name"?: string }
283
+ export const UserGroupRequest = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user group name." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))) })
284
+ export type UserGroupUserRequest = { readonly "userId": string }
285
+ export const UserGroupUserRequest = Schema.Struct({ "userId": Schema.String.annotate({ "description": "Represents a user identifier across the system." }) })
286
+ export type UserIdsSchema = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ALL" | "ACTIVE" | "INACTIVE" }
287
+ export const UserIdsSchema = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN"])), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents ids upon which filtering is performed." })).annotate({ "description": "Represents ids upon which filtering is performed." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ALL", "ACTIVE", "INACTIVE"]).annotate({ "description": "Represents user status." })) }).annotate({ "description": "Provide list with user ids and corresponding status." })
288
+ export type UserRedactedDtoV1 = { readonly "id"?: string, readonly "name"?: string }
289
+ export const UserRedactedDtoV1 = Schema.Struct({ "id": Schema.optionalKey(Schema.String), "name": Schema.optionalKey(Schema.String) }).annotate({ "description": "Represents a list of assigned team managers for this user group." })
290
+ export type VisibleZeroFieldsInvoice = never
291
+ export const VisibleZeroFieldsInvoice = Schema.Never
292
+ export type WebhookEventStatusWithLatestLogDtoV1 = { readonly "id"?: string, readonly "requestBody"?: string, readonly "respondedAt"?: string, readonly "responseBody"?: string, readonly "retryCount"?: number, readonly "status"?: string, readonly "statusCode"?: number, readonly "webhookId"?: string, readonly "webhookLogId"?: string }
293
+ export const WebhookEventStatusWithLatestLogDtoV1 = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents log identifier across the system." })), "requestBody": Schema.optionalKey(Schema.String.annotate({ "description": "Represents request body." })), "respondedAt": Schema.optionalKey(Schema.String.annotate({ "description": "Represents date and time of response." })), "responseBody": Schema.optionalKey(Schema.String.annotate({ "description": "Represents response body." })), "retryCount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents how many times we tried to deliver the webhook event.", "format": "int32" }).check(Schema.isInt())), "status": Schema.optionalKey(Schema.String.annotate({ "description": "Represents delivery status of the webhook event." })), "statusCode": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents response status code.", "format": "int32" }).check(Schema.isInt())), "webhookId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents log identifier across the system." })), "webhookLogId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents log identifier across the system." })) })
294
+ export type WebhookEventTriggerSourceType = never
295
+ export const WebhookEventTriggerSourceType = Schema.Never
296
+ export type WebhookEventType = never
297
+ export const WebhookEventType = Schema.Never
298
+ export type WebhookLogDtoV1 = { readonly "id"?: string, readonly "requestBody"?: string, readonly "respondedAt"?: string, readonly "responseBody"?: string, readonly "statusCode"?: number, readonly "webhookEventStatusId"?: string, readonly "webhookId"?: string }
299
+ export const WebhookLogDtoV1 = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents log identifier across the system." })), "requestBody": Schema.optionalKey(Schema.String.annotate({ "description": "Represents request body." })), "respondedAt": Schema.optionalKey(Schema.String.annotate({ "description": "Represents date and time of response." })), "responseBody": Schema.optionalKey(Schema.String.annotate({ "description": "Represents response body." })), "statusCode": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents response status code.", "format": "int32" }).check(Schema.isInt())), "webhookEventStatusId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents webhook event status identifier across the system." })), "webhookId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents webhook identifier across the system." })) })
300
+ export type WebhookLogSearchRequestV1 = { readonly "from"?: string, readonly "sortByNewest"?: boolean, readonly "status"?: "ALL" | "SUCCEEDED" | "FAILED", readonly "to"?: string }
301
+ export const WebhookLogSearchRequestV1 = Schema.Struct({ "from": Schema.optionalKey(Schema.String.annotate({ "description": "Represents date and time in yyyy-MM-ddThh:mm:ssZ format. If provided, results will include logs which occurred after this value.", "format": "date-time" })), "sortByNewest": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, logs will be sorted with most recent first." })), "status": Schema.optionalKey(Schema.Literals(["ALL", "SUCCEEDED", "FAILED"]).annotate({ "description": "Filters logs by status." })), "to": Schema.optionalKey(Schema.String.annotate({ "description": "Represents date and time in yyyy-MM-ddThh:mm:ssZ format. If provided, results will include logs which occurred before this value.", "format": "date-time" })) })
302
+ export type WorkspaceSubdomainDtoV1 = { readonly "enabled"?: boolean, readonly "name"?: string }
303
+ export const WorkspaceSubdomainDtoV1 = Schema.Struct({ "enabled": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether subdomain is enabled on workspace" })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents subdomain name" })) }).annotate({ "description": "Represents the workspace subdomain" })
304
+ export type AmountDto = { readonly "type"?: "EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT", readonly "value"?: number }
305
+ export const AmountDto = Schema.Struct({ "type": Schema.optionalKey(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]).annotate({ "description": "Represents amount type" })), "value": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents amount value" }).check(Schema.isFinite())) }).annotate({ "description": "List of amounts" })
306
+ export type AttendanceDto = { readonly "break"?: number, readonly "capacity"?: number, readonly "date"?: string, readonly "endTime"?: string, readonly "hasRunningEntry"?: boolean, readonly "imageUrl"?: string, readonly "overtime"?: number, readonly "remainingCapacity"?: number, readonly "startTime"?: string, readonly "timeOff"?: number, readonly "totalDuration"?: number, readonly "userId"?: string, readonly "userName"?: string }
307
+ export const AttendanceDto = Schema.Struct({ "break": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt())), "capacity": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "date": Schema.optionalKey(Schema.String), "endTime": Schema.optionalKey(Schema.String), "hasRunningEntry": Schema.optionalKey(Schema.Boolean), "imageUrl": Schema.optionalKey(Schema.String), "overtime": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt())), "remainingCapacity": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt())), "startTime": Schema.optionalKey(Schema.String), "timeOff": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt())), "totalDuration": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt())), "userId": Schema.optionalKey(Schema.String), "userName": Schema.optionalKey(Schema.String) }).annotate({ "description": "List of entities" })
308
+ export type AuditFilterV1 = { readonly "duration"?: number, readonly "durationShorter"?: boolean, readonly "withoutProject"?: boolean, readonly "withoutTask"?: boolean }
309
+ export const AuditFilterV1 = Schema.Struct({ "duration": Schema.optionalKey(Schema.Number.annotate({ "description": "Represent audit duration.", "format": "int32" }).check(Schema.isInt())), "durationShorter": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represent audit duration shorter." })), "withoutProject": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to filter without a project." })), "withoutTask": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to filter without a task." })) })
310
+ export type CompareBalanceFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
311
+ export const CompareBalanceFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents balance of work (difference between overtime and undertime) in hours, multiplied by 100. For example, if desired value is 1.5h, input should be 150." })) })
312
+ export type CompareBreakFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
313
+ export const CompareBreakFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents duration of breaks in the day in hours, multiplied by 100. For example, if desired value is 0.5h, input should be 50" })) })
314
+ export type CompareCapacityFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
315
+ export const CompareCapacityFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents daily work capacity of user in hours, multiplied by 100. For example, if desired value is 7.5h, input should be 750." })) })
316
+ export type CompareEndFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
317
+ export const CompareEndFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents end time in 24-hour notation." })) })
318
+ export type CompareOvertimeFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
319
+ export const CompareOvertimeFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents duration of overtime work (difference between work and capacity - if positive) in hours, multiplied by 100. For example, if desired value is 1.5h, input should be 150." })) })
320
+ export type CompareStartFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
321
+ export const CompareStartFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents start time in 24-hour notation." })) })
322
+ export type CompareUndertimeFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
323
+ export const CompareUndertimeFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents duration of undertime work (difference between work and capacity - if negative) in hours, multiplied by 100. For example, if desired value is 1.5h, input should be 150." })) })
324
+ export type CompareWorkFilter = { readonly "filtrationType"?: "EXACTLY" | "LARGER_THAN" | "SMALLER_THAN", readonly "value"?: string }
325
+ export const CompareWorkFilter = Schema.Struct({ "filtrationType": Schema.optionalKey(Schema.Literals(["EXACTLY", "LARGER_THAN", "SMALLER_THAN"])), "value": Schema.optionalKey(Schema.String.annotate({ "description": "Represents duration of completed work for day in hours, multiplied by 100. For example, if desired value is 7.5h, input should be 750." })) })
326
+ export type ContainsArchivedFilterV1 = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ACTIVE" | "ARCHIVED" | "ALL" }
327
+ export const ContainsArchivedFilterV1 = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Represents a contains type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Filter includes provided list of ids." })).annotate({ "description": "Filter includes provided list of ids." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ACTIVE", "ARCHIVED", "ALL"]).annotate({ "description": "Filter entities in 'contains' by their status." })) })
328
+ export type ContainsTagFilterV1 = { readonly "containedInTimeentry"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ACTIVE" | "ARCHIVED" | "ALL" }
329
+ export const ContainsTagFilterV1 = Schema.Struct({ "containedInTimeentry": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "If provided, you'll get result filtered by value of contained in time entry." })), "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Represents a contains type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Filter includes provided list of ids." })).annotate({ "description": "Filter includes provided list of ids." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ACTIVE", "ARCHIVED", "ALL"]).annotate({ "description": "Filter entities in 'contains' by their status." })) }).annotate({ "description": "Represents an object for filtering entries by tags." })
330
+ export type ContainsTaskFilterV1 = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ACTIVE" | "ARCHIVED" | "ALL" }
331
+ export const ContainsTaskFilterV1 = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Represents a contains type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Filter includes provided list of ids." })).annotate({ "description": "Filter includes provided list of ids." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ACTIVE", "ARCHIVED", "ALL"]).annotate({ "description": "Filter entities in 'contains' by their status." })) }).annotate({ "description": "Represents filter criteria for expenses associated with tasks." })
332
+ export type ContainsUsersFilterV1 = { readonly "contains"?: "CONTAINS" | "DOES_NOT_CONTAIN" | "CONTAINS_ONLY", readonly "ids"?: ReadonlyArray<string>, readonly "status"?: "ALL" | "ACTIVE_WITH_PENDING" | "ACTIVE" | "PENDING" | "INACTIVE" }
333
+ export const ContainsUsersFilterV1 = Schema.Struct({ "contains": Schema.optionalKey(Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN", "CONTAINS_ONLY"]).annotate({ "description": "Represents a contains type." })), "ids": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Filter includes provided list of ids." })).annotate({ "description": "Filter includes provided list of ids." }).check(Schema.isUnique())), "status": Schema.optionalKey(Schema.Literals(["ALL", "ACTIVE_WITH_PENDING", "ACTIVE", "PENDING", "INACTIVE"]).annotate({ "description": "Filter entities in 'contains' by their status." })) })
334
+ export type CustomFieldFilterV1 = { readonly "id"?: string, readonly "isEmpty"?: boolean, readonly "numberCondition"?: "EQUAL" | "GREATER_THAN" | "LESS_THAN", readonly "type"?: "TXT" | "NUMBER" | "DROPDOWN_SINGLE" | "DROPDOWN_MULTIPLE" | "CHECKBOX" | "LINK", readonly "value"?: { } }
335
+ export const CustomFieldFilterV1 = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a custom field identifier across the system." })), "isEmpty": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the custom field is empty." })), "numberCondition": Schema.optionalKey(Schema.Literals(["EQUAL", "GREATER_THAN", "LESS_THAN"]).annotate({ "description": "Represents a custom field number condition." })), "type": Schema.optionalKey(Schema.Literals(["TXT", "NUMBER", "DROPDOWN_SINGLE", "DROPDOWN_MULTIPLE", "CHECKBOX", "LINK"]).annotate({ "description": "Represents a type of custom field." })), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents a custom field value." })) }).annotate({ "description": "Represents list of time entry custom field filter objects." })
336
+ export type DailyTotalDto = { readonly "amount"?: number, readonly "date"?: string, readonly "duration"?: number }
337
+ export const DailyTotalDto = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.check(Schema.isFinite())), "date": Schema.optionalKey(Schema.String), "duration": Schema.optionalKey(Schema.Number.check(Schema.isFinite())) }).annotate({ "description": "Represents list of days" })
338
+ export type DetailedOptionsV1 = { readonly "totals"?: "CALCULATE" | "EXCLUDE" }
339
+ export const DetailedOptionsV1 = Schema.Struct({ "totals": Schema.optionalKey(Schema.Literals(["CALCULATE", "EXCLUDE"])) })
340
+ export type EntityName = { readonly "id"?: string, readonly "name"?: string }
341
+ export const EntityName = Schema.Struct({ "id": Schema.optionalKey(Schema.String), "name": Schema.optionalKey(Schema.String) })
342
+ export type ExpenseTotalsDtoV1 = { readonly "expensesCount"?: number, readonly "totalAmount"?: number, readonly "totalAmountBillable"?: number }
343
+ export const ExpenseTotalsDtoV1 = Schema.Struct({ "expensesCount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expenses count", "format": "int32" }).check(Schema.isInt())), "totalAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents total amount of expenses", "format": "double" }).check(Schema.isFinite())), "totalAmountBillable": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents total billable amount of expenses", "format": "double" }).check(Schema.isFinite())) }).annotate({ "description": "Represents expense totals" })
344
+ export type ReportTagDto = { readonly "id"?: string, readonly "name"?: string }
345
+ export const ReportTagDto = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents tag identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents tag name." })) }).annotate({ "description": "List of tags" })
346
+ export type ReportTimeIntervalDto = { readonly "duration"?: number, readonly "end"?: string, readonly "start"?: string }
347
+ export const ReportTimeIntervalDto = Schema.Struct({ "duration": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the duration of interval.", "format": "int32" }).check(Schema.isInt())), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the end datetime. Date is in format YYYY-MM-DDTHH:MM:SS.ssssssZ" })), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the start datetime. Date is in format YYYY-MM-DDTHH:MM:SS.ssssssZ" })) }).annotate({ "description": "Represents time interval" })
348
+ export type SummaryFilterV1 = { readonly "groups"?: ReadonlyArray<string>, readonly "sortColumn"?: "GROUP" | "DURATION" | "AMOUNT" | "EARNED" | "COST" | "PROFIT", readonly "summaryChartType"?: "BILLABILITY" | "PROJECT" }
349
+ export const SummaryFilterV1 = Schema.Struct({ "groups": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents group ids" })).annotate({ "description": "Represents group ids" })), "sortColumn": Schema.optionalKey(Schema.Literals(["GROUP", "DURATION", "AMOUNT", "EARNED", "COST", "PROFIT"]).annotate({ "description": "If provided, you'll get sorted result by provided sort column." })), "summaryChartType": Schema.optionalKey(Schema.Literals(["BILLABILITY", "PROJECT"]).annotate({ "description": "If provided, you'll get sorted result by provided summary chart type." })) }).annotate({ "description": "Represents a summary report filter." })
350
+ export type SummaryReportChartDto = { readonly "earned"?: number, readonly "id"?: string, readonly "totalAmount"?: number, readonly "totalBillableTime"?: number, readonly "totalTime"?: number }
351
+ export const SummaryReportChartDto = Schema.Struct({ "earned": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents how much is earned" }).check(Schema.isFinite())), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents summary report identifier across the system." })), "totalAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents total amount" }).check(Schema.isFinite())), "totalBillableTime": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents total billable time" }).check(Schema.isFinite())), "totalTime": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents total time" }).check(Schema.isFinite())) }).annotate({ "description": "List of summary report charts" })
352
+ export type UpdateSharedReportRequestV1 = { readonly "fixedDate"?: boolean, readonly "isPublic"?: boolean, readonly "name": string, readonly "visibleToUserGroups"?: ReadonlyArray<string>, readonly "visibleToUsers"?: ReadonlyArray<string> }
353
+ export const UpdateSharedReportRequestV1 = Schema.Struct({ "fixedDate": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the shared report has a fixed date range." })), "isPublic": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the shared report is public." })), "name": Schema.String.annotate({ "description": "Represents a shared reports name." }), "visibleToUserGroups": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Provide user groups ids to which the shared report is visible." })).annotate({ "description": "Provide user groups ids to which the shared report is visible." }).check(Schema.isUnique())), "visibleToUsers": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Provide user ids to which the shared report is visible." })).annotate({ "description": "Provide user ids to which the shared report is visible." }).check(Schema.isUnique())) })
354
+ export type UserDto = { readonly "dateFormat"?: string, readonly "email": string, readonly "id": string, readonly "name": string, readonly "timeFormat"?: string, readonly "timeZone"?: string, readonly "weekStart"?: string, readonly "activeWorkspace": string, readonly "defaultWorkspace": string, readonly "profilePicture"?: string, readonly "status": string }
355
+ export const UserDto = Schema.Struct({ "dateFormat": Schema.optionalKey(Schema.String), "email": Schema.String, "id": Schema.String, "name": Schema.String, "timeFormat": Schema.optionalKey(Schema.String), "timeZone": Schema.optionalKey(Schema.String), "weekStart": Schema.optionalKey(Schema.String), "activeWorkspace": Schema.String, "defaultWorkspace": Schema.String, "profilePicture": Schema.optionalKey(Schema.String), "status": Schema.String })
356
+ export type WeeklyFilterV1 = { readonly "group"?: string, readonly "subgroup"?: string }
357
+ export const WeeklyFilterV1 = Schema.Struct({ "group": Schema.optionalKey(Schema.String.annotate({ "description": "Weekly filter will include group identifier." })), "subgroup": Schema.optionalKey(Schema.String.annotate({ "description": "Weekly filter will include subgroup identifier." })) }).annotate({ "description": "Represents a weekly report filter." })
358
+ export type InvoicingInfo = { readonly "invoiceId"?: string, readonly "manuallyInvoiced"?: boolean }
359
+ export const InvoicingInfo = Schema.Struct({ "invoiceId": Schema.optionalKey(Schema.String), "manuallyInvoiced": Schema.optionalKey(Schema.Boolean) }).annotate({ "description": "Expense's invoicing info." })
360
+ export type AuditLogDtoV1 = { readonly "action"?: "CREATE_TIME_PERSONAL_TIMER" | "CREATE_TIME_PERSONAL_MANUAL" | "CREATE_TIME_IMPORT" | "CREATE_TIME_KIOSK" | "CREATE_TIME_FOR_OTHER" | "RESTORE_TIME" | "RESTORE_TIME_FOR_OTHER" | "UPDATE_TIME_PERSONAL" | "UPDATE_TIME_FOR_OTHER" | "DELETE_TIME_PERSONAL" | "DELETE_TIME_FOR_OTHER" | "CREATE_PROJECT" | "CREATE_PROJECT_IMPORT" | "CREATE_PROJECT_QUICKBOOKS" | "UPDATE_PROJECT" | "DELETE_PROJECT" | "CREATE_TASK" | "CREATE_TASK_IMPORT" | "UPDATE_TASK" | "DELETE_TASK" | "CREATE_CLIENT" | "CREATE_CLIENT_IMPORT" | "CREATE_CLIENT_QUICKBOOKS" | "UPDATE_CLIENT" | "DELETE_CLIENT" | "CREATE_TAG" | "CREATE_TAG_IMPORT" | "UPDATE_TAG" | "DELETE_TAG" | "CREATE_EXPENSE" | "CREATE_EXPENSE_FOR_OTHER" | "RESTORE_EXPENSE" | "RESTORE_EXPENSE_FOR_OTHER" | "UPDATE_EXPENSE" | "UPDATE_EXPENSE_FOR_OTHER" | "DELETE_EXPENSE" | "DELETE_EXPENSE_FOR_OTHER", readonly "content"?: string, readonly "previousContent"?: string, readonly "timestamp"?: string, readonly "userEmail"?: string, readonly "userId"?: string, readonly "userName"?: string, readonly "workspaceId"?: string }
361
+ export const AuditLogDtoV1 = Schema.Struct({ "action": Schema.optionalKey(Schema.Literals(["CREATE_TIME_PERSONAL_TIMER", "CREATE_TIME_PERSONAL_MANUAL", "CREATE_TIME_IMPORT", "CREATE_TIME_KIOSK", "CREATE_TIME_FOR_OTHER", "RESTORE_TIME", "RESTORE_TIME_FOR_OTHER", "UPDATE_TIME_PERSONAL", "UPDATE_TIME_FOR_OTHER", "DELETE_TIME_PERSONAL", "DELETE_TIME_FOR_OTHER", "CREATE_PROJECT", "CREATE_PROJECT_IMPORT", "CREATE_PROJECT_QUICKBOOKS", "UPDATE_PROJECT", "DELETE_PROJECT", "CREATE_TASK", "CREATE_TASK_IMPORT", "UPDATE_TASK", "DELETE_TASK", "CREATE_CLIENT", "CREATE_CLIENT_IMPORT", "CREATE_CLIENT_QUICKBOOKS", "UPDATE_CLIENT", "DELETE_CLIENT", "CREATE_TAG", "CREATE_TAG_IMPORT", "UPDATE_TAG", "DELETE_TAG", "CREATE_EXPENSE", "CREATE_EXPENSE_FOR_OTHER", "RESTORE_EXPENSE", "RESTORE_EXPENSE_FOR_OTHER", "UPDATE_EXPENSE", "UPDATE_EXPENSE_FOR_OTHER", "DELETE_EXPENSE", "DELETE_EXPENSE_FOR_OTHER"]).annotate({ "description": "Represents an audit log action type." })), "content": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the current value of the modified entity" })), "previousContent": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the previous value of the modified entity." })), "timestamp": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a timestamp of when the audit log entry was created." })), "userEmail": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the email address of the user." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user identifier across the system." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the name of the user." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a workspace identifier across the system." })) })
362
+ export type Authors = { readonly "authorIds": ReadonlyArray<string>, readonly "contains": "CONTAINS" | "DOES_NOT_CONTAIN" }
363
+ export const Authors = Schema.Struct({ "authorIds": Schema.Array(Schema.String.annotate({ "description": "Represents a set of author user ids. Include \"SYSTEM\" in this set to retrieve system related audit logs." })).annotate({ "description": "Represents a set of author user ids. Include \"SYSTEM\" in this set to retrieve system related audit logs." }).check(Schema.isUnique()), "contains": Schema.Literals(["CONTAINS", "DOES_NOT_CONTAIN"]) }).annotate({ "description": "Represents the audit log author filter." })
364
+ export type InvoiceItemDto = { readonly "amount"?: number, readonly "applyTaxes"?: ApplyTaxes, readonly "description"?: string, readonly "expenseIds"?: ReadonlyArray<string>, readonly "importType"?: "NOT_IMPORTED" | "TIME_ENTRY_IMPORT" | "EXPENSE_IMPORT", readonly "itemType"?: string, readonly "order"?: number, readonly "quantity"?: number, readonly "timeEntryIds"?: ReadonlyArray<string>, readonly "unitPrice"?: number }
365
+ export const InvoiceItemDto = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents item amount.", "format": "int64" }).check(Schema.isInt())), "applyTaxes": Schema.optionalKey(ApplyTaxes), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice item description." })), "expenseIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of imported expense ids." })).annotate({ "description": "Represents a list of imported expense ids." })), "importType": Schema.optionalKey(Schema.Literals(["NOT_IMPORTED", "TIME_ENTRY_IMPORT", "EXPENSE_IMPORT"]).annotate({ "description": "Represents the invoice item import type." })), "itemType": Schema.optionalKey(Schema.String.annotate({ "description": "Represents item type." })), "order": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an integer.", "format": "int32" }).check(Schema.isInt())), "quantity": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents item quantity.", "format": "int64" }).check(Schema.isInt())), "timeEntryIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of imported time entry ids." })).annotate({ "description": "Represents a list of imported time entry ids." })), "unitPrice": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents item unit price.", "format": "int64" }).check(Schema.isInt())) }).annotate({ "description": "Represents a list of invoice item datatransfer objects." })
366
+ export type RoleDtoV1 = { readonly "id"?: string, readonly "name"?: string, readonly "source"?: AuthorizationSourceDtoV1 }
367
+ export const RoleDtoV1 = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents role identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a role name." })), "source": Schema.optionalKey(AuthorizationSourceDtoV1) }).annotate({ "description": "Represents a role data transfer object." })
368
+ export type ImportTimeEntriesAndExpensesRequestV1 = { readonly "expenseFieldsForDetailedGroup"?: ReadonlyArray<"PROJECT" | "TASK" | "CATEGORY" | "NOTE" | "DATE" | "USER">, readonly "expensesGroupBy"?: "CATEGORY" | "PROJECT" | "USER", readonly "expensesGroupType"?: "GROUPED" | "DETAILED", readonly "from": string, readonly "importExpenses": boolean, readonly "projectFilter": ContainsArchivedFilterRequest, readonly "roundTimeEntryDuration"?: boolean, readonly "timeEntryFieldsForDetailedGroup"?: ReadonlyArray<"PROJECT" | "TASK" | "TAGS" | "DESCRIPTION" | "DATE" | "USER">, readonly "timeEntryGroupType": "SINGLE_ITEM" | "GROUPED" | "DETAILED", readonly "timeEntryPrimaryGroupBy"?: "USER" | "PROJECT" | "DATE", readonly "timeEntrySecondaryGroupBy"?: "PROJECT" | "USER" | "TASK" | "DATE" | "DESCRIPTION" | "NONE", readonly "to": string }
369
+ export const ImportTimeEntriesAndExpensesRequestV1 = Schema.Struct({ "expenseFieldsForDetailedGroup": Schema.optionalKey(Schema.Array(Schema.Literals(["PROJECT", "TASK", "CATEGORY", "NOTE", "DATE", "USER"]).annotate({ "description": "Represents a set of expense fields to include when using the DETAILED expense grouping type." })).annotate({ "description": "Represents a set of expense fields to include when using the DETAILED expense grouping type." }).check(Schema.isUnique())), "expensesGroupBy": Schema.optionalKey(Schema.Literals(["CATEGORY", "PROJECT", "USER"]).annotate({ "description": "Represents a group field when using the GROUPED expense group type." })), "expensesGroupType": Schema.optionalKey(Schema.Literals(["GROUPED", "DETAILED"]).annotate({ "description": "Represents an expense group type." })), "from": Schema.String.annotate({ "description": "Represents date and time in the yyyy-MM-ddThh:mm:ssZ format." }), "importExpenses": Schema.Boolean.annotate({ "description": "Indicates if billable expenses should be imported alongside time entries." }), "projectFilter": ContainsArchivedFilterRequest, "roundTimeEntryDuration": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates if imported time entry durations should be rounded to the nearest 15 minute interval." })), "timeEntryFieldsForDetailedGroup": Schema.optionalKey(Schema.Array(Schema.Literals(["PROJECT", "TASK", "TAGS", "DESCRIPTION", "DATE", "USER"]).annotate({ "description": "Represents a set of time entry fields to include when using DETAILED time entry grouping type." })).annotate({ "description": "Represents a set of time entry fields to include when using DETAILED time entry grouping type." }).check(Schema.isUnique())), "timeEntryGroupType": Schema.Literals(["SINGLE_ITEM", "GROUPED", "DETAILED"]).annotate({ "description": "Represents a time entry group type." }), "timeEntryPrimaryGroupBy": Schema.optionalKey(Schema.Literals(["USER", "PROJECT", "DATE"]).annotate({ "description": "Represents a primary group field when using the GROUPED time entry grouping type." })), "timeEntrySecondaryGroupBy": Schema.optionalKey(Schema.Literals(["PROJECT", "USER", "TASK", "DATE", "DESCRIPTION", "NONE"]).annotate({ "description": "Represents a secondary group field when using the GROUPED time entry grouping type. Should not have the same grouping type as the primary group field." })), "to": Schema.String.annotate({ "description": "Represents date and time in the yyyy-MM-ddThh:mm:ssZ format." }) })
370
+ export type GetUserTotalsRequestV1 = { readonly "end": string, readonly "page"?: number, readonly "pageSize"?: number, readonly "search"?: string, readonly "start": string, readonly "statusFilter"?: "PUBLISHED" | "UNPUBLISHED" | "ALL", readonly "userFilter"?: ContainsUsersFilterRequestV1, readonly "userGroupFilter"?: ContainsUserGroupFilterRequestV1 }
371
+ export const GetUserTotalsRequestV1 = Schema.Struct({ "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isLessThanOrEqualTo(200))), "search": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the keyword for searching users by name or email." })), "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "statusFilter": Schema.optionalKey(Schema.Literals(["PUBLISHED", "UNPUBLISHED", "ALL"]).annotate({ "description": "Filters assignments by status." })), "userFilter": Schema.optionalKey(ContainsUsersFilterRequestV1), "userGroupFilter": Schema.optionalKey(ContainsUserGroupFilterRequestV1) })
372
+ export type PublishAssignmentsRequestV1 = { readonly "end": string, readonly "notifyUsers"?: boolean, readonly "search"?: string, readonly "start": string, readonly "userFilter"?: ContainsUsersFilterRequestV1, readonly "userGroupFilter"?: ContainsUserGroupFilterRequestV1, readonly "viewType"?: "PROJECTS" | "TEAM" | "ALL" }
373
+ export const PublishAssignmentsRequestV1 = Schema.Struct({ "end": Schema.String.annotate({ "description": "Represents end date in yyyy-MM-ddThh:mm:ssZ format." }), "notifyUsers": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to notify users when assignment is published." })), "search": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a search string." })), "start": Schema.String.annotate({ "description": "Represents start date in yyyy-MM-ddThh:mm:ssZ format." }), "userFilter": Schema.optionalKey(ContainsUsersFilterRequestV1), "userGroupFilter": Schema.optionalKey(ContainsUserGroupFilterRequestV1), "viewType": Schema.optionalKey(Schema.Literals(["PROJECTS", "TEAM", "ALL"]).annotate({ "description": "Represents view type." })) })
374
+ export type AssignmentCreateRequestV1 = { readonly "billable"?: boolean, readonly "end": string, readonly "hoursPerDay": number, readonly "includeNonWorkingDays"?: boolean, readonly "note"?: string, readonly "projectId": string, readonly "recurringAssignment"?: CreateRecurringAssignmentRequestV1, readonly "start": string, readonly "startTime"?: string, readonly "taskId"?: string, readonly "userId": string }
375
+ export const AssignmentCreateRequestV1 = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is billable or not." })), "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format." }), "hoursPerDay": Schema.Number.annotate({ "description": "Represents assignment total hours per day.", "format": "double" }).check(Schema.isFinite()), "includeNonWorkingDays": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to include non-working days or not." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an assignment note." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(100))), "projectId": Schema.String.annotate({ "description": "Represents a project identifier across the system." }).check(Schema.isMinLength(1)), "recurringAssignment": Schema.optionalKey(CreateRecurringAssignmentRequestV1), "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." }), "startTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a start time in the hh:mm:ss format." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "userId": Schema.String.annotate({ "description": "Represents a user identifier across the system." }).check(Schema.isMinLength(1)) })
376
+ export type CustomFieldDtoV1 = { readonly "allowedValues"?: ReadonlyArray<string>, readonly "description"?: string, readonly "entityType"?: string, readonly "id"?: string, readonly "name"?: string, readonly "onlyAdminCanEdit"?: boolean, readonly "placeholder"?: string, readonly "projectDefaultValues"?: ReadonlyArray<CustomFieldDefaultValuesDtoV1>, readonly "required"?: boolean, readonly "status"?: string, readonly "type"?: string, readonly "workspaceDefaultValue"?: { }, readonly "workspaceId"?: string }
377
+ export const CustomFieldDtoV1 = Schema.Struct({ "allowedValues": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of custom field's allowed values." })).annotate({ "description": "Represents a list of custom field's allowed values." })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field description." })), "entityType": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field entity type" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field name." })), "onlyAdminCanEdit": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether custom field is modifiable only by admin users." })), "placeholder": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field placeholder value." })), "projectDefaultValues": Schema.optionalKey(Schema.Array(CustomFieldDefaultValuesDtoV1).annotate({ "description": "Represents a list of custom field default values data transfer objects." })), "required": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether custom field is mandatory or not." })), "status": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field status" })), "type": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field type." })), "workspaceDefaultValue": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents a custom field's default value in the workspace." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
378
+ export type UserCustomFieldValueDtoV1 = { readonly "customFieldId"?: string, readonly "customFieldName"?: string, readonly "customFieldType"?: CustomFieldType, readonly "userId"?: string, readonly "value"?: { } }
379
+ export const UserCustomFieldValueDtoV1 = Schema.Struct({ "customFieldId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field identifier across the system." })), "customFieldName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field name." })), "customFieldType": Schema.optionalKey(CustomFieldType), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents custom field value." })) }).annotate({ "description": "Represents a list of value objects for user’s custom fields." })
380
+ export type HolidayDtoV1 = { readonly "automaticTimeEntryCreation"?: boolean, readonly "datePeriod"?: DatePeriod, readonly "everyoneIncludingNew"?: boolean, readonly "id"?: string, readonly "name"?: string, readonly "occursAnnually"?: boolean, readonly "projectId"?: string, readonly "taskId"?: string, readonly "userGroupIds"?: ReadonlyArray<string>, readonly "userIds"?: ReadonlyArray<string>, readonly "workspaceId"?: string }
381
+ export const HolidayDtoV1 = Schema.Struct({ "automaticTimeEntryCreation": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates that time entries will be automatically created for this holiday." })), "datePeriod": Schema.optionalKey(DatePeriod), "everyoneIncludingNew": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the holiday is shown to new users." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents holiday identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the name of the holiday." })), "occursAnnually": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the holiday occurs annually." })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents projectId for automatic time entry creation." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents taskId for automatic time entry creation." })), "userGroupIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Indicates which user groups are included." })).annotate({ "description": "Indicates which user groups are included." }).check(Schema.isUnique())), "userIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Indicates which users are included." })).annotate({ "description": "Indicates which users are included." }).check(Schema.isUnique())), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
382
+ export type ApprovalRequestDtoV1 = { readonly "creator"?: ApprovalRequestCreatorDtoV1, readonly "dateRange"?: DateRangeDto, readonly "id"?: string, readonly "owner"?: ApprovalRequestOwnerDtoV1, readonly "status"?: ApprovalRequestStatusDtoV1, readonly "workspaceId"?: string }
383
+ export const ApprovalRequestDtoV1 = Schema.Struct({ "creator": Schema.optionalKey(ApprovalRequestCreatorDtoV1), "dateRange": Schema.optionalKey(DateRangeDto), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents approval request identifier across the workspace." })), "owner": Schema.optionalKey(ApprovalRequestOwnerDtoV1), "status": Schema.optionalKey(ApprovalRequestStatusDtoV1), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represents a valid approval request data transfer object." })
384
+ export type AssignmentHydratedDtoV1 = { readonly "billable"?: boolean, readonly "clientId"?: string, readonly "clientName"?: string, readonly "hoursPerDay"?: number, readonly "id"?: string, readonly "note"?: string, readonly "period"?: DateRangeDto, readonly "projectArchived"?: boolean, readonly "projectBillable"?: boolean, readonly "projectColor"?: string, readonly "projectId"?: string, readonly "projectName"?: string, readonly "startTime"?: string, readonly "taskId"?: string, readonly "taskName"?: string, readonly "userId"?: string, readonly "userName"?: string, readonly "workspaceId"?: string }
385
+ export const AssignmentHydratedDtoV1 = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is billable or not." })), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project name." })), "hoursPerDay": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents number of hours per day as double.", "format": "double" }).check(Schema.isFinite())), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents assignment identifier across the system." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents assignment note." })), "period": Schema.optionalKey(DateRangeDto), "projectArchived": Schema.optionalKey(Schema.Boolean), "projectBillable": Schema.optionalKey(Schema.Boolean), "projectColor": Schema.optionalKey(Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "projectName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project name." })), "startTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents start time in hh:mm:ss format." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "taskName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task name." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user name." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
386
+ export type AutomaticTimeEntryCreationDto = { readonly "defaultEntities"?: DefaultEntitiesDto, readonly "enabled"?: boolean }
387
+ export const AutomaticTimeEntryCreationDto = Schema.Struct({ "defaultEntities": Schema.optionalKey(DefaultEntitiesDto), "enabled": Schema.optionalKey(Schema.Boolean) }).annotate({ "description": "Represents automatic time entry creation settings." })
388
+ export type AutomaticTimeEntryCreationRequest = { readonly "defaultEntities": DefaultEntitiesRequest, readonly "enabled"?: boolean }
389
+ export const AutomaticTimeEntryCreationRequest = Schema.Struct({ "defaultEntities": DefaultEntitiesRequest, "enabled": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates that automatic time entry creation is enabled." })) }).annotate({ "description": "Provides automatic time entry creation settings." })
390
+ export type EntityCreationPermissionsDtoV1 = { readonly "whoCanCreateProjectsAndClients"?: EntityCreationPermission, readonly "whoCanCreateTags"?: EntityCreationPermission, readonly "whoCanCreateTasks"?: EntityCreationPermission }
391
+ export const EntityCreationPermissionsDtoV1 = Schema.Struct({ "whoCanCreateProjectsAndClients": Schema.optionalKey(EntityCreationPermission), "whoCanCreateTags": Schema.optionalKey(EntityCreationPermission), "whoCanCreateTasks": Schema.optionalKey(EntityCreationPermission) }).annotate({ "description": "Represents an entity creation permission object." })
392
+ export type ExpenseCategoriesWithCountDtoV1 = { readonly "categories"?: ReadonlyArray<ExpenseCategoryDtoV1>, readonly "count"?: number }
393
+ export const ExpenseCategoriesWithCountDtoV1 = Schema.Struct({ "categories": Schema.optionalKey(Schema.Array(ExpenseCategoryDtoV1).annotate({ "description": "Represents a list of expense categories data transfer object." })), "count": Schema.optionalKey(Schema.Number.annotate({ "description": "Indicates the number of expense categories returned.", "format": "int32" }).check(Schema.isInt())) })
394
+ export type MembershipRequest = { readonly "hourlyRate"?: HourlyRateRequest, readonly "membershipStatus"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL", readonly "membershipType"?: "WORKSPACE" | "PROJECT" | "USERGROUP", readonly "userId"?: string }
395
+ export const MembershipRequest = Schema.Struct({ "hourlyRate": Schema.optionalKey(HourlyRateRequest), "membershipStatus": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"]).annotate({ "description": "Represents a membership status enum." })), "membershipType": Schema.optionalKey(Schema.Literals(["WORKSPACE", "PROJECT", "USERGROUP"]).annotate({ "description": "Represents membership type enum." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })) }).annotate({ "description": "Represents a list of membership request objects." })
396
+ export type TaskRequest = { readonly "assigneeId"?: string, readonly "assigneeIds"?: ReadonlyArray<string>, readonly "billable"?: boolean, readonly "budgetEstimate"?: number, readonly "costRate"?: CostRateRequest, readonly "estimate"?: string, readonly "hourlyRate"?: HourlyRateRequest, readonly "id"?: string, readonly "name": string, readonly "projectId"?: string, readonly "status"?: string, readonly "userGroupIds"?: ReadonlyArray<string> }
397
+ export const TaskRequest = Schema.Struct({ "assigneeId": Schema.optionalKey(Schema.String), "assigneeIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of assignee ids for the task." })).annotate({ "description": "Represents list of assignee ids for the task." }).check(Schema.isUnique())), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether task is billable or not" })), "budgetEstimate": Schema.optionalKey(Schema.Number.annotate({ "format": "int64" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "costRate": Schema.optionalKey(CostRateRequest), "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task duration estimate." })), "hourlyRate": Schema.optionalKey(HourlyRateRequest), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "name": Schema.String.annotate({ "description": "Represents task name." }), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "status": Schema.optionalKey(Schema.String), "userGroupIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of user group ids for the task." })).annotate({ "description": "Represents list of user group ids for the task." }).check(Schema.isUnique())) }).annotate({ "description": "Represents a list of task request objects." })
398
+ export type UpdateProjectRequest = { readonly "archived"?: boolean, readonly "billable"?: boolean, readonly "clientId"?: string, readonly "color"?: string, readonly "costRate"?: CostRateRequestV1, readonly "hourlyRate"?: HourlyRateRequestV1, readonly "isPublic"?: boolean, readonly "name"?: string, readonly "note"?: string }
399
+ export const UpdateProjectRequest = Schema.Struct({ "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is archived or not." })), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is billable or not." })), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }).check(Schema.isPattern(new RegExp("^#(?:[0-9a-fA-F]{6}){1}$")))), "costRate": Schema.optionalKey(CostRateRequestV1), "hourlyRate": Schema.optionalKey(HourlyRateRequestV1), "isPublic": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is public or not." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project name." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(250))), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project note." }).check(Schema.isMaxLength(16384))) })
400
+ export type UserIdWithRatesRequest = { readonly "costRate"?: CostRateRequestV1, readonly "hourlyRate"?: HourlyRateRequestV1, readonly "userId": string }
401
+ export const UserIdWithRatesRequest = Schema.Struct({ "costRate": Schema.optionalKey(CostRateRequestV1), "hourlyRate": Schema.optionalKey(HourlyRateRequestV1), "userId": Schema.String.annotate({ "description": "Represents user identifier across the system." }) }).annotate({ "description": "Represents a list of users with id and rates request objects." })
402
+ export type InvoicesListDtoV1 = { readonly "invoices"?: ReadonlyArray<InvoiceDtoV1>, readonly "total"?: number }
403
+ export const InvoicesListDtoV1 = Schema.Struct({ "invoices": Schema.optionalKey(Schema.Array(InvoiceDtoV1).annotate({ "description": "Represents a list of invoices." })), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the total invoice count.", "format": "int64" }).check(Schema.isInt())) })
404
+ export type InvoiceSettingsDtoV1 = { readonly "defaults"?: InvoiceDefaultSettingsDto, readonly "exportFields"?: InvoiceExportFields, readonly "labels"?: LabelsCustomization }
405
+ export const InvoiceSettingsDtoV1 = Schema.Struct({ "defaults": Schema.optionalKey(InvoiceDefaultSettingsDto), "exportFields": Schema.optionalKey(InvoiceExportFields), "labels": Schema.optionalKey(LabelsCustomization) })
406
+ export type UpdateInvoiceSettingsRequestV1 = { readonly "defaults"?: InvoiceDefaultSettingsRequestV1, readonly "exportFields"?: InvoiceExportFieldsRequest, readonly "labels": LabelsCustomizationRequest }
407
+ export const UpdateInvoiceSettingsRequestV1 = Schema.Struct({ "defaults": Schema.optionalKey(InvoiceDefaultSettingsRequestV1), "exportFields": Schema.optionalKey(InvoiceExportFieldsRequest), "labels": LabelsCustomizationRequest })
408
+ export type PageableCollectionLogBinDocumentDto = { readonly "response"?: ReadonlyArray<LogBinDocumentDto> }
409
+ export const PageableCollectionLogBinDocumentDto = Schema.Struct({ "response": Schema.optionalKey(Schema.Array(LogBinDocumentDto)) })
410
+ export type SchedulingProjectsTotalsDtoV1 = { readonly "assignments"?: ReadonlyArray<AssignmentPerDayDto>, readonly "clientName"?: string, readonly "milestones"?: ReadonlyArray<MilestoneDto>, readonly "projectArchived"?: boolean, readonly "projectBillable"?: boolean, readonly "projectColor"?: string, readonly "projectId"?: string, readonly "projectName"?: string, readonly "taskId"?: string, readonly "taskName"?: string, readonly "totalHours"?: number, readonly "workspaceId"?: string }
411
+ export const SchedulingProjectsTotalsDtoV1 = Schema.Struct({ "assignments": Schema.optionalKey(Schema.Array(AssignmentPerDayDto).annotate({ "description": "Represents a list of assignment per day objects." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project name." })), "milestones": Schema.optionalKey(Schema.Array(MilestoneDto).annotate({ "description": "Represents a list of milestone objects." })), "projectArchived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is archived or not." })), "projectBillable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is billable or not." })), "projectColor": Schema.optionalKey(Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "projectName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project name." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "taskName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task name." })), "totalHours": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents project total hours as double.", "format": "double" }).check(Schema.isFinite())), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
412
+ export type TimeOffRequestPeriodDto = { readonly "halfDay"?: boolean, readonly "halfDayHours"?: Period, readonly "halfDayPeriod"?: string, readonly "period"?: Period }
413
+ export const TimeOffRequestPeriodDto = Schema.Struct({ "halfDay": Schema.optionalKey(Schema.Boolean), "halfDayHours": Schema.optionalKey(Period), "halfDayPeriod": Schema.optionalKey(Schema.String), "period": Schema.optionalKey(Period) }).annotate({ "description": "Represents the period the time off request." })
414
+ export type TimeOffRequestPeriodV1Request = { readonly "halfDayPeriod"?: "FIRST_HALF" | "SECOND_HALF" | "NOT_DEFINED", readonly "isHalfDay"?: boolean, readonly "period": PeriodV1Request, readonly "timeOffHalfDayPeriod"?: "FIRST_HALF" | "SECOND_HALF" | "NOT_DEFINED" }
415
+ export const TimeOffRequestPeriodV1Request = Schema.Struct({ "halfDayPeriod": Schema.optionalKey(Schema.Literals(["FIRST_HALF", "SECOND_HALF", "NOT_DEFINED"]).annotate({ "description": "Represents the half day period." })), "isHalfDay": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether time off is half day." })), "period": PeriodV1Request, "timeOffHalfDayPeriod": Schema.optionalKey(Schema.Literals(["FIRST_HALF", "SECOND_HALF", "NOT_DEFINED"])) }).annotate({ "description": "Provide the period you would like to use for creating the time off request. If `timeZone` isn't set, should be aligned with time zone for user in settings. Can be shifted from user time zone with explicit setting of `timeZone`." })
416
+ export type TemplateRequest = { readonly "name": string, readonly "projectsAndTasks": ReadonlyArray<ProjectTaskTupleRequest>, readonly "timeEntryIds"?: ReadonlyArray<string>, readonly "weekStart"?: string }
417
+ export const TemplateRequest = Schema.Struct({ "name": Schema.String.annotate({ "description": "Represents a template name." }).check(Schema.isMinLength(1)), "projectsAndTasks": Schema.Array(ProjectTaskTupleRequest).annotate({ "description": "Represents a list of template's projects and tasks." }), "timeEntryIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a set of template time entry ids." })).annotate({ "description": "Represents a set of template time entry ids." }).check(Schema.isUnique())), "weekStart": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date of the starting day of the week in the yyyy-MM-dd format.", "format": "date" })) })
418
+ export type MembershipDtoV1 = { readonly "costRate"?: RateDtoV1, readonly "hourlyRate"?: HourlyRateDtoV1, readonly "membershipStatus"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL", readonly "membershipType"?: "WORKSPACE" | "PROJECT" | "USERGROUP", readonly "targetId"?: string, readonly "userId"?: string }
419
+ export const MembershipDtoV1 = Schema.Struct({ "costRate": Schema.optionalKey(RateDtoV1), "hourlyRate": Schema.optionalKey(HourlyRateDtoV1), "membershipStatus": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"]).annotate({ "description": "Represents a membership status enum." })), "membershipType": Schema.optionalKey(Schema.Literals(["WORKSPACE", "PROJECT", "USERGROUP"]).annotate({ "description": "Represents membership type enum." })), "targetId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents target identifier across the system." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })) }).annotate({ "description": "Represents a list of membership objects." })
420
+ export type AssignmentDtoV1 = { readonly "billable"?: boolean, readonly "excludeDays"?: ReadonlyArray<SchedulingExcludeDay>, readonly "hoursPerDay"?: number, readonly "id"?: string, readonly "includeNonWorkingDays"?: boolean, readonly "note"?: string, readonly "period"?: DateRangeDto, readonly "projectId"?: string, readonly "published"?: boolean, readonly "recurring"?: RecurringAssignmentDto, readonly "startTime"?: string, readonly "taskId"?: string, readonly "userId"?: string, readonly "workspaceId"?: string }
421
+ export const AssignmentDtoV1 = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is billable or not." })), "excludeDays": Schema.optionalKey(Schema.Array(SchedulingExcludeDay).annotate({ "description": "Represents a list of excluded days objects" }).check(Schema.isUnique())), "hoursPerDay": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents assignment total hours per day.", "format": "double" }).check(Schema.isFinite())), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents assignment identifier across the system." })), "includeNonWorkingDays": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment should include non-working days or not." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents assignment note." })), "period": Schema.optionalKey(DateRangeDto), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "published": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether assignment is published or not." })), "recurring": Schema.optionalKey(RecurringAssignmentDto), "startTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents start time in hh:mm:ss format." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
422
+ export type UserSettingsDtoV1 = { readonly "alerts"?: boolean, readonly "approval"?: boolean, readonly "collapseAllProjectLists"?: boolean, readonly "dashboardPinToTop"?: boolean, readonly "dashboardSelection"?: "ME" | "TEAM", readonly "dashboardViewType"?: "PROJECT" | "BILLABILITY", readonly "dateFormat": string, readonly "groupSimilarEntriesDisabled"?: boolean, readonly "invoiceReminders"?: boolean, readonly "isCompactViewOn"?: boolean, readonly "lang"?: string, readonly "longRunning"?: boolean, readonly "multiFactorEnabled"?: boolean, readonly "myStartOfDay"?: string, readonly "onboarding"?: boolean, readonly "projectListCollapse"?: number, readonly "projectPickerTaskFilter"?: boolean, readonly "pto"?: boolean, readonly "reminders"?: boolean, readonly "scheduledReports"?: boolean, readonly "scheduling"?: boolean, readonly "sendNewsletter"?: boolean, readonly "showOnlyWorkingDays"?: boolean, readonly "summaryReportSettings"?: SummaryReportSettingsDtoV1, readonly "theme"?: "DARK" | "DEFAULT", readonly "timeFormat": "HOUR12" | "HOUR24", readonly "timeTrackingManual"?: boolean, readonly "timeZone": string, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "weeklyUpdates"?: boolean }
423
+ export const UserSettingsDtoV1 = Schema.Struct({ "alerts": Schema.optionalKey(Schema.Boolean), "approval": Schema.optionalKey(Schema.Boolean), "collapseAllProjectLists": Schema.optionalKey(Schema.Boolean), "dashboardPinToTop": Schema.optionalKey(Schema.Boolean), "dashboardSelection": Schema.optionalKey(Schema.Literals(["ME", "TEAM"])), "dashboardViewType": Schema.optionalKey(Schema.Literals(["PROJECT", "BILLABILITY"])), "dateFormat": Schema.String.annotate({ "description": "Represents a date format." }).check(Schema.isMinLength(1)), "groupSimilarEntriesDisabled": Schema.optionalKey(Schema.Boolean), "invoiceReminders": Schema.optionalKey(Schema.Boolean), "isCompactViewOn": Schema.optionalKey(Schema.Boolean), "lang": Schema.optionalKey(Schema.String), "longRunning": Schema.optionalKey(Schema.Boolean), "multiFactorEnabled": Schema.optionalKey(Schema.Boolean), "myStartOfDay": Schema.optionalKey(Schema.String), "onboarding": Schema.optionalKey(Schema.Boolean), "projectListCollapse": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "projectPickerTaskFilter": Schema.optionalKey(Schema.Boolean), "pto": Schema.optionalKey(Schema.Boolean), "reminders": Schema.optionalKey(Schema.Boolean), "scheduledReports": Schema.optionalKey(Schema.Boolean), "scheduling": Schema.optionalKey(Schema.Boolean), "sendNewsletter": Schema.optionalKey(Schema.Boolean), "showOnlyWorkingDays": Schema.optionalKey(Schema.Boolean), "summaryReportSettings": Schema.optionalKey(SummaryReportSettingsDtoV1), "theme": Schema.optionalKey(Schema.Literals(["DARK", "DEFAULT"])), "timeFormat": Schema.Literals(["HOUR12", "HOUR24"]).annotate({ "description": "Represents a time format enum." }), "timeTrackingManual": Schema.optionalKey(Schema.Boolean), "timeZone": Schema.String.annotate({ "description": "Represents a valid timezone ID" }).check(Schema.isMinLength(1)), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "weeklyUpdates": Schema.optionalKey(Schema.Boolean) }).annotate({ "description": "Represents user settings object." })
424
+ export type ExpenseHydratedDto = { readonly "approvalRequestId"?: string, readonly "approvalStatus"?: "PENDING" | "APPROVED" | "UNSUBMITTED" | "REJECTED" | "WITHDRAWN_APPROVAL" | "WITHDRAWN_SUBMISSION", readonly "billable"?: boolean, readonly "category"?: ExpenseCategoryDto, readonly "currency"?: string, readonly "date"?: string, readonly "detailedApprovalStatus"?: "PENDING" | "APPROVED" | "UNSUBMITTED" | "REJECTED" | "WITHDRAWN_APPROVAL" | "WITHDRAWN_SUBMISSION", readonly "fileId"?: string, readonly "fileName"?: string, readonly "fileUrl"?: string, readonly "id"?: string, readonly "isLocked"?: boolean, readonly "locked"?: boolean, readonly "notes"?: string, readonly "project"?: ProjectInfoDto, readonly "quantity"?: number, readonly "task"?: TaskInfoDto, readonly "total"?: number, readonly "userId"?: string, readonly "workspaceId"?: string }
425
+ export const ExpenseHydratedDto = Schema.Struct({ "approvalRequestId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents approval request identifier across the system." })), "approvalStatus": Schema.optionalKey(Schema.Literals(["PENDING", "APPROVED", "UNSUBMITTED", "REJECTED", "WITHDRAWN_APPROVAL", "WITHDRAWN_SUBMISSION"]).annotate({ "description": "Represents the approval status of the expense" })), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether expense is billable or not." })), "category": Schema.optionalKey(ExpenseCategoryDto), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a currency." })), "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-dd format." })), "detailedApprovalStatus": Schema.optionalKey(Schema.Literals(["PENDING", "APPROVED", "UNSUBMITTED", "REJECTED", "WITHDRAWN_APPROVAL", "WITHDRAWN_SUBMISSION"]).annotate({ "description": "Represents a detailed approval status of the expense" })), "fileId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents file identifier across the system." })), "fileName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents file name." })), "fileUrl": Schema.optionalKey(Schema.String.annotate({ "description": "Represents file URL." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense identifier across the system." })), "isLocked": Schema.optionalKey(Schema.Boolean.annotate({ "writeOnly": true })), "locked": Schema.optionalKey(Schema.Boolean), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents notes for an expense." })), "project": Schema.optionalKey(ProjectInfoDto), "quantity": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense quantity as double data type.", "format": "double" }).check(Schema.isFinite())), "task": Schema.optionalKey(TaskInfoDto), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense total as double data type.", "format": "double" }).check(Schema.isFinite())), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represents a list of expense hydrated data transfer objects." })
426
+ export type ExpenseHydratedDtoV1 = { readonly "billable"?: boolean, readonly "category"?: ExpenseCategoryDto, readonly "date"?: string, readonly "fileId"?: string, readonly "fileName"?: string, readonly "id"?: string, readonly "isLocked"?: boolean, readonly "locked"?: boolean, readonly "notes"?: string, readonly "project"?: ProjectInfoDto, readonly "quantity"?: number, readonly "task"?: TaskInfoDto, readonly "total"?: number, readonly "userId"?: string, readonly "workspaceId"?: string }
427
+ export const ExpenseHydratedDtoV1 = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether expense is billable or not." })), "category": Schema.optionalKey(ExpenseCategoryDto), "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a date in yyyy-MM-dd format." })), "fileId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents file identifier across the system." })), "fileName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents file name." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense identifier across the system." })), "isLocked": Schema.optionalKey(Schema.Boolean.annotate({ "writeOnly": true })), "locked": Schema.optionalKey(Schema.Boolean), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents notes for an expense." })), "project": Schema.optionalKey(ProjectInfoDto), "quantity": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense quantity as double data type.", "format": "double" }).check(Schema.isFinite())), "task": Schema.optionalKey(TaskInfoDto), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expense total as double data type.", "format": "double" }).check(Schema.isFinite())), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represent a list of hydrated expense objects." })
428
+ export type TaskDtoV1 = { readonly "assigneeId"?: string, readonly "assigneeIds"?: ReadonlyArray<string>, readonly "billable"?: boolean, readonly "budgetEstimate"?: number, readonly "costRate"?: RateDtoV1, readonly "duration"?: string, readonly "estimate"?: string, readonly "hourlyRate"?: RateDtoV1, readonly "id"?: string, readonly "name"?: string, readonly "projectId"?: string, readonly "status"?: TaskStatus, readonly "userGroupIds"?: ReadonlyArray<string> }
429
+ export const TaskDtoV1 = Schema.Struct({ "assigneeId": Schema.optionalKey(Schema.String), "assigneeIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of assignee ids for the task." })).annotate({ "description": "Represents list of assignee ids for the task." }).check(Schema.isUnique())), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a task is billable or not." })), "budgetEstimate": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents a task budget estimate as long.", "format": "int64" }).check(Schema.isInt())), "costRate": Schema.optionalKey(RateDtoV1), "duration": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task duration." })), "estimate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task duration estimate." })), "hourlyRate": Schema.optionalKey(RateDtoV1), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task name." })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "status": Schema.optionalKey(TaskStatus), "userGroupIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents list of user group ids for the task." })).annotate({ "description": "Represents list of user group ids for the task." }).check(Schema.isUnique())) })
430
+ export type UpdateInvoiceRequestV1 = { readonly "clientId"?: string, readonly "companyId"?: string, readonly "currency": string, readonly "discountPercent": number, readonly "dueDate": string, readonly "issuedDate": string, readonly "note"?: string, readonly "number": string, readonly "subject"?: string, readonly "tax2Percent": number, readonly "taxPercent": number, readonly "taxType"?: TaxType, readonly "visibleZeroFields"?: "TAX" | "TAX_2" | "DISCOUNT" }
431
+ export const UpdateInvoiceRequestV1 = Schema.Struct({ "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "companyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents company identifier across the system." })), "currency": Schema.String.annotate({ "description": "Represents the currency used by the invoice." }).check(Schema.isMinLength(1)).check(Schema.isMaxLength(100)), "discountPercent": Schema.Number.annotate({ "description": "Represents an invoice discount percent as double.", "format": "double" }).check(Schema.isFinite()), "dueDate": Schema.String.annotate({ "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "issuedDate": Schema.String.annotate({ "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice note." })), "number": Schema.String.annotate({ "description": "Represents an invoice number." }).check(Schema.isMinLength(1)), "subject": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice subject." })), "tax2Percent": Schema.Number.annotate({ "description": "Represents an invoice tax 2 percent as double.", "format": "double" }).check(Schema.isFinite()), "taxPercent": Schema.Number.annotate({ "description": "Represents an invoice tax percent as double.", "format": "double" }).check(Schema.isFinite()), "taxType": Schema.optionalKey(TaxType), "visibleZeroFields": Schema.optionalKey(Schema.Literals(["TAX", "TAX_2", "DISCOUNT"]).annotate({ "description": "Represents a list of zero value invoice fields that will be visible." })) })
432
+ export type UpdateInvoicedStatusRequest = { readonly "invoiced": boolean, readonly "timeEntryIds": ReadonlyArray<TimeEntryId> }
433
+ export const UpdateInvoicedStatusRequest = Schema.Struct({ "invoiced": Schema.Boolean.annotate({ "description": "Indicates whether time entry is invoiced or not." }), "timeEntryIds": Schema.Array(TimeEntryId).annotate({ "description": "Represents a list of invoiced time entry ids" }).check(Schema.isMinLength(1)).check(Schema.isUnique()) })
434
+ export type ProjectEstimateRequest = { readonly "budgetEstimate"?: EstimateWithOptionsRequest, readonly "estimateReset"?: EstimateResetRequest, readonly "timeEstimate"?: TimeEstimateRequest }
435
+ export const ProjectEstimateRequest = Schema.Struct({ "budgetEstimate": Schema.optionalKey(EstimateWithOptionsRequest), "estimateReset": Schema.optionalKey(EstimateResetRequest), "timeEstimate": Schema.optionalKey(TimeEstimateRequest) })
436
+ export type TimeEntryInfoDto = { readonly "approvalRequestId"?: string, readonly "billable"?: boolean, readonly "costRate"?: RateDto, readonly "customFieldValues"?: ReadonlyArray<CustomFieldValueDto>, readonly "description"?: string, readonly "hourlyRate"?: RateDto, readonly "id"?: string, readonly "isLocked"?: boolean, readonly "project"?: ProjectInfoDto, readonly "tags"?: ReadonlyArray<TagDto>, readonly "task"?: TaskInfoDto, readonly "timeInterval"?: TimeIntervalDto, readonly "type"?: "REGULAR" | "BREAK" | "HOLIDAY" | "TIME_OFF" }
437
+ export const TimeEntryInfoDto = Schema.Struct({ "approvalRequestId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents approval identifier across the system." })), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether time entry is billable or not." })), "costRate": Schema.optionalKey(RateDto), "customFieldValues": Schema.optionalKey(Schema.Array(CustomFieldValueDto).annotate({ "description": "Represents a list of custom field value objects." })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time entry description." })), "hourlyRate": Schema.optionalKey(RateDto), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time entry identifier across the system." })), "isLocked": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether time entry is locked or not." })), "project": Schema.optionalKey(ProjectInfoDto), "tags": Schema.optionalKey(Schema.Array(TagDto).annotate({ "description": "Represents a list of tag objects." })), "task": Schema.optionalKey(TaskInfoDto), "timeInterval": Schema.optionalKey(TimeIntervalDto), "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK", "HOLIDAY", "TIME_OFF"]).annotate({ "description": "Represents a time entry type enum." })) }).annotate({ "description": "Represents a list of time entry info data transfer objects." })
438
+ export type TimeEntryWithCustomFieldsDto = { readonly "billable"?: boolean, readonly "customFieldValues"?: ReadonlyArray<CustomFieldValueDto>, readonly "description"?: string, readonly "id"?: string, readonly "projectId"?: string, readonly "tagIds"?: ReadonlyArray<string>, readonly "taskId"?: string, readonly "timeInterval"?: TimeIntervalDto, readonly "type"?: "REGULAR" | "BREAK" | "HOLIDAY" | "TIME_OFF", readonly "userId"?: string, readonly "workspaceId"?: string }
439
+ export const TimeEntryWithCustomFieldsDto = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a time entry is billable." })), "customFieldValues": Schema.optionalKey(Schema.Array(CustomFieldValueDto).annotate({ "description": "Represents a list of custom field value objects." })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time entry description." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time entry identifier across the system." })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project identifier across the system." })), "tagIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of tag identifiers across the system." })).annotate({ "description": "Represents a list of tag identifiers across the system." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "timeInterval": Schema.optionalKey(TimeIntervalDto), "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK", "HOLIDAY", "TIME_OFF"]).annotate({ "description": "Represents a time entry type enum." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a workspace identifier across the system." })) }).annotate({ "description": "Represents a set of template time entries." })
440
+ export type TimeEntryDtoImplV1 = { readonly "billable": boolean, readonly "customFieldValues"?: ReadonlyArray<CustomFieldValueDtoV1>, readonly "description": string, readonly "id": string, readonly "isLocked"?: boolean, readonly "kioskId"?: string | null, readonly "projectId"?: string | null, readonly "tagIds"?: ReadonlyArray<string> | null, readonly "taskId"?: string | null, readonly "timeInterval": TimeIntervalDtoV1, readonly "type"?: "REGULAR" | "BREAK" | "HOLIDAY" | "TIME_OFF", readonly "userId": string, readonly "workspaceId": string }
441
+ export const TimeEntryDtoImplV1 = Schema.Struct({ "billable": Schema.Boolean.annotate({ "description": "Indicates whether a time entry is billable." }), "customFieldValues": Schema.optionalKey(Schema.Array(CustomFieldValueDtoV1).annotate({ "description": "Represents a list of custom field value objects." })), "description": Schema.String.annotate({ "description": "Represents time entry description." }), "id": Schema.String.annotate({ "description": "Represents time entry identifier across the system." }), "isLocked": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represents whether time entry is locked for modification." })), "kioskId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents kiosk identifier across the system." })), "projectId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents project identifier across the system." })), "tagIds": Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null]).annotate({ "description": "Represents a list of tag identifiers across the system." })), "taskId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents task identifier across the system." })), "timeInterval": TimeIntervalDtoV1, "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK", "HOLIDAY", "TIME_OFF"]).annotate({ "description": "Represents a time entry type enum." })), "userId": Schema.String.annotate({ "description": "Represents user identifier across the system." }), "workspaceId": Schema.String.annotate({ "description": "Represents workspace identifier across the system." }) })
442
+ export type TimeEntryDtoV1 = { readonly "billable"?: boolean, readonly "customFieldValues"?: ReadonlyArray<CustomFieldValueDtoV1>, readonly "description"?: string, readonly "id"?: string, readonly "isLocked"?: boolean, readonly "kioskId"?: string | null, readonly "projectId"?: string | null, readonly "tagIds"?: ReadonlyArray<string> | null, readonly "taskId"?: string | null, readonly "timeInterval"?: TimeIntervalDtoV1, readonly "type"?: "REGULAR" | "BREAK" | "HOLIDAY" | "TIME_OFF", readonly "userId"?: string, readonly "workspaceId"?: string }
443
+ export const TimeEntryDtoV1 = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a time entry is billable." })), "customFieldValues": Schema.optionalKey(Schema.Array(CustomFieldValueDtoV1).annotate({ "description": "Represents a list of custom field value objects." })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time entry description." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time entry identifier across the system." })), "isLocked": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represents whether time entry is locked for modification." })), "kioskId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents kiosk identifier across the system." })), "projectId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents project identifier across the system." })), "tagIds": Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null]).annotate({ "description": "Represents a list of tag identifiers across the system." })), "taskId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents task identifier across the system." })), "timeInterval": Schema.optionalKey(TimeIntervalDtoV1), "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK", "HOLIDAY", "TIME_OFF"]).annotate({ "description": "Represents a time entry type enum." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
444
+ export type TimeEntryWithRatesDtoV1 = { readonly "billable": boolean, readonly "costRate"?: RateDtoV1, readonly "customFieldValues"?: ReadonlyArray<CustomFieldValueDtoV1>, readonly "description": string, readonly "hourlyRate"?: RateDtoV1, readonly "id": string, readonly "isLocked"?: boolean, readonly "kioskId"?: string | null, readonly "projectId"?: string | null, readonly "tagIds"?: ReadonlyArray<string> | null, readonly "taskId"?: string | null, readonly "timeInterval": TimeIntervalDtoV1, readonly "type"?: "REGULAR" | "BREAK" | "HOLIDAY" | "TIME_OFF", readonly "userId": string, readonly "workspaceId": string }
445
+ export const TimeEntryWithRatesDtoV1 = Schema.Struct({ "billable": Schema.Boolean.annotate({ "description": "Indicates whether a time entry is billable." }), "costRate": Schema.optionalKey(RateDtoV1), "customFieldValues": Schema.optionalKey(Schema.Array(CustomFieldValueDtoV1).annotate({ "description": "Represents a list of custom field value objects." })), "description": Schema.String.annotate({ "description": "Represents time entry description." }), "hourlyRate": Schema.optionalKey(RateDtoV1), "id": Schema.String.annotate({ "description": "Represents time entry identifier across the system." }), "isLocked": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Represents whether time entry is locked for modification." })), "kioskId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents kiosk identifier across the system." })), "projectId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents project identifier across the system." })), "tagIds": Schema.optionalKey(Schema.Union([Schema.Array(Schema.String), Schema.Null]).annotate({ "description": "Represents a list of tag identifiers across the system." })), "taskId": Schema.optionalKey(Schema.Union([Schema.String, Schema.Null]).annotate({ "description": "Represents task identifier across the system." })), "timeInterval": TimeIntervalDtoV1, "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK", "HOLIDAY", "TIME_OFF"]).annotate({ "description": "Represents a time entry type enum." })), "userId": Schema.String.annotate({ "description": "Represents user identifier across the system." }), "workspaceId": Schema.String.annotate({ "description": "Represents workspace identifier across the system." }) })
446
+ export type InvoiceFilterRequestV1 = { readonly "clients"?: ContainsArchivedFilterRequest, readonly "companies"?: BaseFilterRequest, readonly "exactAmount"?: number, readonly "exactBalance"?: number, readonly "greaterThanAmount"?: number, readonly "greaterThanBalance"?: number, readonly "invoiceNumber"?: string, readonly "issueDate"?: TimeRangeRequestDtoV1, readonly "lessThanAmount"?: number, readonly "lessThanBalance"?: number, readonly "page"?: number, readonly "pageSize"?: number, readonly "sortColumn"?: "ID" | "CLIENT" | "DUE_ON" | "ISSUE_DATE" | "AMOUNT" | "BALANCE", readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "statuses"?: ReadonlyArray<"UNSENT" | "SENT" | "PAID" | "PARTIALLY_PAID" | "VOID" | "OVERDUE">, readonly "strictSearch"?: boolean }
447
+ export const InvoiceFilterRequestV1 = Schema.Struct({ "clients": Schema.optionalKey(ContainsArchivedFilterRequest), "companies": Schema.optionalKey(BaseFilterRequest), "exactAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice amount. If provided, you'll get a filtered list of invoices that has the equal amount as specified.", "format": "int64" }).check(Schema.isInt())), "exactBalance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice balance. If provided, you'll get a filtered list of invoices that has the equal balance as specified.", "format": "int64" }).check(Schema.isInt())), "greaterThanAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice amount. If provided, you'll get a filtered list of invoices that has amount greater than specified.", "format": "int64" }).check(Schema.isInt())), "greaterThanBalance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice balance. If provided, you'll get a filtered list of invoices that has balance greater than specified.", "format": "int64" }).check(Schema.isInt())), "invoiceNumber": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of invoices that contain the provided string in their invoice number." })), "issueDate": Schema.optionalKey(TimeRangeRequestDtoV1), "lessThanAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice amount. If provided, you'll get a filtered list of invoices that has amount less than specified.", "format": "int64" }).check(Schema.isInt())), "lessThanBalance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice balance. If provided, you'll get a filtered list of invoices that has balance less than specified.", "format": "int64" }).check(Schema.isInt())), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt())), "sortColumn": Schema.optionalKey(Schema.Literals(["ID", "CLIENT", "DUE_ON", "ISSUE_DATE", "AMOUNT", "BALANCE"]).annotate({ "description": "Represents the column name to be used as sorting criteria." })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "Represents the sorting order." })), "statuses": Schema.optionalKey(Schema.Array(Schema.Literals(["UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE"]).annotate({ "description": "Represents a list of invoice statuses. If provided, you'll get a filtered list of invoices that matches any of the invoice status provided." })).annotate({ "description": "Represents a list of invoice statuses. If provided, you'll get a filtered list of invoices that matches any of the invoice status provided." })), "strictSearch": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to toggle on/off strict search mode. When set to true, search by invoice number only will return invoices whose number exactly matches the string value given for the 'invoiceNumber' parameter. When set to false, results will also include invoices whose number contain the string value, but could be longer than the string value itself. For example, if there is an invoice with the number '123456', and the search value is '123', setting strict-name-search to true will not return that invoice in the results, whereas setting it to false will." })) })
448
+ export type SchedulingUsersTotalsDtoV1 = { readonly "capacityPerDay"?: number, readonly "totalHoursPerDay"?: ReadonlyArray<TotalsPerDayDto>, readonly "userId"?: string, readonly "userImage"?: string, readonly "userName"?: string, readonly "userStatus"?: string, readonly "workingDays"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "workspaceId"?: string }
449
+ export const SchedulingUsersTotalsDtoV1 = Schema.Struct({ "capacityPerDay": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents capacity per day in seconds. For a 7hr work day, value is 25200.", "format": "double" }).check(Schema.isFinite())), "totalHoursPerDay": Schema.optionalKey(Schema.Array(TotalsPerDayDto).annotate({ "description": "Represents total hours per day object." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "userImage": Schema.optionalKey(Schema.String.annotate({ "description": "Represents url path to user image." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user name." })), "userStatus": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user status." })), "workingDays": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents list of days of the week." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
450
+ export type CreateTimeEntryRequest = { readonly "billable"?: boolean, readonly "customAttributes"?: ReadonlyArray<CreateCustomAttributeRequest>, readonly "customFields"?: ReadonlyArray<UpdateCustomFieldRequest>, readonly "description": string, readonly "end"?: string, readonly "projectId"?: string, readonly "start": string, readonly "tagIds"?: ReadonlyArray<string>, readonly "taskId"?: string, readonly "type"?: "REGULAR" | "BREAK" }
451
+ export const CreateTimeEntryRequest = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a time entry is billable or not." })), "customAttributes": Schema.optionalKey(Schema.Array(CreateCustomAttributeRequest).annotate({ "description": "Represents a list of create custom field request objects." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(10))), "customFields": Schema.optionalKey(Schema.Array(UpdateCustomFieldRequest).annotate({ "description": "Represents a list of value objects for user’s custom fields." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(50))), "description": Schema.String.annotate({ "description": "Represents time entry description." }).check(Schema.isMaxLength(3000)), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an end date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project identifier across the system." })), "start": Schema.String.annotate({ "description": "Represents a start date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "tagIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of tag ids." })).annotate({ "description": "Represents a list of tag ids." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK"]).annotate({ "description": "Valid time entry type." })) })
452
+ export type UpdateTimeEntryBulkRequest = { readonly "billable"?: boolean, readonly "customFields"?: ReadonlyArray<UpdateCustomFieldRequest>, readonly "description"?: string, readonly "end"?: string, readonly "id": string, readonly "projectId"?: string, readonly "start"?: string, readonly "tagIds"?: ReadonlyArray<string>, readonly "taskId"?: string, readonly "type"?: "REGULAR" | "BREAK" }
453
+ export const UpdateTimeEntryBulkRequest = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a time entry is billable or not." })), "customFields": Schema.optionalKey(Schema.Array(UpdateCustomFieldRequest).check(Schema.isMinLength(0)).check(Schema.isMaxLength(50))), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time entry description." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "id": Schema.String.annotate({ "description": "Represents a time entry identifier across the system." }).check(Schema.isMinLength(1)), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project identifier across the system." })), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "tagIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of tag ids." })).annotate({ "description": "Represents a list of tag ids." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK"])) })
454
+ export type UpdateTimeEntryRequest = { readonly "billable"?: boolean, readonly "customFields"?: ReadonlyArray<UpdateCustomFieldRequest>, readonly "description"?: string, readonly "end"?: string, readonly "projectId"?: string, readonly "start": string, readonly "tagIds"?: ReadonlyArray<string>, readonly "taskId"?: string, readonly "type"?: "REGULAR" | "BREAK" }
455
+ export const UpdateTimeEntryRequest = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether a time entry is billable or not." })), "customFields": Schema.optionalKey(Schema.Array(UpdateCustomFieldRequest).annotate({ "description": "Represents a list of value objects for user’s custom fields." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(50))), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time entry description." }).check(Schema.isMinLength(0)).check(Schema.isMaxLength(3000))), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an end date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project identifier across the system." })), "start": Schema.String.annotate({ "description": "Represents a start date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" }), "tagIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of tag ids." })).annotate({ "description": "Represents a list of tag ids." })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task identifier across the system." })), "type": Schema.optionalKey(Schema.Literals(["REGULAR", "BREAK"])) })
456
+ export type LimitedUserRequest = { readonly "costRate"?: number, readonly "hourlyRate"?: number, readonly "name": string, readonly "userCustomFields"?: ReadonlyArray<UpsertUserCustomFieldRequest>, readonly "userGroups"?: ReadonlyArray<string>, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "workCapacity"?: string, readonly "workingDays"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY" }
457
+ export const LimitedUserRequest = Schema.Struct({ "costRate": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents cost rate of user. Example: 12300 for 123", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "hourlyRate": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents hourly rate of user. Example: 12300 for 123", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "name": Schema.String.annotate({ "description": "Represents name of the user." }).check(Schema.isMinLength(1)), "userCustomFields": Schema.optionalKey(Schema.Array(UpsertUserCustomFieldRequest).annotate({ "description": "Represents a list of upsert user custom field request." })), "userGroups": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents the user group names of the user" }).check(Schema.isMinLength(1))).annotate({ "description": "Represents the user group names of the user" }).check(Schema.isUnique())), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "workCapacity": Schema.optionalKey(Schema.String.annotate({ "description": "Represents work capacity as a time duration in the ISO-8601 format." })), "workingDays": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a list of days of the week." })) })
458
+ export type MemberProfileFullRequestV1 = { readonly "imageUrl"?: string, readonly "name"?: string, readonly "removeProfileImage"?: boolean, readonly "userCustomFields"?: ReadonlyArray<UpsertUserCustomFieldRequest>, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "workCapacity"?: string, readonly "workingDays"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY" }
459
+ export const MemberProfileFullRequestV1 = Schema.Struct({ "imageUrl": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an image url. A field that can only be updated for limited users." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "This body field is deprecated and can only be updated for limited users. Represents name of the user and can be changed on the CAKE.com Account profile page." }).check(Schema.isMinLength(1)).check(Schema.isMaxLength(100))), "removeProfileImage": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether to remove profile image or not. A field that can only be updated for limited users." })), "userCustomFields": Schema.optionalKey(Schema.Array(UpsertUserCustomFieldRequest).annotate({ "description": "Represents a list of upsert user custom field objects." })), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "workCapacity": Schema.optionalKey(Schema.String.annotate({ "description": "Represents work capacity as a time duration in the ISO-8601 format. For example, for a 7hr work day, input should be PT7H." })), "workingDays": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a list of days of the week." })) })
460
+ export type AddUsersToProjectRequestV1 = { readonly "remove"?: boolean, readonly "userGroups"?: UserGroupIdsSchema, readonly "userIds"?: ReadonlyArray<string> }
461
+ export const AddUsersToProjectRequestV1 = Schema.Struct({ "remove": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Setting this flag to 'true' will remove the given users from the project." })), "userGroups": Schema.optionalKey(UserGroupIdsSchema), "userIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents array of user ids which should be added/removed." })).annotate({ "description": "Represents array of user ids which should be added/removed." })) })
462
+ export type UserGroupDtoV1 = { readonly "id"?: string, readonly "name"?: string, readonly "teamManagers"?: ReadonlyArray<UserRedactedDtoV1>, readonly "userIds"?: ReadonlyArray<string>, readonly "workspaceId"?: string }
463
+ export const UserGroupDtoV1 = Schema.Struct({ "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user group identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user group name." })), "teamManagers": Schema.optionalKey(Schema.Array(UserRedactedDtoV1).annotate({ "description": "Represents a list of assigned team managers for this user group." })), "userIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of users' identifiers across the system." })).annotate({ "description": "Represents a list of users' identifiers across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a workspace identifier across the system." })) })
464
+ export type InvoiceInfoV1 = { readonly "amount"?: number, readonly "balance"?: number, readonly "billFrom"?: string, readonly "clientId"?: string, readonly "clientName"?: string, readonly "currency"?: string, readonly "daysOverdue"?: number, readonly "dueDate"?: string, readonly "id"?: string, readonly "issuedDate"?: string, readonly "number"?: string, readonly "paid"?: number, readonly "status"?: "UNSENT" | "SENT" | "PAID" | "PARTIALLY_PAID" | "VOID" | "OVERDUE", readonly "visibleZeroFields"?: VisibleZeroFieldsInvoice }
465
+ export const InvoiceInfoV1 = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice amount as long.", "format": "int64" }).check(Schema.isInt())), "balance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice balance amount as long.", "format": "int64" }).check(Schema.isInt())), "billFrom": Schema.optionalKey(Schema.String.annotate({ "description": "Represents to whom an invoice is billed from." })), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name for an invoice." })), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the currency used by the invoice." })), "daysOverdue": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the number of days an invoice is overdue.", "format": "int64" }).check(Schema.isInt())), "dueDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice identifier across the system." })), "issuedDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "number": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice number." })), "paid": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice paid amount as long.", "format": "int64" }).check(Schema.isInt())), "status": Schema.optionalKey(Schema.Literals(["UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE"]).annotate({ "description": "Represents the status of an invoice." })), "visibleZeroFields": Schema.optionalKey(VisibleZeroFieldsInvoice) }).annotate({ "description": "Represents a list of invoice info." })
466
+ export type WebhookDtoV1 = { readonly "authToken"?: string, readonly "deliveryEnabled"?: boolean, readonly "enabled"?: boolean, readonly "id"?: string, readonly "name"?: string, readonly "planEnabled"?: boolean, readonly "triggerSource"?: ReadonlyArray<string>, readonly "triggerSourceType"?: WebhookEventTriggerSourceType, readonly "url"?: string, readonly "userId"?: string, readonly "webhookEvent"?: WebhookEventType, readonly "workspaceId"?: string }
467
+ export const WebhookDtoV1 = Schema.Struct({ "authToken": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an authentication token." })), "deliveryEnabled": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether webhook delivery is enabled or not. It can be disabled if delivery failed for too many times." })), "enabled": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether webhook is enabled or not." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents webhook identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents webhook name." })), "planEnabled": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether webhook is supported by current plan. It can be disabled if number of webhooks exceeds plan limit or if the feature is not supported on current plan." })), "triggerSource": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents a list of trigger sources." })).annotate({ "description": "Represents a list of trigger sources." })), "triggerSourceType": Schema.optionalKey(WebhookEventTriggerSourceType), "url": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "webhookEvent": Schema.optionalKey(WebhookEventType), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
468
+ export type TimeEntryReportTotals = { readonly "amounts"?: ReadonlyArray<AmountDto>, readonly "entriesCount"?: number, readonly "id"?: string, readonly "totalBillableTime"?: number, readonly "totalTime"?: number }
469
+ export const TimeEntryReportTotals = Schema.Struct({ "amounts": Schema.optionalKey(Schema.Array(AmountDto).annotate({ "description": "List of amounts" })), "entriesCount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents entries count", "format": "int32" }).check(Schema.isInt())), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time entry report identifier across the system." })), "totalBillableTime": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents total billable time" }).check(Schema.isFinite())), "totalTime": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents total time" }).check(Schema.isFinite())) }).annotate({ "description": "List of totals" })
470
+ export type AttendanceFilterV1 = { readonly "balanceFilters"?: ReadonlyArray<CompareBalanceFilter>, readonly "breakFilters"?: ReadonlyArray<CompareBreakFilter>, readonly "capacityFilters"?: ReadonlyArray<CompareCapacityFilter>, readonly "endFilters"?: ReadonlyArray<CompareEndFilter>, readonly "groups"?: ReadonlyArray<string>, readonly "hasTimeOff"?: boolean, readonly "overtimeFilters"?: ReadonlyArray<CompareOvertimeFilter>, readonly "page"?: number, readonly "pageSize"?: number, readonly "sortColumn"?: "GROUP" | "USER" | "DATE" | "START" | "END" | "BREAK" | "WORK" | "CAPACITY" | "OVERTIME" | "UNDERTIME" | "BALANCE" | "TIME_OFF", readonly "startFilters"?: ReadonlyArray<CompareStartFilter>, readonly "undertimeFilters"?: ReadonlyArray<CompareUndertimeFilter>, readonly "workFilters"?: ReadonlyArray<CompareWorkFilter> }
471
+ export const AttendanceFilterV1 = Schema.Struct({ "balanceFilters": Schema.optionalKey(Schema.Array(CompareBalanceFilter)), "breakFilters": Schema.optionalKey(Schema.Array(CompareBreakFilter)), "capacityFilters": Schema.optionalKey(Schema.Array(CompareCapacityFilter)), "endFilters": Schema.optionalKey(Schema.Array(CompareEndFilter)), "groups": Schema.optionalKey(Schema.Array(Schema.String).annotate({ "writeOnly": true })), "hasTimeOff": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, report will include time off hours." })), "overtimeFilters": Schema.optionalKey(Schema.Array(CompareOvertimeFilter)), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Specifies page number.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Specifies page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "sortColumn": Schema.optionalKey(Schema.Literals(["GROUP", "USER", "DATE", "START", "END", "BREAK", "WORK", "CAPACITY", "OVERTIME", "UNDERTIME", "BALANCE", "TIME_OFF"])), "startFilters": Schema.optionalKey(Schema.Array(CompareStartFilter)), "undertimeFilters": Schema.optionalKey(Schema.Array(CompareUndertimeFilter)), "workFilters": Schema.optionalKey(Schema.Array(CompareWorkFilter)) }).annotate({ "description": "Represents an attendance report filter." })
472
+ export type ExpenseReportFilterV1 = { readonly "approvalState"?: "APPROVED" | "UNAPPROVED" | "ALL", readonly "billable"?: boolean, readonly "categories"?: ContainsArchivedFilterV1, readonly "clients"?: ContainsArchivedFilterV1, readonly "currency"?: ContainsArchivedFilterV1, readonly "dateRangeEnd": string, readonly "dateRangeStart": string, readonly "dateRangeType"?: "ABSOLUTE" | "TODAY" | "YESTERDAY" | "THIS_WEEK" | "LAST_WEEK" | "PAST_TWO_WEEKS" | "THIS_MONTH" | "LAST_MONTH" | "THIS_YEAR" | "LAST_YEAR", readonly "exportType"?: "JSON" | "JSON_V1" | "PDF" | "CSV" | "XLSX" | "ZIP", readonly "invoicingState"?: "INVOICED" | "UNINVOICED" | "ALL", readonly "note"?: string, readonly "page"?: number, readonly "pageSize"?: number, readonly "projects"?: ContainsArchivedFilterV1, readonly "sortColumn"?: "ID" | "PROJECT" | "USER" | "CATEGORY" | "DATE" | "AMOUNT", readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "tasks"?: ContainsTaskFilterV1, readonly "timeZone"?: string, readonly "userGroups"?: ContainsUsersFilterV1, readonly "userLocale"?: string, readonly "users"?: ContainsUsersFilterV1, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "withoutNote"?: boolean, readonly "zoomLevel"?: "WEEK" | "MONTH" | "YEAR" }
473
+ export const ExpenseReportFilterV1 = Schema.Struct({ "approvalState": Schema.optionalKey(Schema.Literals(["APPROVED", "UNAPPROVED", "ALL"]).annotate({ "description": "Represents an approval state" })), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether report is billable" })), "categories": Schema.optionalKey(ContainsArchivedFilterV1), "clients": Schema.optionalKey(ContainsArchivedFilterV1), "currency": Schema.optionalKey(ContainsArchivedFilterV1), "dateRangeEnd": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeStart": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeType": Schema.optionalKey(Schema.Literals(["ABSOLUTE", "TODAY", "YESTERDAY", "THIS_WEEK", "LAST_WEEK", "PAST_TWO_WEEKS", "THIS_MONTH", "LAST_MONTH", "THIS_YEAR", "LAST_YEAR"]).annotate({ "description": "Represents date range type of expense report" })), "exportType": Schema.optionalKey(Schema.Literals(["JSON", "JSON_V1", "PDF", "CSV", "XLSX", "ZIP"]).annotate({ "description": "Represents an export type" })), "invoicingState": Schema.optionalKey(Schema.Literals(["INVOICED", "UNINVOICED", "ALL"]).annotate({ "description": "Represents an invoicing state" })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a search term for filtering report entries by note" })), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "projects": Schema.optionalKey(ContainsArchivedFilterV1), "sortColumn": Schema.optionalKey(Schema.Literals(["ID", "PROJECT", "USER", "CATEGORY", "DATE", "AMOUNT"]).annotate({ "description": "Represents expenses sort column" })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "Represents a sort order" })), "tasks": Schema.optionalKey(ContainsTaskFilterV1), "timeZone": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time zone" })), "userGroups": Schema.optionalKey(ContainsUsersFilterV1), "userLocale": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user locale" })), "users": Schema.optionalKey(ContainsUsersFilterV1), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents week start" })), "withoutNote": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to 'true', report will only include entries with empty note" })), "zoomLevel": Schema.optionalKey(Schema.Literals(["WEEK", "MONTH", "YEAR"]).annotate({ "description": "Represents a zoom level" })) })
474
+ export type DetailedFilterV1 = { readonly "auditFilter"?: AuditFilterV1, readonly "options"?: DetailedOptionsV1, readonly "page"?: number, readonly "pageSize"?: number, readonly "sortColumn"?: "ID" | "DESCRIPTION" | "USER" | "DURATION" | "DATE" | "ZONED_DATE" | "NATURAL" | "USER_DATE" }
475
+ export const DetailedFilterV1 = Schema.Struct({ "auditFilter": Schema.optionalKey(AuditFilterV1), "options": Schema.optionalKey(DetailedOptionsV1), "page": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "sortColumn": Schema.optionalKey(Schema.Literals(["ID", "DESCRIPTION", "USER", "DURATION", "DATE", "ZONED_DATE", "NATURAL", "USER_DATE"]).annotate({ "description": "If provided, you'll get sorted result by sort column." })) }).annotate({ "description": "Represents a detailed report filter." })
476
+ export type SharedReportDtoV1 = { readonly "fixedDate"?: boolean, readonly "id"?: string, readonly "isPublic"?: boolean, readonly "link"?: string, readonly "name"?: string, readonly "reportAuthor"?: string, readonly "type"?: "DETAILED" | "WEEKLY" | "SUMMARY" | "SCHEDULED" | "EXPENSE_DETAILED" | "EXPENSE_RECEIPT" | "PTO_REQUESTS" | "PTO_BALANCE" | "ATTENDANCE" | "INVOICE_EXPENSE" | "INVOICE_TIME" | "PROJECT" | "TEAM_FULL" | "TEAM_LIMITED" | "TEAM_GROUPS" | "INVOICES" | "KIOSK_PIN_LIST" | "KIOSK_ASSIGNEES" | "USER_DATA_EXPORT", readonly "visibleToUserGroups"?: ReadonlyArray<EntityName>, readonly "visibleToUsers"?: ReadonlyArray<EntityName> }
477
+ export const SharedReportDtoV1 = Schema.Struct({ "fixedDate": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the shared report has a fixed date range" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a shared report identifier across the system." })), "isPublic": Schema.optionalKey(Schema.Boolean), "link": Schema.optionalKey(Schema.String.annotate({ "description": "Represents URI link of shared report.", "format": "uri" })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents shared report's name." })), "reportAuthor": Schema.optionalKey(Schema.String.annotate({ "description": "Represents report author (user) identifier across the system." })), "type": Schema.optionalKey(Schema.Literals(["DETAILED", "WEEKLY", "SUMMARY", "SCHEDULED", "EXPENSE_DETAILED", "EXPENSE_RECEIPT", "PTO_REQUESTS", "PTO_BALANCE", "ATTENDANCE", "INVOICE_EXPENSE", "INVOICE_TIME", "PROJECT", "TEAM_FULL", "TEAM_LIMITED", "TEAM_GROUPS", "INVOICES", "KIOSK_PIN_LIST", "KIOSK_ASSIGNEES", "USER_DATA_EXPORT"]).annotate({ "description": "Represents shared report type" })), "visibleToUserGroups": Schema.optionalKey(Schema.Array(EntityName)), "visibleToUsers": Schema.optionalKey(Schema.Array(EntityName).annotate({ "description": "Represents ids of user to whom are visible shared report." })) }).annotate({ "description": "Represents the array of reports." })
478
+ export type TimeEntryDto = { readonly "approvalRequestId"?: string, readonly "billable": boolean, readonly "clientId"?: string, readonly "clientName"?: string, readonly "description": string, readonly "locked"?: boolean, readonly "projectColor"?: string, readonly "projectId"?: string, readonly "projectName"?: string, readonly "tags"?: ReadonlyArray<ReportTagDto>, readonly "taskId"?: string, readonly "taskName"?: string, readonly "timeInterval": ReportTimeIntervalDto, readonly "userEmail"?: string, readonly "userId": string, readonly "userName"?: string, readonly "id": string, readonly "workspaceId": string, readonly "type"?: string, readonly "isLocked"?: boolean, readonly "tagIds"?: ReadonlyArray<string> }
479
+ export const TimeEntryDto = Schema.Struct({ "approvalRequestId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents approval request identifier across the system." })), "billable": Schema.Boolean.annotate({ "description": "Indicates whether the time entry is billable" }), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name" })), "description": Schema.String.annotate({ "description": "Represents time entry description" }), "locked": Schema.optionalKey(Schema.Boolean), "projectColor": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project color" })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "projectName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project name." })), "tags": Schema.optionalKey(Schema.Array(ReportTagDto).annotate({ "description": "List of tags" })), "taskId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task identifier across the system." })), "taskName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents task name." })), "timeInterval": ReportTimeIntervalDto, "userEmail": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user email." })), "userId": Schema.String.annotate({ "description": "Represents user identifier across the system." }), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's name" })), "id": Schema.String.annotate({ "description": "Represents time entry identifier across the system." }), "workspaceId": Schema.String, "type": Schema.optionalKey(Schema.String), "isLocked": Schema.optionalKey(Schema.Boolean), "tagIds": Schema.optionalKey(Schema.Array(Schema.String)) }).annotate({ "description": "time entry" })
480
+ export type ExpenseReportDtoV1 = { readonly "amount"?: number, readonly "approvalRequestId"?: string, readonly "billable"?: boolean, readonly "categoryHasUnitPrice"?: boolean, readonly "categoryId"?: string, readonly "categoryName"?: string, readonly "categoryUnit"?: string, readonly "date"?: string, readonly "exportFields"?: ReadonlyArray<"PROJECT" | "CLIENT" | "TASK" | "DESCRIPTION" | "USER" | "TAGS" | "START_DATE" | "START_TIME" | "END_TIME" | "DURATION" | "BILLABLE_AMOUNT" | "COST_AMOUNT" | "PROFIT" | "EMAIL" | "BILLABLE" | "BILLABLE_H" | "NON_BILLABLE_H" | "END_DATE" | "DECIMAL_DURATION" | "BILLABLE_RATE" | "COST_RATE" | "APPROVAL" | "APPROVAL_SUBMISSION_DATE" | "APPROVAL_SUBMISSION_TIME" | "APPROVAL_DATE" | "APPROVAL_TIME" | "BAR_CHART" | "PIE_CHART_1" | "PIE_CHART_2" | "PIE_CHART_3" | "RTL" | "TOTAL" | "SUBGROUP" | "GROUP" | "DATE" | "TIME" | "CATEGORY" | "NOTE" | "AMOUNT" | "INVOICED" | "INVOICE_ID" | "CATEGORY_NO_OF_UNITS" | "CATEGORY_UNIT" | "KIOSK" | "KIOSK_QR_CODE" | "TYPE" | "BREAK" | "NOTES" | "BILLABLE_TOTAL" | "RECEIPTS" | "EXPENSE_TOTAL" | "DATE_OF_CREATION" | "DATE_OF_APPROVAL" | "NAME" | "ROLE" | "PROJECTS" | "STATUS" | "WEEK_START" | "WORKING_DAYS" | "TEAM_MANAGERS" | "TEAM_MEMBERS" | "DAILY_WORK_CAPACITY" | "VISIBILITY" | "BILLABILITY" | "TASKS" | "TRACKED_H" | "ESTIMATED_H" | "REMAINING_H" | "OVERAGE_H" | "TRACKED_BUDGET" | "ESTIMATED_BUDGET" | "REMAINING_BUDGET" | "OVERAGE_BUDGET" | "PROGRESS" | "RECURRING_ESTIMATE" | "EXPENSES" | "BILLABLE_EXPENSES" | "NON_BILLABLE_EXPENSES" | "ADDITIONAL_FIELDS" | "PROJECT_MEMBERS" | "PROJECT_MANAGER" | "APPROVED_BY" | "ISSUE_DATE" | "DUE_ON" | "BALANCE">, readonly "fileId"?: string, readonly "fileName"?: string, readonly "id"?: string, readonly "invoicingInfo"?: InvoicingInfo, readonly "locked"?: boolean, readonly "notes"?: string, readonly "projectColor"?: string, readonly "projectId"?: string, readonly "projectName"?: string, readonly "quantity"?: number, readonly "reportName"?: string, readonly "time"?: string, readonly "userEmail"?: string, readonly "userId"?: string, readonly "userName"?: string, readonly "userStatus"?: string, readonly "workspaceId"?: string }
481
+ export const ExpenseReportDtoV1 = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expenses amount.", "format": "double" }).check(Schema.isFinite())), "approvalRequestId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents approval request identifier across the system." })), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the expenses is billable." })), "categoryHasUnitPrice": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether category has unit price." })), "categoryId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents category identifier across the system." })), "categoryName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents category's name." })), "categoryUnit": Schema.optionalKey(Schema.String.annotate({ "description": "Represents category's unit." })), "date": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expenses date in YYYY-MM-DDTHH:MM:SS.ssssssZ format." })), "exportFields": Schema.optionalKey(Schema.Array(Schema.Literals(["PROJECT", "CLIENT", "TASK", "DESCRIPTION", "USER", "TAGS", "START_DATE", "START_TIME", "END_TIME", "DURATION", "BILLABLE_AMOUNT", "COST_AMOUNT", "PROFIT", "EMAIL", "BILLABLE", "BILLABLE_H", "NON_BILLABLE_H", "END_DATE", "DECIMAL_DURATION", "BILLABLE_RATE", "COST_RATE", "APPROVAL", "APPROVAL_SUBMISSION_DATE", "APPROVAL_SUBMISSION_TIME", "APPROVAL_DATE", "APPROVAL_TIME", "BAR_CHART", "PIE_CHART_1", "PIE_CHART_2", "PIE_CHART_3", "RTL", "TOTAL", "SUBGROUP", "GROUP", "DATE", "TIME", "CATEGORY", "NOTE", "AMOUNT", "INVOICED", "INVOICE_ID", "CATEGORY_NO_OF_UNITS", "CATEGORY_UNIT", "KIOSK", "KIOSK_QR_CODE", "TYPE", "BREAK", "NOTES", "BILLABLE_TOTAL", "RECEIPTS", "EXPENSE_TOTAL", "DATE_OF_CREATION", "DATE_OF_APPROVAL", "NAME", "ROLE", "PROJECTS", "STATUS", "WEEK_START", "WORKING_DAYS", "TEAM_MANAGERS", "TEAM_MEMBERS", "DAILY_WORK_CAPACITY", "VISIBILITY", "BILLABILITY", "TASKS", "TRACKED_H", "ESTIMATED_H", "REMAINING_H", "OVERAGE_H", "TRACKED_BUDGET", "ESTIMATED_BUDGET", "REMAINING_BUDGET", "OVERAGE_BUDGET", "PROGRESS", "RECURRING_ESTIMATE", "EXPENSES", "BILLABLE_EXPENSES", "NON_BILLABLE_EXPENSES", "ADDITIONAL_FIELDS", "PROJECT_MEMBERS", "PROJECT_MANAGER", "APPROVED_BY", "ISSUE_DATE", "DUE_ON", "BALANCE"]).annotate({ "description": "Represents export fields." })).annotate({ "description": "Represents export fields." })), "fileId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents file identifier across the system." })), "fileName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expenses file name." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expenses identifier across the system." })), "invoicingInfo": Schema.optionalKey(InvoicingInfo), "locked": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the expenses is locked." })), "notes": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expenses note." })), "projectColor": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project's color" })), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "projectName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project's name." })), "quantity": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents expenses quantity", "format": "double" }).check(Schema.isFinite())), "reportName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense name." })), "time": Schema.optionalKey(Schema.String.annotate({ "description": "Represents expense time." })), "userEmail": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's email." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's name." })), "userStatus": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's status." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represents list of expenses" })
482
+ export type PageableV1ListAuditLogDtoV1 = { readonly "response"?: ReadonlyArray<AuditLogDtoV1> }
483
+ export const PageableV1ListAuditLogDtoV1 = Schema.Struct({ "response": Schema.optionalKey(Schema.Array(AuditLogDtoV1)) })
484
+ export type AuditLogGetRequestV1 = { readonly "actions": ReadonlyArray<"CREATE_TIME_PERSONAL_TIMER" | "CREATE_TIME_PERSONAL_MANUAL" | "CREATE_TIME_IMPORT" | "CREATE_TIME_KIOSK" | "CREATE_TIME_FOR_OTHER" | "RESTORE_TIME" | "RESTORE_TIME_FOR_OTHER" | "UPDATE_TIME_PERSONAL" | "UPDATE_TIME_FOR_OTHER" | "DELETE_TIME_PERSONAL" | "DELETE_TIME_FOR_OTHER" | "CREATE_PROJECT" | "CREATE_PROJECT_IMPORT" | "CREATE_PROJECT_QUICKBOOKS" | "UPDATE_PROJECT" | "DELETE_PROJECT" | "CREATE_TASK" | "CREATE_TASK_IMPORT" | "UPDATE_TASK" | "DELETE_TASK" | "CREATE_CLIENT" | "CREATE_CLIENT_IMPORT" | "CREATE_CLIENT_QUICKBOOKS" | "UPDATE_CLIENT" | "DELETE_CLIENT" | "CREATE_TAG" | "CREATE_TAG_IMPORT" | "UPDATE_TAG" | "DELETE_TAG" | "CREATE_EXPENSE" | "CREATE_EXPENSE_FOR_OTHER" | "RESTORE_EXPENSE" | "RESTORE_EXPENSE_FOR_OTHER" | "UPDATE_EXPENSE" | "UPDATE_EXPENSE_FOR_OTHER" | "DELETE_EXPENSE" | "DELETE_EXPENSE_FOR_OTHER">, readonly "authors": Authors, readonly "end": string, readonly "page"?: number, readonly "page-size"?: number, readonly "start": string }
485
+ export const AuditLogGetRequestV1 = Schema.Struct({ "actions": Schema.Array(Schema.Literals(["CREATE_TIME_PERSONAL_TIMER", "CREATE_TIME_PERSONAL_MANUAL", "CREATE_TIME_IMPORT", "CREATE_TIME_KIOSK", "CREATE_TIME_FOR_OTHER", "RESTORE_TIME", "RESTORE_TIME_FOR_OTHER", "UPDATE_TIME_PERSONAL", "UPDATE_TIME_FOR_OTHER", "DELETE_TIME_PERSONAL", "DELETE_TIME_FOR_OTHER", "CREATE_PROJECT", "CREATE_PROJECT_IMPORT", "CREATE_PROJECT_QUICKBOOKS", "UPDATE_PROJECT", "DELETE_PROJECT", "CREATE_TASK", "CREATE_TASK_IMPORT", "UPDATE_TASK", "DELETE_TASK", "CREATE_CLIENT", "CREATE_CLIENT_IMPORT", "CREATE_CLIENT_QUICKBOOKS", "UPDATE_CLIENT", "DELETE_CLIENT", "CREATE_TAG", "CREATE_TAG_IMPORT", "UPDATE_TAG", "DELETE_TAG", "CREATE_EXPENSE", "CREATE_EXPENSE_FOR_OTHER", "RESTORE_EXPENSE", "RESTORE_EXPENSE_FOR_OTHER", "UPDATE_EXPENSE", "UPDATE_EXPENSE_FOR_OTHER", "DELETE_EXPENSE", "DELETE_EXPENSE_FOR_OTHER"]).annotate({ "description": "Represents a set of audit log actions." })).annotate({ "description": "Represents a set of audit log actions." }).check(Schema.isMinLength(1)).check(Schema.isUnique()), "authors": Authors, "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format." }), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(0))), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(50))), "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." }) })
486
+ export type InvoiceOverviewDtoV1 = { readonly "amount"?: number, readonly "balance"?: number, readonly "billFrom"?: string, readonly "calculationType"?: CalculationType, readonly "clientAddress"?: string, readonly "clientId"?: string, readonly "clientName"?: string, readonly "companyId"?: string, readonly "containsImportedExpenses"?: boolean, readonly "containsImportedTimes"?: boolean, readonly "currency"?: string, readonly "discount"?: number, readonly "discountAmount"?: number, readonly "dueDate"?: string, readonly "id"?: string, readonly "issuedDate"?: string, readonly "items"?: ReadonlyArray<InvoiceItemDto>, readonly "note"?: string, readonly "number"?: string, readonly "paid"?: number, readonly "status"?: "UNSENT" | "SENT" | "PAID" | "PARTIALLY_PAID" | "VOID" | "OVERDUE", readonly "subject"?: string, readonly "subtotal"?: number, readonly "tax"?: number, readonly "tax2"?: number, readonly "tax2Amount"?: number, readonly "taxAmount"?: number, readonly "taxType"?: TaxType, readonly "userId"?: string, readonly "visibleZeroFields"?: VisibleZeroFieldsInvoice }
487
+ export const InvoiceOverviewDtoV1 = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice amount as long.", "format": "int64" }).check(Schema.isInt())), "balance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice balance amount as long.", "format": "int64" }).check(Schema.isInt())), "billFrom": Schema.optionalKey(Schema.String.annotate({ "description": "Represents to whom the invoice should be billed from." })), "calculationType": Schema.optionalKey(CalculationType), "clientAddress": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client address." })), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name for an invoice." })), "companyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents company identifier across the system." })), "containsImportedExpenses": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether invoice contains imported expenses." })), "containsImportedTimes": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether invoice contains imported items." })), "currency": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the currency used by the invoice." })), "discount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice discount amount as double.", "format": "double" }).check(Schema.isFinite())), "discountAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice discount amount as long.", "format": "int64" }).check(Schema.isInt())), "dueDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice due date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents invoice identifier across the system." })), "issuedDate": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice issued date in yyyy-MM-ddThh:mm:ssZ format.", "format": "date-time" })), "items": Schema.optionalKey(Schema.Array(InvoiceItemDto).annotate({ "description": "Represents a list of invoice item datatransfer objects." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice note." })), "number": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice number." })), "paid": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice paid amount as long.", "format": "int64" }).check(Schema.isInt())), "status": Schema.optionalKey(Schema.Literals(["UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE"]).annotate({ "description": "Represents the status of an invoice." })), "subject": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an invoice subject." })), "subtotal": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice subtotal as long.", "format": "int64" }).check(Schema.isInt())), "tax": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice tax amount as double.", "format": "double" }).check(Schema.isFinite())), "tax2": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice tax amount as double.", "format": "double" }).check(Schema.isFinite())), "tax2Amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice tax amount as long.", "format": "int64" }).check(Schema.isInt())), "taxAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an invoice tax amount as long.", "format": "int64" }).check(Schema.isInt())), "taxType": Schema.optionalKey(TaxType), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "visibleZeroFields": Schema.optionalKey(VisibleZeroFieldsInvoice) })
488
+ export type RoleDetailsDtoV1 = { readonly "role"?: RoleDtoV1, readonly "userId"?: string, readonly "workspaceId"?: string }
489
+ export const RoleDetailsDtoV1 = Schema.Struct({ "role": Schema.optionalKey(RoleDtoV1), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
490
+ export type UserCustomFieldValueFullDtoV1 = { readonly "customField"?: CustomFieldDtoV1, readonly "customFieldId"?: string, readonly "name"?: string, readonly "sourceType"?: "WORKSPACE" | "USER", readonly "type"?: "TXT" | "NUMBER" | "DROPDOWN_SINGLE" | "DROPDOWN_MULTIPLE" | "CHECKBOX" | "LINK", readonly "userId"?: string, readonly "value"?: { } }
491
+ export const UserCustomFieldValueFullDtoV1 = Schema.Struct({ "customField": Schema.optionalKey(CustomFieldDtoV1), "customFieldId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents custom field identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user custom field name." })), "sourceType": Schema.optionalKey(Schema.Literals(["WORKSPACE", "USER"]).annotate({ "description": "Represents user custom field source type." })), "type": Schema.optionalKey(Schema.Literals(["TXT", "NUMBER", "DROPDOWN_SINGLE", "DROPDOWN_MULTIPLE", "CHECKBOX", "LINK"]).annotate({ "description": "Represents custom field type." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "value": Schema.optionalKey(Schema.Struct({ }).annotate({ "description": "Represents user custom field value." })) }).annotate({ "description": "Represents a list of value objects for user’s custom fields." })
492
+ export type HolidayDto = { readonly "automaticTimeEntryCreation"?: AutomaticTimeEntryCreationDto, readonly "color"?: string, readonly "datePeriod"?: DatePeriod, readonly "everyoneIncludingNew"?: boolean, readonly "id"?: string, readonly "name"?: string, readonly "occursAnnually"?: boolean, readonly "userGroupIds"?: ReadonlyArray<string>, readonly "userGroups"?: ReadonlyArray<EntityIdNameDto>, readonly "userIds"?: ReadonlyArray<string>, readonly "users"?: ReadonlyArray<EntityIdNameDto>, readonly "workspaceId"?: string }
493
+ export const HolidayDto = Schema.Struct({ "automaticTimeEntryCreation": Schema.optionalKey(AutomaticTimeEntryCreationDto), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Provide color in format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." })), "datePeriod": Schema.optionalKey(DatePeriod), "everyoneIncludingNew": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the holiday is shown to new users." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents holiday identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the name of the holiday." })), "occursAnnually": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the holiday occurs annually." })), "userGroupIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Indicates which user groups are included." })).annotate({ "description": "Indicates which user groups are included." }).check(Schema.isUnique())), "userGroups": Schema.optionalKey(Schema.Array(EntityIdNameDto).annotate({ "description": "Contains names of user groups that are assigned to holiday." })), "userIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Indicates which users are included." })).annotate({ "description": "Indicates which users are included." }).check(Schema.isUnique())), "users": Schema.optionalKey(Schema.Array(EntityIdNameDto).annotate({ "description": "Contains names of users that are assigned to holiday." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
494
+ export type PolicyDtoV1 = { readonly "allowHalfDay"?: boolean, readonly "allowNegativeBalance"?: boolean, readonly "approve"?: PolicyApprovalDto, readonly "archived"?: boolean, readonly "automaticAccrual"?: AutomaticAccrualDto, readonly "automaticTimeEntryCreation"?: AutomaticTimeEntryCreationDto, readonly "everyoneIncludingNew"?: boolean, readonly "id"?: string, readonly "name"?: string, readonly "negativeBalance"?: NegativeBalanceDto, readonly "projectId"?: string, readonly "timeUnit"?: "DAYS" | "HOURS", readonly "userGroupIds"?: ReadonlyArray<string>, readonly "userIds"?: ReadonlyArray<string>, readonly "workspaceId"?: string }
495
+ export const PolicyDtoV1 = Schema.Struct({ "allowHalfDay": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the half day is allowed." })), "allowNegativeBalance": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the negative balance is allowed." })), "approve": Schema.optionalKey(PolicyApprovalDto), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the policy is archived." })), "automaticAccrual": Schema.optionalKey(AutomaticAccrualDto), "automaticTimeEntryCreation": Schema.optionalKey(AutomaticTimeEntryCreationDto), "everyoneIncludingNew": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the policy is applied to future new users." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents policy identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the name of the policy." })), "negativeBalance": Schema.optionalKey(NegativeBalanceDto), "projectId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "timeUnit": Schema.optionalKey(Schema.Literals(["DAYS", "HOURS"]).annotate({ "description": "Represents the time unit of the policy." })), "userGroupIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents user groups' identifiers across the system. Indicates which user groups are included in the policy." })).annotate({ "description": "Represents user groups' identifiers across the system. Indicates which user groups are included in the policy." }).check(Schema.isUnique())), "userIds": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents users' identifiers across the system. Indicates which users are included in the policy." })).annotate({ "description": "Represents users' identifiers across the system. Indicates which users are included in the policy." }).check(Schema.isUnique())), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
496
+ export type CreateHolidayRequestV1 = { readonly "automaticTimeEntryCreation"?: AutomaticTimeEntryCreationRequest, readonly "color"?: string, readonly "datePeriod": DatePeriodRequest, readonly "everyoneIncludingNew"?: boolean, readonly "name": string, readonly "occursAnnually"?: boolean, readonly "userGroups"?: UserGroupIdsSchema, readonly "users"?: UserIdsSchema }
497
+ export const CreateHolidayRequestV1 = Schema.Struct({ "automaticTimeEntryCreation": Schema.optionalKey(AutomaticTimeEntryCreationRequest), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Provide color in format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }).check(Schema.isPattern(new RegExp("^#(?:[0-9a-fA-F]{6}){1}$")))), "datePeriod": DatePeriodRequest, "everyoneIncludingNew": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the holiday is shown to new users." })), "name": Schema.String.annotate({ "description": "Provide the name of the holiday." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(100)), "occursAnnually": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the holiday occurs annually." })), "userGroups": Schema.optionalKey(UserGroupIdsSchema), "users": Schema.optionalKey(UserIdsSchema) })
498
+ export type CreatePolicyRequestV1 = { readonly "allowHalfDay"?: boolean, readonly "allowNegativeBalance"?: boolean, readonly "approve": PolicyApprovalDto, readonly "archived"?: boolean, readonly "automaticAccrual"?: AutomaticAccrualRequest, readonly "automaticTimeEntryCreation"?: AutomaticTimeEntryCreationRequest, readonly "color"?: string, readonly "everyoneIncludingNew"?: boolean, readonly "hasExpiration"?: boolean, readonly "icon"?: "UMBRELLA" | "SNOWFLAKE" | "FAMILY" | "PLANE" | "STETHOSCOPE" | "HEALTH_METRICS" | "CHILDCARE" | "LUGGAGE" | "MONETIZATION" | "CALENDAR", readonly "name": string, readonly "negativeBalance"?: NegativeBalanceRequest, readonly "timeUnit"?: "DAYS" | "HOURS", readonly "userGroups"?: UserGroupIdsSchema, readonly "users"?: UserIdsSchema }
499
+ export const CreatePolicyRequestV1 = Schema.Struct({ "allowHalfDay": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether policy allows half days." })), "allowNegativeBalance": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether policy allows negative balances." })), "approve": PolicyApprovalDto, "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether policy is archived." })), "automaticAccrual": Schema.optionalKey(AutomaticAccrualRequest), "automaticTimeEntryCreation": Schema.optionalKey(AutomaticTimeEntryCreationRequest), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Provide color in format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }).check(Schema.isPattern(new RegExp("^#(?:[0-9a-fA-F]{6}){1}$")))), "everyoneIncludingNew": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the policy is to be applied to future new users." })), "hasExpiration": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the policy balance should have expiration" })), "icon": Schema.optionalKey(Schema.Literals(["UMBRELLA", "SNOWFLAKE", "FAMILY", "PLANE", "STETHOSCOPE", "HEALTH_METRICS", "CHILDCARE", "LUGGAGE", "MONETIZATION", "CALENDAR"]).annotate({ "description": "Provide icon." })), "name": Schema.String.annotate({ "description": "Represents a name of new policy." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(100)), "negativeBalance": Schema.optionalKey(NegativeBalanceRequest), "timeUnit": Schema.optionalKey(Schema.Literals(["DAYS", "HOURS"]).annotate({ "description": "Indicates time unit of the policy. " })), "userGroups": Schema.optionalKey(UserGroupIdsSchema), "users": Schema.optionalKey(UserIdsSchema) })
500
+ export type UpdateHolidayRequestV1 = { readonly "automaticTimeEntryCreation"?: AutomaticTimeEntryCreationRequest, readonly "color"?: string, readonly "datePeriod": DatePeriodRequest, readonly "everyoneIncludingNew"?: boolean, readonly "name": string, readonly "occursAnnually": boolean, readonly "userGroups"?: ContainsUserGroupFilterRequest, readonly "users"?: ContainsUsersFilterRequestForHoliday }
501
+ export const UpdateHolidayRequestV1 = Schema.Struct({ "automaticTimeEntryCreation": Schema.optionalKey(AutomaticTimeEntryCreationRequest), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Provide color in format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }).check(Schema.isPattern(new RegExp("^#(?:[0-9a-fA-F]{6}){1}$")))), "datePeriod": DatePeriodRequest, "everyoneIncludingNew": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the holiday is shown to new users." })), "name": Schema.String.annotate({ "description": "Provide the name you would like to use for updating the holiday." }).check(Schema.isMinLength(1)), "occursAnnually": Schema.Boolean.annotate({ "description": "Indicates whether the holiday occurs annually." }), "userGroups": Schema.optionalKey(ContainsUserGroupFilterRequest), "users": Schema.optionalKey(ContainsUsersFilterRequestForHoliday) })
502
+ export type UpdatePolicyRequestV1 = { readonly "allowHalfDay": boolean, readonly "allowNegativeBalance": boolean, readonly "approve": PolicyApprovalDto, readonly "archived": boolean, readonly "automaticAccrual"?: AutomaticAccrualRequest, readonly "automaticTimeEntryCreation"?: AutomaticTimeEntryCreationRequest, readonly "color"?: string, readonly "everyoneIncludingNew": boolean, readonly "hasExpiration": boolean, readonly "icon"?: "UMBRELLA" | "SNOWFLAKE" | "FAMILY" | "PLANE" | "STETHOSCOPE" | "HEALTH_METRICS" | "CHILDCARE" | "LUGGAGE" | "MONETIZATION" | "CALENDAR", readonly "name": string, readonly "negativeBalance"?: NegativeBalanceRequest, readonly "userGroups": UserGroupIdsSchema, readonly "users": UserIdsSchema }
503
+ export const UpdatePolicyRequestV1 = Schema.Struct({ "allowHalfDay": Schema.Boolean.annotate({ "description": "Indicates whether policy allows half day." }), "allowNegativeBalance": Schema.Boolean.annotate({ "description": "Indicates whether policy allows negative balance." }), "approve": PolicyApprovalDto, "archived": Schema.Boolean.annotate({ "description": "Indicates whether policy is archived." }), "automaticAccrual": Schema.optionalKey(AutomaticAccrualRequest), "automaticTimeEntryCreation": Schema.optionalKey(AutomaticTimeEntryCreationRequest), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Provide color in format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }).check(Schema.isPattern(new RegExp("^#(?:[0-9a-fA-F]{6}){1}$")))), "everyoneIncludingNew": Schema.Boolean.annotate({ "description": "Indicates whether the policy is shown to new users." }), "hasExpiration": Schema.Boolean.annotate({ "description": "Indicates whether the policy has expiration." }), "icon": Schema.optionalKey(Schema.Literals(["UMBRELLA", "SNOWFLAKE", "FAMILY", "PLANE", "STETHOSCOPE", "HEALTH_METRICS", "CHILDCARE", "LUGGAGE", "MONETIZATION", "CALENDAR"]).annotate({ "description": "Provide icon." })), "name": Schema.String.annotate({ "description": "Provide the name you would like to use for updating the policy." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(100)), "negativeBalance": Schema.optionalKey(NegativeBalanceRequest), "userGroups": UserGroupIdsSchema, "users": UserIdsSchema })
504
+ export type WorkspaceSettingsDtoV1 = { readonly "activeBillableHours"?: boolean, readonly "adminOnlyPages"?: "PROJECT" | "TEAM" | "REPORTS", readonly "automaticLock"?: AutomaticLockDtoV1, readonly "canSeeTimeSheet"?: boolean, readonly "canSeeTracker"?: boolean, readonly "currencyFormat"?: "CURRENCY_SPACE_VALUE" | "VALUE_SPACE_CURRENCY" | "CURRENCY_VALUE" | "VALUE_CURRENCY", readonly "defaultBillableProjects"?: boolean, readonly "durationFormat"?: "FULL" | "COMPACT" | "DECIMAL", readonly "entityCreationPermissions"?: EntityCreationPermissionsDtoV1, readonly "forceDescription"?: boolean, readonly "forceProjects"?: boolean, readonly "forceTags"?: boolean, readonly "forceTasks"?: boolean, readonly "isProjectPublicByDefault"?: boolean, readonly "lockTimeEntries"?: string, readonly "lockTimeZone"?: string, readonly "multiFactorEnabled"?: boolean, readonly "numberFormat"?: "COMMA_PERIOD" | "PERIOD_COMMA" | "QUOTATION_MARK_PERIOD" | "SPACE_COMMA", readonly "onlyAdminsCanChangeBillableStatus"?: boolean, readonly "onlyAdminsCreateProject"?: boolean, readonly "onlyAdminsCreateTag"?: boolean, readonly "onlyAdminsCreateTask"?: boolean, readonly "onlyAdminsSeeAllTimeEntries"?: boolean, readonly "onlyAdminsSeeBillableRates"?: boolean, readonly "onlyAdminsSeeDashboard"?: boolean, readonly "onlyAdminsSeePublicProjectsEntries"?: boolean, readonly "projectFavorites"?: boolean, readonly "projectGroupingLabel"?: string, readonly "projectLabel"?: string, readonly "projectPickerSpecialFilter"?: boolean, readonly "round"?: RoundDto, readonly "taskLabel"?: string, readonly "timeRoundingInReports"?: boolean, readonly "timeTrackingMode"?: "DEFAULT" | "STOPWATCH_ONLY", readonly "trackTimeDownToSecond"?: boolean, readonly "workingDays"?: ReadonlyArray<"MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY"> }
505
+ export const WorkspaceSettingsDtoV1 = Schema.Struct({ "activeBillableHours": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether billable hours is active." })), "adminOnlyPages": Schema.optionalKey(Schema.Literals(["PROJECT", "TEAM", "REPORTS"]).annotate({ "description": "Represents a unique list of protected page enums." })), "automaticLock": Schema.optionalKey(AutomaticLockDtoV1), "canSeeTimeSheet": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether timesheets are visible or not." })), "canSeeTracker": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether time trackers are visible or not." })), "currencyFormat": Schema.optionalKey(Schema.Literals(["CURRENCY_SPACE_VALUE", "VALUE_SPACE_CURRENCY", "CURRENCY_VALUE", "VALUE_CURRENCY"]).annotate({ "description": "Represents a clockify currency format enum." })), "defaultBillableProjects": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether projects are billable by default." })), "durationFormat": Schema.optionalKey(Schema.Literals(["FULL", "COMPACT", "DECIMAL"]).annotate({ "description": "Represents a clockify duration format enum. Used to set Duration format instead of setting decimalFormat and trackTimeDownToSecond." })), "entityCreationPermissions": Schema.optionalKey(EntityCreationPermissionsDtoV1), "forceDescription": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether description are forced or not." })), "forceProjects": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether projects are forced or not." })), "forceTags": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether tags are forced or not." })), "forceTasks": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether tasks are forced or not." })), "isProjectPublicByDefault": Schema.optionalKey(Schema.Boolean), "lockTimeEntries": Schema.optionalKey(Schema.String), "lockTimeZone": Schema.optionalKey(Schema.String), "multiFactorEnabled": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether two-factor authentication is enabled or not." })), "numberFormat": Schema.optionalKey(Schema.Literals(["COMMA_PERIOD", "PERIOD_COMMA", "QUOTATION_MARK_PERIOD", "SPACE_COMMA"]).annotate({ "description": "Represents a clockify number format enum." })), "onlyAdminsCanChangeBillableStatus": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can change billable status." })), "onlyAdminsCreateProject": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can create projects." })), "onlyAdminsCreateTag": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can create tags." })), "onlyAdminsCreateTask": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can create task." })), "onlyAdminsSeeAllTimeEntries": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can see all time entries." })), "onlyAdminsSeeBillableRates": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can see billable rates." })), "onlyAdminsSeeDashboard": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can see dashboard." })), "onlyAdminsSeePublicProjectsEntries": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether only admins can see public project entries." })), "projectFavorites": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project favorites are allowed." })), "projectGroupingLabel": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project grouping label." })), "projectLabel": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project label." })), "projectPickerSpecialFilter": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project picker special filter is enabled." })), "round": Schema.optionalKey(RoundDto), "taskLabel": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a task label." })), "timeRoundingInReports": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether time rounding is enabled in reports." })), "timeTrackingMode": Schema.optionalKey(Schema.Literals(["DEFAULT", "STOPWATCH_ONLY"]).annotate({ "description": "Represents a time tracking mode enum." })), "trackTimeDownToSecond": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether time tracking is seconds-accurate. This is now deprecated and durationFormat can now be used to manage Time Duration Format." })), "workingDays": Schema.optionalKey(Schema.Array(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a list of working days." })).annotate({ "description": "Represents a list of working days." }).check(Schema.isUnique())) }).annotate({ "description": "Workspace settings also include Time Duration Format settings.\n\nSetting Time Duration Format by changing the boolean fields\ndecimalFormat and trackTimeDownToSecond is now deprecated.\n\nTime Duration Format can be set by durationFormat enum field.\n\nThree different Time Duration modes will still map the boolean fields:\n\n 1. Full (hh:mm:ss) -> decimalFormat = false, trackTimeDownToSecond = true,\n\n 2. Compact (h:mm) -> decimalFormat = false, trackTimeDownToSecond = false,\n\n 3. Decimal (h:hh) -> decimalFormat = true, trackTimeDownToSecond = true\n\n" })
506
+ export type ProjectRequest = { readonly "billable"?: boolean, readonly "clientId"?: string, readonly "color"?: string, readonly "costRate"?: CostRateRequestV1, readonly "estimate"?: EstimateRequest, readonly "hourlyRate"?: HourlyRateRequestV1, readonly "isPublic"?: boolean, readonly "memberships"?: ReadonlyArray<MembershipRequest>, readonly "name": string, readonly "note"?: string, readonly "tasks"?: ReadonlyArray<TaskRequest> }
507
+ export const ProjectRequest = Schema.Struct({ "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is billable or not." })), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }).check(Schema.isPattern(new RegExp("^#(?:[0-9a-fA-F]{6}){1}$")))), "costRate": Schema.optionalKey(CostRateRequestV1), "estimate": Schema.optionalKey(EstimateRequest), "hourlyRate": Schema.optionalKey(HourlyRateRequestV1), "isPublic": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is public or not." })), "memberships": Schema.optionalKey(Schema.Array(MembershipRequest).annotate({ "description": "Represents a list of membership request objects." })), "name": Schema.String.annotate({ "description": "Represents a project name." }).check(Schema.isMinLength(2)).check(Schema.isMaxLength(250)), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project note." }).check(Schema.isMaxLength(16384))), "tasks": Schema.optionalKey(Schema.Array(TaskRequest).annotate({ "description": "Represents a list of task request objects." })) })
508
+ export type UpdateProjectMembershipsRequest = { readonly "memberships": ReadonlyArray<UserIdWithRatesRequest>, readonly "userGroups"?: UserGroupIdsSchema }
509
+ export const UpdateProjectMembershipsRequest = Schema.Struct({ "memberships": Schema.Array(UserIdWithRatesRequest).annotate({ "description": "Represents a list of users with id and rates request objects." }), "userGroups": Schema.optionalKey(UserGroupIdsSchema) })
510
+ export type TimeOffRequestFullV1Dto = { readonly "balance"?: number, readonly "balanceDiff"?: number, readonly "createdAt"?: string, readonly "id"?: string, readonly "note"?: string, readonly "policyId"?: string, readonly "policyName"?: string, readonly "requesterUserId"?: string, readonly "requesterUserName"?: string, readonly "status"?: TimeOffRequestStatus, readonly "timeOffPeriod"?: TimeOffRequestPeriodDto, readonly "timeUnit"?: "DAYS" | "HOURS", readonly "userEmail"?: string, readonly "userId"?: string, readonly "userName"?: string, readonly "userTimeZone"?: string, readonly "workspaceId"?: string }
511
+ export const TimeOffRequestFullV1Dto = Schema.Struct({ "balance": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the time off balance.", "format": "double" }).check(Schema.isFinite())), "balanceDiff": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the balance difference.", "format": "double" }).check(Schema.isFinite())), "createdAt": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the date when time off request is created. It is in format YYYY-MM-DDTHH:MM:SS.ssssssZ", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time off requester identifier across the system." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the note of the time off request." })), "policyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents policy identifier across the system." })), "policyName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the policy name of the time off request." })), "requesterUserId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents requester user's id." })), "requesterUserName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents requester user's username." })), "status": Schema.optionalKey(TimeOffRequestStatus), "timeOffPeriod": Schema.optionalKey(TimeOffRequestPeriodDto), "timeUnit": Schema.optionalKey(Schema.Literals(["DAYS", "HOURS"]).annotate({ "description": "Represents the time unit of the time off request." })), "userEmail": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's email" })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "userName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's username." })), "userTimeZone": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's time zone" })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) }).annotate({ "description": "Represents the array of time off requests." })
512
+ export type TimeOffRequestV1Dto = { readonly "balanceDiff"?: number, readonly "createdAt"?: string, readonly "id"?: string, readonly "note"?: string, readonly "policyId"?: string, readonly "status"?: TimeOffRequestStatus, readonly "timeOffPeriod"?: TimeOffRequestPeriodDto, readonly "userId"?: string, readonly "workspaceId"?: string }
513
+ export const TimeOffRequestV1Dto = Schema.Struct({ "balanceDiff": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the balance difference", "format": "double" }).check(Schema.isFinite())), "createdAt": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the date when time off request is created. Date is in format YYYY-MM-DDTHH:MM:SS.ssssssZ", "format": "date-time" })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents time off requester identifier across the system." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the note of the time off request." })), "policyId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents policy identifier across the system." })), "status": Schema.optionalKey(TimeOffRequestStatus), "timeOffPeriod": Schema.optionalKey(TimeOffRequestPeriodDto), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user identifier across the system." })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
514
+ export type CreateTimeOffRequestV1Request = { readonly "note"?: string, readonly "timeOffPeriod": TimeOffRequestPeriodV1Request }
515
+ export const CreateTimeOffRequestV1Request = Schema.Struct({ "note": Schema.optionalKey(Schema.String.annotate({ "description": "Provide the note you would like to use for creating the time off request." })), "timeOffPeriod": TimeOffRequestPeriodV1Request })
516
+ export type ProjectDtoImplV1 = { readonly "archived"?: boolean, readonly "billable"?: boolean, readonly "budgetEstimate"?: EstimateWithOptionsDto, readonly "clientId"?: string, readonly "clientName"?: string, readonly "color"?: string, readonly "costRate"?: RateDtoV1, readonly "duration"?: string, readonly "estimate"?: EstimateDtoV1, readonly "estimateReset"?: EstimateResetDto, readonly "hourlyRate"?: RateDtoV1, readonly "id"?: string, readonly "isPublic"?: boolean, readonly "isTemplate"?: boolean, readonly "memberships"?: ReadonlyArray<MembershipDtoV1>, readonly "name"?: string, readonly "note"?: string, readonly "public"?: boolean, readonly "template"?: boolean, readonly "timeEstimate"?: TimeEstimateDto, readonly "workspaceId"?: string }
517
+ export const ProjectDtoImplV1 = Schema.Struct({ "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is archived or not." })), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is billable or not." })), "budgetEstimate": Schema.optionalKey(EstimateWithOptionsDto), "clientId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client identifier across the system." })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name." })), "color": Schema.optionalKey(Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." })), "costRate": Schema.optionalKey(RateDtoV1), "duration": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project duration in milliseconds." })), "estimate": Schema.optionalKey(EstimateDtoV1), "estimateReset": Schema.optionalKey(EstimateResetDto), "hourlyRate": Schema.optionalKey(RateDtoV1), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project identifier across the system." })), "isPublic": Schema.optionalKey(Schema.Boolean.annotate({ "writeOnly": true })), "isTemplate": Schema.optionalKey(Schema.Boolean.annotate({ "writeOnly": true })), "memberships": Schema.optionalKey(Schema.Array(MembershipDtoV1).annotate({ "description": "Represents a list of membership objects." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a project name." })), "note": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project note." })), "public": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is public or not." })), "template": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is a template or not." })), "timeEstimate": Schema.optionalKey(TimeEstimateDto), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents workspace identifier across the system." })) })
518
+ export type ProjectDtoV1 = { readonly "archived": boolean, readonly "billable": boolean, readonly "budgetEstimate"?: EstimateWithOptionsDto, readonly "color": string, readonly "costRate"?: RateDtoV1, readonly "duration"?: string, readonly "estimate"?: EstimateDtoV1, readonly "hourlyRate"?: RateDtoV1, readonly "id": string, readonly "memberships"?: ReadonlyArray<MembershipDtoV1>, readonly "name": string, readonly "note"?: string, readonly "public"?: boolean, readonly "template"?: boolean, readonly "timeEstimate"?: TimeEstimateDto, readonly "workspaceId": string }
519
+ export const ProjectDtoV1 = Schema.Struct({ "archived": Schema.Boolean.annotate({ "description": "Indicates whether project is archived or not." }), "billable": Schema.Boolean.annotate({ "description": "Indicates whether project is billable or not." }), "budgetEstimate": Schema.optionalKey(EstimateWithOptionsDto), "color": Schema.String.annotate({ "description": "Color format ^#(?:[0-9a-fA-F]{6}){1}$. Explanation: A valid color code should start with '#' and consist of six hexadecimal characters, representing a color in hexadecimal format. Color value is in standard RGB hexadecimal format." }), "costRate": Schema.optionalKey(RateDtoV1), "duration": Schema.optionalKey(Schema.String.annotate({ "description": "Represents project duration in milliseconds." })), "estimate": Schema.optionalKey(EstimateDtoV1), "hourlyRate": Schema.optionalKey(RateDtoV1), "id": Schema.String.annotate({ "description": "Represents project identifier across the system." }), "memberships": Schema.optionalKey(Schema.Array(MembershipDtoV1).annotate({ "description": "Represents a list of membership objects." })), "name": Schema.String, "note": Schema.optionalKey(Schema.String), "public": Schema.optionalKey(Schema.Boolean), "template": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether project is a template or not." })), "timeEstimate": Schema.optionalKey(TimeEstimateDto), "workspaceId": Schema.String })
520
+ export type UserDtoV1 = { readonly "activeWorkspace"?: string, readonly "customFields"?: ReadonlyArray<UserCustomFieldValueDtoV1>, readonly "defaultWorkspace"?: string, readonly "email": string, readonly "id": string, readonly "memberships"?: ReadonlyArray<MembershipDtoV1>, readonly "name": string, readonly "profilePicture"?: string, readonly "settings"?: UserSettingsDtoV1, readonly "status"?: AccountStatus }
521
+ export const UserDtoV1 = Schema.Struct({ "activeWorkspace": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user's active workspace identifier across the system." })), "customFields": Schema.optionalKey(Schema.Array(UserCustomFieldValueDtoV1).annotate({ "description": "Represents a list of value objects for user’s custom fields." })), "defaultWorkspace": Schema.optionalKey(Schema.String.annotate({ "description": "Represents user default workspace identifier across the system." })), "email": Schema.String.annotate({ "description": "Represents email address of the user." }), "id": Schema.String.annotate({ "description": "Represents user identifier across the system." }), "memberships": Schema.optionalKey(Schema.Array(MembershipDtoV1).annotate({ "description": "Represents a list of membership objects." })), "name": Schema.String.annotate({ "description": "Represents name of the user." }), "profilePicture": Schema.optionalKey(Schema.String.annotate({ "description": "Represents profile image path of the user." })), "settings": Schema.optionalKey(UserSettingsDtoV1), "status": Schema.optionalKey(AccountStatus) })
522
+ export type ExpensesWithCountDtoV1 = { readonly "count"?: number, readonly "expenses"?: ReadonlyArray<ExpenseHydratedDtoV1> }
523
+ export const ExpensesWithCountDtoV1 = Schema.Struct({ "count": Schema.optionalKey(Schema.Number.annotate({ "description": "Represent result count.", "format": "int32" }).check(Schema.isInt())), "expenses": Schema.optionalKey(Schema.Array(ExpenseHydratedDtoV1).annotate({ "description": "Represent a list of hydrated expense objects." })) }).annotate({ "description": "Represents an expense with count data transfer object." })
524
+ export type ApprovalDetailsDtoV1 = { readonly "approvalRequest"?: ApprovalRequestDtoV1, readonly "approvedTime"?: string, readonly "billableAmount"?: number, readonly "billableTime"?: string, readonly "breakTime"?: string, readonly "costAmount"?: number, readonly "entries"?: ReadonlyArray<TimeEntryInfoDto>, readonly "expenseTotal"?: number, readonly "expenses"?: ReadonlyArray<ExpenseHydratedDto>, readonly "pendingTime"?: string, readonly "trackedTime"?: string }
525
+ export const ApprovalDetailsDtoV1 = Schema.Struct({ "approvalRequest": Schema.optionalKey(ApprovalRequestDtoV1), "approvedTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time duration." })), "billableAmount": Schema.optionalKey(Schema.Number.annotate({ "format": "double" }).check(Schema.isFinite())), "billableTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time duration." })), "breakTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time duration." })), "costAmount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an amount.", "format": "double" }).check(Schema.isFinite())), "entries": Schema.optionalKey(Schema.Array(TimeEntryInfoDto).annotate({ "description": "Represents a list of time entry info data transfer objects." })), "expenseTotal": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents an amount.", "format": "double" }).check(Schema.isFinite())), "expenses": Schema.optionalKey(Schema.Array(ExpenseHydratedDto).annotate({ "description": "Represents a list of expense hydrated data transfer objects." })), "pendingTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time duration." })), "trackedTime": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time duration." })) })
526
+ export type TemplateDtoImpl = { readonly "entries"?: ReadonlyArray<TimeEntryWithCustomFieldsDto>, readonly "id"?: string, readonly "name"?: string, readonly "projectsAndTasks"?: ReadonlyArray<ProjectTaskTupleDto>, readonly "userId"?: string, readonly "weekStart"?: string, readonly "workspaceId"?: string }
527
+ export const TemplateDtoImpl = Schema.Struct({ "entries": Schema.optionalKey(Schema.Array(TimeEntryWithCustomFieldsDto).annotate({ "description": "Represents a set of template time entries." })), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a template identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a template name." })), "projectsAndTasks": Schema.optionalKey(Schema.Array(ProjectTaskTupleDto).annotate({ "description": "Represents a list of template's projects and tasks." })), "userId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a user identifier across the system." })), "weekStart": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a day of the week.", "format": "date" })), "workspaceId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a workspace identifier across the system." })) })
528
+ export type AddLimitedUsersRequest = { readonly "users": ReadonlyArray<LimitedUserRequest> }
529
+ export const AddLimitedUsersRequest = Schema.Struct({ "users": Schema.Array(LimitedUserRequest).check(Schema.isMinLength(1)).check(Schema.isMaxLength(250)) })
530
+ export type InvoiceInfoResponseDtoV1 = { readonly "invoices"?: ReadonlyArray<InvoiceInfoV1>, readonly "total"?: number }
531
+ export const InvoiceInfoResponseDtoV1 = Schema.Struct({ "invoices": Schema.optionalKey(Schema.Array(InvoiceInfoV1).annotate({ "description": "Represents a list of invoice info." })), "total": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the total invoice count.", "format": "int64" }).check(Schema.isInt())) })
532
+ export type WebhooksDtoV1 = { readonly "webhooks"?: ReadonlyArray<WebhookDtoV1>, readonly "workspaceWebhookCount"?: number }
533
+ export const WebhooksDtoV1 = Schema.Struct({ "webhooks": Schema.optionalKey(Schema.Array(WebhookDtoV1).annotate({ "description": "Represents a list of webhook objects for the workspace." })), "workspaceWebhookCount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents number of webhooks for the workspace.", "format": "int32" }).check(Schema.isInt())) })
534
+ export type AttendanceReportFilterV1 = { readonly "amountShown"?: "EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT", readonly "amounts"?: ReadonlyArray<"EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT">, readonly "approvalState"?: "APPROVED" | "UNAPPROVED" | "ALL", readonly "archived"?: boolean, readonly "attendanceFilter": AttendanceFilterV1, readonly "billable"?: boolean, readonly "clients"?: ContainsArchivedFilterV1, readonly "currency"?: ContainsArchivedFilterV1, readonly "customFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "dateFormat"?: string, readonly "dateRangeEnd": string, readonly "dateRangeStart": string, readonly "dateRangeType"?: "ABSOLUTE" | "TODAY" | "YESTERDAY" | "THIS_WEEK" | "LAST_WEEK" | "PAST_TWO_WEEKS" | "THIS_MONTH" | "LAST_MONTH" | "THIS_YEAR" | "LAST_YEAR", readonly "description"?: string, readonly "detailedFilter"?: DetailedFilterV1, readonly "exportType"?: "JSON" | "JSON_V1" | "PDF" | "CSV" | "XLSX" | "ZIP", readonly "invoicingState"?: "INVOICED" | "UNINVOICED" | "ALL", readonly "projects"?: ContainsArchivedFilterV1, readonly "rounding"?: boolean, readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "summaryFilter"?: SummaryFilterV1, readonly "tags"?: ContainsTagFilterV1, readonly "tasks"?: ContainsTaskFilterV1, readonly "timeFormat"?: string, readonly "timeZone"?: string, readonly "userGroups"?: ContainsUsersFilterV1, readonly "userLocale"?: string, readonly "users"?: ContainsUsersFilterV1, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "weeklyFilter"?: WeeklyFilterV1, readonly "withoutDescription"?: boolean, readonly "zoomLevel"?: "WEEK" | "MONTH" | "YEAR" }
535
+ export const AttendanceReportFilterV1 = Schema.Struct({ "amountShown": Schema.optionalKey(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided amount shown." })), "amounts": Schema.optionalKey(Schema.Array(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]))), "approvalState": Schema.optionalKey(Schema.Literals(["APPROVED", "UNAPPROVED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided approval state." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is archived" })), "attendanceFilter": AttendanceFilterV1, "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is billable" })), "clients": Schema.optionalKey(ContainsArchivedFilterV1), "currency": Schema.optionalKey(ContainsArchivedFilterV1), "customFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1)), "dateFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DD" })), "dateRangeEnd": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeStart": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeType": Schema.optionalKey(Schema.Literals(["ABSOLUTE", "TODAY", "YESTERDAY", "THIS_WEEK", "LAST_WEEK", "PAST_TWO_WEEKS", "THIS_MONTH", "LAST_MONTH", "THIS_YEAR", "LAST_YEAR"]).annotate({ "description": "Provide the date range type" })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents search term for filtering report entries by description" })), "detailedFilter": Schema.optionalKey(DetailedFilterV1), "exportType": Schema.optionalKey(Schema.Literals(["JSON", "JSON_V1", "PDF", "CSV", "XLSX", "ZIP"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided export type." })), "invoicingState": Schema.optionalKey(Schema.Literals(["INVOICED", "UNINVOICED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided invoicing state." })), "projects": Schema.optionalKey(ContainsArchivedFilterV1), "rounding": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report filter is rounding" })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "If provided, you'll get sorted result by provided sort order." })), "summaryFilter": Schema.optionalKey(SummaryFilterV1), "tags": Schema.optionalKey(ContainsTagFilterV1), "tasks": Schema.optionalKey(ContainsTaskFilterV1), "timeFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide time in format THH:MM:SS.ssssss" })), "timeZone": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided time zone." })), "userGroups": Schema.optionalKey(ContainsUsersFilterV1), "userLocale": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided user locale." })), "users": Schema.optionalKey(ContainsUsersFilterV1), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided week start." })), "weeklyFilter": Schema.optionalKey(WeeklyFilterV1), "withoutDescription": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to 'true', report will only include entries with empty description" })), "zoomLevel": Schema.optionalKey(Schema.Literals(["WEEK", "MONTH", "YEAR"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided zoom level." })) })
536
+ export type DetailedReportFilterV1 = { readonly "amountShown"?: "EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT", readonly "amounts"?: ReadonlyArray<"EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT">, readonly "approvalState"?: "APPROVED" | "UNAPPROVED" | "ALL", readonly "archived"?: boolean, readonly "attendanceFilter"?: AttendanceFilterV1, readonly "billable"?: boolean, readonly "clients"?: ContainsArchivedFilterV1, readonly "currency"?: ContainsArchivedFilterV1, readonly "customFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "dateFormat"?: string, readonly "dateRangeEnd": string, readonly "dateRangeStart": string, readonly "dateRangeType"?: "ABSOLUTE" | "TODAY" | "YESTERDAY" | "THIS_WEEK" | "LAST_WEEK" | "PAST_TWO_WEEKS" | "THIS_MONTH" | "LAST_MONTH" | "THIS_YEAR" | "LAST_YEAR", readonly "description"?: string, readonly "detailedFilter": DetailedFilterV1, readonly "exportType"?: "JSON" | "JSON_V1" | "PDF" | "CSV" | "XLSX" | "ZIP", readonly "invoicingState"?: "INVOICED" | "UNINVOICED" | "ALL", readonly "projects"?: ContainsArchivedFilterV1, readonly "rounding"?: boolean, readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "summaryFilter"?: SummaryFilterV1, readonly "tags"?: ContainsTagFilterV1, readonly "tasks"?: ContainsTaskFilterV1, readonly "timeFormat"?: string, readonly "timeZone"?: string, readonly "userCustomFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "userGroups"?: ContainsUsersFilterV1, readonly "userLocale"?: string, readonly "users"?: ContainsUsersFilterV1, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "weeklyFilter"?: WeeklyFilterV1, readonly "withoutDescription"?: boolean, readonly "zoomLevel"?: "WEEK" | "MONTH" | "YEAR" }
537
+ export const DetailedReportFilterV1 = Schema.Struct({ "amountShown": Schema.optionalKey(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided amount shown." })), "amounts": Schema.optionalKey(Schema.Array(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]))), "approvalState": Schema.optionalKey(Schema.Literals(["APPROVED", "UNAPPROVED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided approval state." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is archived" })), "attendanceFilter": Schema.optionalKey(AttendanceFilterV1), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is billable" })), "clients": Schema.optionalKey(ContainsArchivedFilterV1), "currency": Schema.optionalKey(ContainsArchivedFilterV1), "customFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1)), "dateFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DD" })), "dateRangeEnd": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeStart": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeType": Schema.optionalKey(Schema.Literals(["ABSOLUTE", "TODAY", "YESTERDAY", "THIS_WEEK", "LAST_WEEK", "PAST_TWO_WEEKS", "THIS_MONTH", "LAST_MONTH", "THIS_YEAR", "LAST_YEAR"]).annotate({ "description": "Provide the date range type" })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents search term for filtering report entries by description" })), "detailedFilter": DetailedFilterV1, "exportType": Schema.optionalKey(Schema.Literals(["JSON", "JSON_V1", "PDF", "CSV", "XLSX", "ZIP"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided export type." })), "invoicingState": Schema.optionalKey(Schema.Literals(["INVOICED", "UNINVOICED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided invoicing state." })), "projects": Schema.optionalKey(ContainsArchivedFilterV1), "rounding": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report filter is rounding" })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "If provided, you'll get sorted result by provided sort order." })), "summaryFilter": Schema.optionalKey(SummaryFilterV1), "tags": Schema.optionalKey(ContainsTagFilterV1), "tasks": Schema.optionalKey(ContainsTaskFilterV1), "timeFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide time in format THH:MM:SS.ssssss" })), "timeZone": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided time zone." })), "userCustomFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1).annotate({ "writeOnly": true })), "userGroups": Schema.optionalKey(ContainsUsersFilterV1), "userLocale": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided user locale." })), "users": Schema.optionalKey(ContainsUsersFilterV1), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided week start." })), "weeklyFilter": Schema.optionalKey(WeeklyFilterV1), "withoutDescription": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to 'true', report will only include entries with empty description" })), "zoomLevel": Schema.optionalKey(Schema.Literals(["WEEK", "MONTH", "YEAR"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided zoom level." })) })
538
+ export type ReportFilterV1 = { readonly "amountShown"?: "EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT", readonly "amounts"?: ReadonlyArray<"EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT">, readonly "approvalState"?: "APPROVED" | "UNAPPROVED" | "ALL", readonly "archived"?: boolean, readonly "attendanceFilter"?: AttendanceFilterV1, readonly "billable"?: boolean, readonly "clients"?: ContainsArchivedFilterV1, readonly "currency"?: ContainsArchivedFilterV1, readonly "customFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "dateFormat"?: string, readonly "dateRangeEnd": string, readonly "dateRangeStart": string, readonly "dateRangeType"?: "ABSOLUTE" | "TODAY" | "YESTERDAY" | "THIS_WEEK" | "LAST_WEEK" | "PAST_TWO_WEEKS" | "THIS_MONTH" | "LAST_MONTH" | "THIS_YEAR" | "LAST_YEAR", readonly "description"?: string, readonly "detailedFilter"?: DetailedFilterV1, readonly "exportType"?: "JSON" | "JSON_V1" | "PDF" | "CSV" | "XLSX" | "ZIP", readonly "invoicingState"?: "INVOICED" | "UNINVOICED" | "ALL", readonly "projects"?: ContainsArchivedFilterV1, readonly "rounding"?: boolean, readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "summaryFilter"?: SummaryFilterV1, readonly "tags"?: ContainsTagFilterV1, readonly "tasks"?: ContainsTaskFilterV1, readonly "timeFormat"?: string, readonly "timeZone"?: string, readonly "userCustomFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "userGroups"?: ContainsUsersFilterV1, readonly "userLocale"?: string, readonly "users"?: ContainsUsersFilterV1, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "weeklyFilter"?: WeeklyFilterV1, readonly "withoutDescription"?: boolean, readonly "zoomLevel"?: "WEEK" | "MONTH" | "YEAR" }
539
+ export const ReportFilterV1 = Schema.Struct({ "amountShown": Schema.optionalKey(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided amount shown." })), "amounts": Schema.optionalKey(Schema.Array(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]))), "approvalState": Schema.optionalKey(Schema.Literals(["APPROVED", "UNAPPROVED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided approval state." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is archived" })), "attendanceFilter": Schema.optionalKey(AttendanceFilterV1), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is billable" })), "clients": Schema.optionalKey(ContainsArchivedFilterV1), "currency": Schema.optionalKey(ContainsArchivedFilterV1), "customFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1)), "dateFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DD" })), "dateRangeEnd": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeStart": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeType": Schema.optionalKey(Schema.Literals(["ABSOLUTE", "TODAY", "YESTERDAY", "THIS_WEEK", "LAST_WEEK", "PAST_TWO_WEEKS", "THIS_MONTH", "LAST_MONTH", "THIS_YEAR", "LAST_YEAR"]).annotate({ "description": "Provide the date range type" })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents search term for filtering report entries by description" })), "detailedFilter": Schema.optionalKey(DetailedFilterV1), "exportType": Schema.optionalKey(Schema.Literals(["JSON", "JSON_V1", "PDF", "CSV", "XLSX", "ZIP"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided export type." })), "invoicingState": Schema.optionalKey(Schema.Literals(["INVOICED", "UNINVOICED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided invoicing state." })), "projects": Schema.optionalKey(ContainsArchivedFilterV1), "rounding": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report filter is rounding" })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "If provided, you'll get sorted result by provided sort order." })), "summaryFilter": Schema.optionalKey(SummaryFilterV1), "tags": Schema.optionalKey(ContainsTagFilterV1), "tasks": Schema.optionalKey(ContainsTaskFilterV1), "timeFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide time in format THH:MM:SS.ssssss" })), "timeZone": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided time zone." })), "userCustomFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1).annotate({ "writeOnly": true })), "userGroups": Schema.optionalKey(ContainsUsersFilterV1), "userLocale": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided user locale." })), "users": Schema.optionalKey(ContainsUsersFilterV1), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided week start." })), "weeklyFilter": Schema.optionalKey(WeeklyFilterV1), "withoutDescription": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to 'true', report will only include entries with empty description" })), "zoomLevel": Schema.optionalKey(Schema.Literals(["WEEK", "MONTH", "YEAR"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided zoom level." })) })
540
+ export type SummaryReportFilterV1 = { readonly "amountShown"?: "EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT", readonly "amounts"?: ReadonlyArray<"EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT">, readonly "approvalState"?: "APPROVED" | "UNAPPROVED" | "ALL", readonly "archived"?: boolean, readonly "attendanceFilter"?: AttendanceFilterV1, readonly "billable"?: boolean, readonly "clients"?: ContainsArchivedFilterV1, readonly "currency"?: ContainsArchivedFilterV1, readonly "customFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "dateFormat"?: string, readonly "dateRangeEnd": string, readonly "dateRangeStart": string, readonly "dateRangeType"?: "ABSOLUTE" | "TODAY" | "YESTERDAY" | "THIS_WEEK" | "LAST_WEEK" | "PAST_TWO_WEEKS" | "THIS_MONTH" | "LAST_MONTH" | "THIS_YEAR" | "LAST_YEAR", readonly "description"?: string, readonly "detailedFilter"?: DetailedFilterV1, readonly "exportType"?: "JSON" | "JSON_V1" | "PDF" | "CSV" | "XLSX" | "ZIP", readonly "invoicingState"?: "INVOICED" | "UNINVOICED" | "ALL", readonly "projects"?: ContainsArchivedFilterV1, readonly "rounding"?: boolean, readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "summaryFilter": SummaryFilterV1, readonly "tags"?: ContainsTagFilterV1, readonly "tasks"?: ContainsTaskFilterV1, readonly "timeFormat"?: string, readonly "timeZone"?: string, readonly "userCustomFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "userGroups"?: ContainsUsersFilterV1, readonly "userLocale"?: string, readonly "users"?: ContainsUsersFilterV1, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "weeklyFilter"?: WeeklyFilterV1, readonly "withoutDescription"?: boolean, readonly "zoomLevel"?: "WEEK" | "MONTH" | "YEAR" }
541
+ export const SummaryReportFilterV1 = Schema.Struct({ "amountShown": Schema.optionalKey(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided amount shown." })), "amounts": Schema.optionalKey(Schema.Array(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]))), "approvalState": Schema.optionalKey(Schema.Literals(["APPROVED", "UNAPPROVED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided approval state." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is archived" })), "attendanceFilter": Schema.optionalKey(AttendanceFilterV1), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is billable" })), "clients": Schema.optionalKey(ContainsArchivedFilterV1), "currency": Schema.optionalKey(ContainsArchivedFilterV1), "customFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1)), "dateFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DD" })), "dateRangeEnd": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeStart": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeType": Schema.optionalKey(Schema.Literals(["ABSOLUTE", "TODAY", "YESTERDAY", "THIS_WEEK", "LAST_WEEK", "PAST_TWO_WEEKS", "THIS_MONTH", "LAST_MONTH", "THIS_YEAR", "LAST_YEAR"]).annotate({ "description": "Provide the date range type" })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents search term for filtering report entries by description" })), "detailedFilter": Schema.optionalKey(DetailedFilterV1), "exportType": Schema.optionalKey(Schema.Literals(["JSON", "JSON_V1", "PDF", "CSV", "XLSX", "ZIP"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided export type." })), "invoicingState": Schema.optionalKey(Schema.Literals(["INVOICED", "UNINVOICED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided invoicing state." })), "projects": Schema.optionalKey(ContainsArchivedFilterV1), "rounding": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report filter is rounding" })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "If provided, you'll get sorted result by provided sort order." })), "summaryFilter": SummaryFilterV1, "tags": Schema.optionalKey(ContainsTagFilterV1), "tasks": Schema.optionalKey(ContainsTaskFilterV1), "timeFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide time in format THH:MM:SS.ssssss" })), "timeZone": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided time zone." })), "userCustomFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1).annotate({ "writeOnly": true })), "userGroups": Schema.optionalKey(ContainsUsersFilterV1), "userLocale": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided user locale." })), "users": Schema.optionalKey(ContainsUsersFilterV1), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided week start." })), "weeklyFilter": Schema.optionalKey(WeeklyFilterV1), "withoutDescription": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to 'true', report will only include entries with empty description" })), "zoomLevel": Schema.optionalKey(Schema.Literals(["WEEK", "MONTH", "YEAR"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided zoom level." })) })
542
+ export type WeeklyReportFilterV1 = { readonly "amountShown"?: "EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT", readonly "amounts"?: ReadonlyArray<"EARNED" | "COST" | "PROFIT" | "HIDE_AMOUNT" | "EXPORT">, readonly "approvalState"?: "APPROVED" | "UNAPPROVED" | "ALL", readonly "archived"?: boolean, readonly "attendanceFilter"?: AttendanceFilterV1, readonly "billable"?: boolean, readonly "clients"?: ContainsArchivedFilterV1, readonly "currency"?: ContainsArchivedFilterV1, readonly "customFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "dateFormat"?: string, readonly "dateRangeEnd": string, readonly "dateRangeStart": string, readonly "dateRangeType"?: "ABSOLUTE" | "TODAY" | "YESTERDAY" | "THIS_WEEK" | "LAST_WEEK" | "PAST_TWO_WEEKS" | "THIS_MONTH" | "LAST_MONTH" | "THIS_YEAR" | "LAST_YEAR", readonly "description"?: string, readonly "detailedFilter"?: DetailedFilterV1, readonly "exportType"?: "JSON" | "JSON_V1" | "PDF" | "CSV" | "XLSX" | "ZIP", readonly "invoicingState"?: "INVOICED" | "UNINVOICED" | "ALL", readonly "projects"?: ContainsArchivedFilterV1, readonly "rounding"?: boolean, readonly "sortOrder"?: "ASCENDING" | "DESCENDING", readonly "summaryFilter"?: SummaryFilterV1, readonly "tags"?: ContainsTagFilterV1, readonly "tasks"?: ContainsTaskFilterV1, readonly "timeFormat"?: string, readonly "timeZone"?: string, readonly "userCustomFields"?: ReadonlyArray<CustomFieldFilterV1>, readonly "userGroups"?: ContainsUsersFilterV1, readonly "userLocale"?: string, readonly "users"?: ContainsUsersFilterV1, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "weeklyFilter": WeeklyFilterV1, readonly "withoutDescription"?: boolean, readonly "zoomLevel"?: "WEEK" | "MONTH" | "YEAR" }
543
+ export const WeeklyReportFilterV1 = Schema.Struct({ "amountShown": Schema.optionalKey(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided amount shown." })), "amounts": Schema.optionalKey(Schema.Array(Schema.Literals(["EARNED", "COST", "PROFIT", "HIDE_AMOUNT", "EXPORT"]))), "approvalState": Schema.optionalKey(Schema.Literals(["APPROVED", "UNAPPROVED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided approval state." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is archived" })), "attendanceFilter": Schema.optionalKey(AttendanceFilterV1), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report is billable" })), "clients": Schema.optionalKey(ContainsArchivedFilterV1), "currency": Schema.optionalKey(ContainsArchivedFilterV1), "customFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1)), "dateFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DD" })), "dateRangeEnd": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeStart": Schema.String.annotate({ "description": "Provide date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" }).check(Schema.isMinLength(1)), "dateRangeType": Schema.optionalKey(Schema.Literals(["ABSOLUTE", "TODAY", "YESTERDAY", "THIS_WEEK", "LAST_WEEK", "PAST_TWO_WEEKS", "THIS_MONTH", "LAST_MONTH", "THIS_YEAR", "LAST_YEAR"]).annotate({ "description": "Provide the date range type" })), "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents search term for filtering report entries by description" })), "detailedFilter": Schema.optionalKey(DetailedFilterV1), "exportType": Schema.optionalKey(Schema.Literals(["JSON", "JSON_V1", "PDF", "CSV", "XLSX", "ZIP"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided export type." })), "invoicingState": Schema.optionalKey(Schema.Literals(["INVOICED", "UNINVOICED", "ALL"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided invoicing state." })), "projects": Schema.optionalKey(ContainsArchivedFilterV1), "rounding": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the report filter is rounding" })), "sortOrder": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"]).annotate({ "description": "If provided, you'll get sorted result by provided sort order." })), "summaryFilter": Schema.optionalKey(SummaryFilterV1), "tags": Schema.optionalKey(ContainsTagFilterV1), "tasks": Schema.optionalKey(ContainsTaskFilterV1), "timeFormat": Schema.optionalKey(Schema.String.annotate({ "description": "Provide time in format THH:MM:SS.ssssss" })), "timeZone": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided time zone." })), "userCustomFields": Schema.optionalKey(Schema.Array(CustomFieldFilterV1).annotate({ "writeOnly": true })), "userGroups": Schema.optionalKey(ContainsUsersFilterV1), "userLocale": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get filtered result including reports with provided user locale." })), "users": Schema.optionalKey(ContainsUsersFilterV1), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided week start." })), "weeklyFilter": WeeklyFilterV1, "withoutDescription": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to 'true', report will only include entries with empty description" })), "zoomLevel": Schema.optionalKey(Schema.Literals(["WEEK", "MONTH", "YEAR"]).annotate({ "description": "If provided, you'll get filtered result including reports with provided zoom level." })) })
544
+ export type ExpenseDetailedReportDtoV1 = { readonly "expenses"?: ReadonlyArray<ExpenseReportDtoV1>, readonly "totals"?: ExpenseTotalsDtoV1 }
545
+ export const ExpenseDetailedReportDtoV1 = Schema.Struct({ "expenses": Schema.optionalKey(Schema.Array(ExpenseReportDtoV1).annotate({ "description": "Represents list of expenses" })), "totals": Schema.optionalKey(ExpenseTotalsDtoV1) }).annotate({ "description": "report" })
546
+ export type MemberProfileDtoV1 = { readonly "email"?: string, readonly "hasPassword"?: boolean, readonly "hasPendingApprovalRequest"?: boolean, readonly "imageUrl"?: string, readonly "name"?: string, readonly "userCustomFieldValues"?: ReadonlyArray<UserCustomFieldValueFullDtoV1>, readonly "weekStart"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "workCapacity"?: string, readonly "workingDays"?: "MONDAY" | "TUESDAY" | "WEDNESDAY" | "THURSDAY" | "FRIDAY" | "SATURDAY" | "SUNDAY", readonly "workspaceNumber"?: number }
547
+ export const MemberProfileDtoV1 = Schema.Struct({ "email": Schema.optionalKey(Schema.String.annotate({ "description": "Represents email address of the user." })), "hasPassword": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether user has password or none." })), "hasPendingApprovalRequest": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether user has pending approval request." })), "imageUrl": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an image url." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents name of the user." })), "userCustomFieldValues": Schema.optionalKey(Schema.Array(UserCustomFieldValueFullDtoV1).annotate({ "description": "Represents a list of value objects for user’s custom fields." })), "weekStart": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a day of the week." })), "workCapacity": Schema.optionalKey(Schema.String.annotate({ "description": "Represents work capacity as a time duration in the ISO-8601 format." })), "workingDays": Schema.optionalKey(Schema.Literals(["MONDAY", "TUESDAY", "WEDNESDAY", "THURSDAY", "FRIDAY", "SATURDAY", "SUNDAY"]).annotate({ "description": "Represents a list of days of the week." })), "workspaceNumber": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the number of workspace(s) the user is associated to.", "format": "int32" }).check(Schema.isInt())) })
548
+ export type WorkspaceDtoV1 = { readonly "cakeOrganizationId"?: string, readonly "costRate"?: RateDtoV1, readonly "currencies"?: ReadonlyArray<CurrencyWithDefaultInfoDtoV1>, readonly "featureSubscriptionType"?: FeaturePlan, readonly "features"?: Feature, readonly "hourlyRate"?: HourlyRateDtoV1, readonly "id": string, readonly "imageUrl"?: string, readonly "memberships"?: ReadonlyArray<MembershipDtoV1>, readonly "name": string, readonly "subdomain"?: WorkspaceSubdomainDtoV1, readonly "workspaceSettings"?: WorkspaceSettingsDtoV1 }
549
+ export const WorkspaceDtoV1 = Schema.Struct({ "cakeOrganizationId": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the Cake organization identifier across the system." })), "costRate": Schema.optionalKey(RateDtoV1), "currencies": Schema.optionalKey(Schema.Array(CurrencyWithDefaultInfoDtoV1).annotate({ "description": "Represents currency with default info object." })), "featureSubscriptionType": Schema.optionalKey(FeaturePlan), "features": Schema.optionalKey(Feature), "hourlyRate": Schema.optionalKey(HourlyRateDtoV1), "id": Schema.String.annotate({ "description": "Represents workspace identifier across the system." }), "imageUrl": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an image url." })), "memberships": Schema.optionalKey(Schema.Array(MembershipDtoV1).annotate({ "description": "Represents a list of membership objects." })), "name": Schema.String.annotate({ "description": "Represents workspace name." }), "subdomain": Schema.optionalKey(WorkspaceSubdomainDtoV1), "workspaceSettings": Schema.optionalKey(WorkspaceSettingsDtoV1) })
550
+ export type TimeOffRequestsWithCountV1Dto = { readonly "count"?: number, readonly "requests"?: ReadonlyArray<TimeOffRequestFullV1Dto> }
551
+ export const TimeOffRequestsWithCountV1Dto = Schema.Struct({ "count": Schema.optionalKey(Schema.Number.annotate({ "description": "Total count of time off requests.", "format": "int32" }).check(Schema.isInt())), "requests": Schema.optionalKey(Schema.Array(TimeOffRequestFullV1Dto)) })
552
+ export type ExpensesAndTotalsDtoV1 = { readonly "dailyTotals"?: ReadonlyArray<ExpenseDailyTotalsDtoV1>, readonly "expenses"?: ExpensesWithCountDtoV1, readonly "weeklyTotals"?: ReadonlyArray<ExpenseWeeklyTotalsDtoV1> }
553
+ export const ExpensesAndTotalsDtoV1 = Schema.Struct({ "dailyTotals": Schema.optionalKey(Schema.Array(ExpenseDailyTotalsDtoV1).annotate({ "description": "Represents a list of expense daily total data transfer objects." })), "expenses": Schema.optionalKey(ExpensesWithCountDtoV1), "weeklyTotals": Schema.optionalKey(Schema.Array(ExpenseWeeklyTotalsDtoV1).annotate({ "description": "Represents a list of expense weekly total data transfer objects." })) })
554
+ export type SharedReportRequestV1 = { readonly "filter"?: ReportFilterV1, readonly "fixedDate"?: boolean, readonly "isPublic"?: boolean, readonly "name"?: string, readonly "type"?: "DETAILED" | "WEEKLY" | "SUMMARY" | "SCHEDULED" | "EXPENSE_DETAILED" | "EXPENSE_RECEIPT" | "PTO_REQUESTS" | "PTO_BALANCE" | "ATTENDANCE" | "INVOICE_EXPENSE" | "INVOICE_TIME" | "PROJECT" | "TEAM_FULL" | "TEAM_LIMITED" | "TEAM_GROUPS" | "INVOICES" | "KIOSK_PIN_LIST" | "KIOSK_ASSIGNEES" | "USER_DATA_EXPORT", readonly "visibleToUserGroups"?: ReadonlyArray<string>, readonly "visibleToUsers"?: ReadonlyArray<string> }
555
+ export const SharedReportRequestV1 = Schema.Struct({ "filter": Schema.optionalKey(ReportFilterV1), "fixedDate": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the shared report has a fixed date range." })), "isPublic": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Indicates whether the shared report is public or not" })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a shared report's name" })), "type": Schema.optionalKey(Schema.Literals(["DETAILED", "WEEKLY", "SUMMARY", "SCHEDULED", "EXPENSE_DETAILED", "EXPENSE_RECEIPT", "PTO_REQUESTS", "PTO_BALANCE", "ATTENDANCE", "INVOICE_EXPENSE", "INVOICE_TIME", "PROJECT", "TEAM_FULL", "TEAM_LIMITED", "TEAM_GROUPS", "INVOICES", "KIOSK_PIN_LIST", "KIOSK_ASSIGNEES", "USER_DATA_EXPORT"]).annotate({ "description": "Represent the type of shared report." })), "visibleToUserGroups": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents user group ids." })).annotate({ "description": "Represents user group ids." }).check(Schema.isUnique())), "visibleToUsers": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "Represents user ids." })).annotate({ "description": "Represents user ids." }).check(Schema.isUnique())) })
556
+ // recursive definitions
557
+ export type GroupOneDto = { readonly "amount"?: number, readonly "children"?: ReadonlyArray<GroupOneDto>, readonly "clientName"?: string, readonly "days"?: ReadonlyArray<DailyTotalDto>, readonly "duration"?: number, readonly "id"?: string, readonly "name"?: string, readonly "nameLowerCase"?: string }
558
+ export const GroupOneDto = Schema.Struct({ "amount": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents group one amount" }).check(Schema.isFinite())), "children": Schema.optionalKey(Schema.Array(Schema.suspend((): Schema.Codec<GroupOneDto> => GroupOneDto)).annotate({ "description": "Represents list of children groups" })), "clientName": Schema.optionalKey(Schema.String.annotate({ "description": "Represents client name" })), "days": Schema.optionalKey(Schema.Array(DailyTotalDto).annotate({ "description": "Represents list of days" })), "duration": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents duration" }).check(Schema.isFinite())), "id": Schema.optionalKey(Schema.String.annotate({ "description": "Represents group one identifier across the system." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "Represents name" })), "nameLowerCase": Schema.optionalKey(Schema.String.annotate({ "description": "Represents lower case name" })) }).annotate({ "description": "List of groups" })
559
+ // schemas
560
+ export type UploadImageRequestFormData = { readonly "file": string }
561
+ export const UploadImageRequestFormData = Schema.Struct({ "file": Schema.String.annotate({ "description": "Image to be uploaded", "format": "binary" }) })
562
+ export type UploadImage200 = UploadFileResponseV1
563
+ export const UploadImage200 = UploadFileResponseV1
564
+ export type GetLoggedUserParams = { readonly "include-memberships"?: boolean }
565
+ export const GetLoggedUserParams = Schema.Struct({ "include-memberships": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, memberships will be included." })) })
566
+ export type GetLoggedUser200 = UserDtoV1
567
+ export const GetLoggedUser200 = UserDtoV1
568
+ export type GetWorkspacesOfUserParams = { readonly "roles"?: "WORKSPACE_ADMIN" | "OWNER" | "TEAM_MANAGER" | "PROJECT_MANAGER" }
569
+ export const GetWorkspacesOfUserParams = Schema.Struct({ "roles": Schema.optionalKey(Schema.Literals(["WORKSPACE_ADMIN", "OWNER", "TEAM_MANAGER", "PROJECT_MANAGER"])) })
570
+ export type GetWorkspacesOfUser200 = ReadonlyArray<WorkspaceDtoV1>
571
+ export const GetWorkspacesOfUser200 = Schema.Array(WorkspaceDtoV1)
572
+ export type CreateWorkspaceRequestJson = CreateWorkspaceRequestV1
573
+ export const CreateWorkspaceRequestJson = CreateWorkspaceRequestV1
574
+ export type CreateWorkspace201 = WorkspaceDtoV1
575
+ export const CreateWorkspace201 = WorkspaceDtoV1
576
+ export type GetWorkspaceOfUser200 = WorkspaceDtoV1
577
+ export const GetWorkspaceOfUser200 = WorkspaceDtoV1
578
+ export type GetAddonWebhooks200 = WebhooksDtoV1
579
+ export const GetAddonWebhooks200 = WebhooksDtoV1
580
+ export type GetApprovalRequestsParams = { readonly "status"?: "PENDING" | "APPROVED" | "WITHDRAWN_APPROVAL", readonly "sort-column"?: "ID" | "USER_ID" | "START" | "UPDATED_AT", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "page"?: number, readonly "page-size"?: number }
581
+ export const GetApprovalRequestsParams = Schema.Struct({ "status": Schema.optionalKey(Schema.Literals(["PENDING", "APPROVED", "WITHDRAWN_APPROVAL"])), "sort-column": Schema.optionalKey(Schema.Literals(["ID", "USER_ID", "START", "UPDATED_AT"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))) })
582
+ export type GetApprovalRequests200 = ReadonlyArray<ApprovalDetailsDtoV1>
583
+ export const GetApprovalRequests200 = Schema.Array(ApprovalDetailsDtoV1)
584
+ export type CreateApprrovalRequestRequestJson = CreateApprovalRequest
585
+ export const CreateApprrovalRequestRequestJson = CreateApprovalRequest
586
+ export type CreateApprrovalRequest201 = ApprovalRequestDtoV1
587
+ export const CreateApprrovalRequest201 = ApprovalRequestDtoV1
588
+ export type ResubmitApprovalRequestRequestJson = CreateApprovalRequest
589
+ export const ResubmitApprovalRequestRequestJson = CreateApprovalRequest
590
+ export type CreateApprovalForOtherRequestJson = CreateApprovalRequest
591
+ export const CreateApprovalForOtherRequestJson = CreateApprovalRequest
592
+ export type CreateApprovalForOther201 = ApprovalRequestDtoV1
593
+ export const CreateApprovalForOther201 = ApprovalRequestDtoV1
594
+ export type ResubmitApprovalRequestForOtherRequestJson = CreateApprovalRequest
595
+ export const ResubmitApprovalRequestForOtherRequestJson = CreateApprovalRequest
596
+ export type UpdateApprovalStatusRequestJson = UpdateApprovalRequest
597
+ export const UpdateApprovalStatusRequestJson = UpdateApprovalRequest
598
+ export type UpdateApprovalStatus200 = ApprovalRequestDtoV1
599
+ export const UpdateApprovalStatus200 = ApprovalRequestDtoV1
600
+ export type GetClientsParams = { readonly "name"?: string, readonly "sort-column"?: string, readonly "sort-order"?: string, readonly "page"?: number, readonly "page-size"?: number, readonly "archived"?: string }
601
+ export const GetClientsParams = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "Filters client results that matches with the string provided in their client name." })), "sort-column": Schema.optionalKey(Schema.String.annotate({ "description": "Column name that will be used as criteria for sorting results." })), "sort-order": Schema.optionalKey(Schema.String), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "archived": Schema.optionalKey(Schema.String) })
602
+ export type GetClients200 = ReadonlyArray<ClientWithCurrencyDtoV1>
603
+ export const GetClients200 = Schema.Array(ClientWithCurrencyDtoV1)
604
+ export type CreateClientRequestJson = CreateClientRequestV1
605
+ export const CreateClientRequestJson = CreateClientRequestV1
606
+ export type CreateClient201 = ClientWithCurrencyDtoV1
607
+ export const CreateClient201 = ClientWithCurrencyDtoV1
608
+ export type GetClient200 = ClientWithCurrencyDtoV1
609
+ export const GetClient200 = ClientWithCurrencyDtoV1
610
+ export type UpdateClientParams = { readonly "archive-projects"?: boolean, readonly "mark-tasks-as-done"?: boolean }
611
+ export const UpdateClientParams = Schema.Struct({ "archive-projects": Schema.optionalKey(Schema.Boolean), "mark-tasks-as-done": Schema.optionalKey(Schema.Boolean) })
612
+ export type UpdateClientRequestJson = UpdateClientRequestV1
613
+ export const UpdateClientRequestJson = UpdateClientRequestV1
614
+ export type UpdateClient200 = ClientDtoV1
615
+ export const UpdateClient200 = ClientDtoV1
616
+ export type DeleteClient200 = ClientDtoV1
617
+ export const DeleteClient200 = ClientDtoV1
618
+ export type SetWorkspaceCostRateRequestJson = CostRateRequestV1
619
+ export const SetWorkspaceCostRateRequestJson = CostRateRequestV1
620
+ export type SetWorkspaceCostRate200 = WorkspaceDtoV1
621
+ export const SetWorkspaceCostRate200 = WorkspaceDtoV1
622
+ export type OfWorkspaceParams = { readonly "name"?: string, readonly "status"?: "INACTIVE" | "VISIBLE" | "INVISIBLE", readonly "entity-type"?: string }
623
+ export const OfWorkspaceParams = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of custom fields that contain the provided string in their name." })), "status": Schema.optionalKey(Schema.Literals(["INACTIVE", "VISIBLE", "INVISIBLE"])), "entity-type": Schema.optionalKey(Schema.String) })
624
+ export type OfWorkspace200 = ReadonlyArray<CustomFieldDtoV1>
625
+ export const OfWorkspace200 = Schema.Array(CustomFieldDtoV1)
626
+ export type CreateRequestJson = CustomFieldRequestV1
627
+ export const CreateRequestJson = CustomFieldRequestV1
628
+ export type EditCustomFieldRequestJson = UpdateCustomFieldRequestV1
629
+ export const EditCustomFieldRequestJson = UpdateCustomFieldRequestV1
630
+ export type EditCustomField200 = CustomFieldDtoV1
631
+ export const EditCustomField200 = CustomFieldDtoV1
632
+ export type GetCreatedEntityInfoParams = { readonly "type": ReadonlyArray<string>, readonly "start"?: string, readonly "end"?: string, readonly "page"?: string, readonly "limit"?: string }
633
+ export const GetCreatedEntityInfoParams = Schema.Struct({ "type": Schema.Array(Schema.String.annotate({ "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types." })).annotate({ "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types." }), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date." })), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days." })), "page": Schema.optionalKey(Schema.String), "limit": Schema.optionalKey(Schema.String) })
634
+ export type GetCreatedEntityInfo200 = string
635
+ export const GetCreatedEntityInfo200 = Schema.String
636
+ export type GetDeletedEntityInfoParams = { readonly "type": ReadonlyArray<string>, readonly "start"?: string, readonly "end"?: string, readonly "page"?: string, readonly "limit"?: string }
637
+ export const GetDeletedEntityInfoParams = Schema.Struct({ "type": Schema.Array(Schema.String.annotate({ "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types." })).annotate({ "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types." }), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date." })), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days." })), "page": Schema.optionalKey(Schema.String), "limit": Schema.optionalKey(Schema.String) })
638
+ export type GetDeletedEntityInfo200 = PageableCollectionLogBinDocumentDto
639
+ export const GetDeletedEntityInfo200 = PageableCollectionLogBinDocumentDto
640
+ export type GetUpdatedEntityInfoParams = { readonly "type": ReadonlyArray<string>, readonly "start"?: string, readonly "end"?: string, readonly "page"?: string, readonly "limit"?: string }
641
+ export const GetUpdatedEntityInfoParams = Schema.Struct({ "type": Schema.Array(Schema.String.annotate({ "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types." })).annotate({ "description": "Specifies the type of document to be retrieved. Expected values are ${changetracker.update.documentation.description}.This parameter can accept multiple values, and at least one option must be provided. Based on the input, the application will return results corresponding to the selected document types." }), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the start date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no start date is provided, the application will set a default start date that matches the end date to create a date range of 30 days. If the end date is not specified either, the default behavior will apply from the current date." })), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents the end date in yyyy-MM-ddThh:mm:ssZ format. This parameter is optional; if no end date is provided, the application will set a default end date that matches the start date to create a date range of 30 days." })), "page": Schema.optionalKey(Schema.String), "limit": Schema.optionalKey(Schema.String) })
642
+ export type GetUpdatedEntityInfo200 = string
643
+ export const GetUpdatedEntityInfo200 = Schema.String
644
+ export type GetExpensesParams = { readonly "page"?: number, readonly "page-size"?: number, readonly "user-id"?: string }
645
+ export const GetExpensesParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "user-id": Schema.optionalKey(Schema.String) })
646
+ export type GetExpenses200 = ExpensesAndTotalsDtoV1
647
+ export const GetExpenses200 = ExpensesAndTotalsDtoV1
648
+ export type CreateExpenseRequestFormData = CreateExpenseV1Request
649
+ export const CreateExpenseRequestFormData = CreateExpenseV1Request
650
+ export type CreateExpense201 = ExpenseDtoV1
651
+ export const CreateExpense201 = ExpenseDtoV1
652
+ export type GetCategoriesParams = { readonly "sort-column"?: "NAME", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "page"?: number, readonly "page-size"?: number, readonly "archived"?: boolean, readonly "name"?: string }
653
+ export const GetCategoriesParams = Schema.Struct({ "sort-column": Schema.optionalKey(Schema.Literal("NAME")), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to filter results based on whether category is archived or not." })), "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of expense categories that matches the provided string in their name." })) })
654
+ export type GetCategories200 = ExpenseCategoriesWithCountDtoV1
655
+ export const GetCategories200 = ExpenseCategoriesWithCountDtoV1
656
+ export type CreateExpenseCategoryRequestJson = ExpenseCategoryV1Request
657
+ export const CreateExpenseCategoryRequestJson = ExpenseCategoryV1Request
658
+ export type CreateExpenseCategory201 = ExpenseCategoryDtoV1
659
+ export const CreateExpenseCategory201 = ExpenseCategoryDtoV1
660
+ export type UpdateCategoryRequestJson = ExpenseCategoryV1Request
661
+ export const UpdateCategoryRequestJson = ExpenseCategoryV1Request
662
+ export type UpdateCategory200 = ExpenseCategoryDtoV1
663
+ export const UpdateCategory200 = ExpenseCategoryDtoV1
664
+ export type UpdateExpenseCategoryStatusRequestJson = ExpenseCategoryArchiveV1Request
665
+ export const UpdateExpenseCategoryStatusRequestJson = ExpenseCategoryArchiveV1Request
666
+ export type UpdateExpenseCategoryStatus200 = ExpenseCategoryDtoV1
667
+ export const UpdateExpenseCategoryStatus200 = ExpenseCategoryDtoV1
668
+ export type GetExpense200 = ExpenseDtoV1
669
+ export const GetExpense200 = ExpenseDtoV1
670
+ export type UpdateExpenseRequestFormData = UpdateExpenseV1Request
671
+ export const UpdateExpenseRequestFormData = UpdateExpenseV1Request
672
+ export type UpdateExpense200 = ExpenseDtoV1
673
+ export const UpdateExpense200 = ExpenseDtoV1
674
+ export type GetHolidaysParams = { readonly "assigned-to"?: string }
675
+ export const GetHolidaysParams = Schema.Struct({ "assigned-to": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of holidays assigned to user." })) })
676
+ export type GetHolidays200 = ReadonlyArray<HolidayDtoV1>
677
+ export const GetHolidays200 = Schema.Array(HolidayDtoV1)
678
+ export type CreateHolidayRequestJson = CreateHolidayRequestV1
679
+ export const CreateHolidayRequestJson = CreateHolidayRequestV1
680
+ export type CreateHoliday200 = HolidayDtoV1
681
+ export const CreateHoliday200 = HolidayDtoV1
682
+ export type GetHolidaysInPeriodParams = { readonly "assigned-to": string, readonly "start": string, readonly "end": string }
683
+ export const GetHolidaysInPeriodParams = Schema.Struct({ "assigned-to": Schema.String.annotate({ "description": "Filter list of holidays assigned to user." }), "start": Schema.String.annotate({ "description": "Filter list of holidays starting from start date. Expected date format yyyy-MM-ddThh:mm:ssZ" }), "end": Schema.String.annotate({ "description": "Filter list of holidays ending by end date. Expected date format yyyy-MM-ddThh:mm:ssZ" }) })
684
+ export type GetHolidaysInPeriod200 = ReadonlyArray<HolidayDtoV1>
685
+ export const GetHolidaysInPeriod200 = Schema.Array(HolidayDtoV1)
686
+ export type UpdateHolidayRequestJson = UpdateHolidayRequestV1
687
+ export const UpdateHolidayRequestJson = UpdateHolidayRequestV1
688
+ export type UpdateHoliday200 = HolidayDtoV1
689
+ export const UpdateHoliday200 = HolidayDtoV1
690
+ export type DeleteHoliday200 = HolidayDto
691
+ export const DeleteHoliday200 = HolidayDto
692
+ export type SetWorkspaceHourlyRateRequestJson = RateWithCurrencyRequestV1
693
+ export const SetWorkspaceHourlyRateRequestJson = RateWithCurrencyRequestV1
694
+ export type SetWorkspaceHourlyRate200 = WorkspaceDtoV1
695
+ export const SetWorkspaceHourlyRate200 = WorkspaceDtoV1
696
+ export type GetInvoicesParams = { readonly "page"?: number, readonly "page-size"?: number, readonly "statuses"?: "UNSENT" | "SENT" | "PAID" | "PARTIALLY_PAID" | "VOID" | "OVERDUE", readonly "sort-column"?: "ID" | "CLIENT" | "DUE_ON" | "ISSUE_DATE" | "AMOUNT" | "BALANCE", readonly "sort-order"?: "ASCENDING" | "DESCENDING" }
697
+ export const GetInvoicesParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "statuses": Schema.optionalKey(Schema.Literals(["UNSENT", "SENT", "PAID", "PARTIALLY_PAID", "VOID", "OVERDUE"])), "sort-column": Schema.optionalKey(Schema.Literals(["ID", "CLIENT", "DUE_ON", "ISSUE_DATE", "AMOUNT", "BALANCE"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])) })
698
+ export type GetInvoices200 = InvoicesListDtoV1
699
+ export const GetInvoices200 = InvoicesListDtoV1
700
+ export type CreateInvoiceRequestJson = CreateInvoiceRequest
701
+ export const CreateInvoiceRequestJson = CreateInvoiceRequest
702
+ export type CreateInvoice201 = CreateInvoiceDtoV1
703
+ export const CreateInvoice201 = CreateInvoiceDtoV1
704
+ export type GetInvoicesInfoRequestJson = InvoiceFilterRequestV1
705
+ export const GetInvoicesInfoRequestJson = InvoiceFilterRequestV1
706
+ export type GetInvoicesInfo200 = InvoiceInfoResponseDtoV1
707
+ export const GetInvoicesInfo200 = InvoiceInfoResponseDtoV1
708
+ export type GetInvoiceSettings200 = InvoiceSettingsDtoV1
709
+ export const GetInvoiceSettings200 = InvoiceSettingsDtoV1
710
+ export type UpdateInvoiceSettingsRequestJson = UpdateInvoiceSettingsRequestV1
711
+ export const UpdateInvoiceSettingsRequestJson = UpdateInvoiceSettingsRequestV1
712
+ export type GetInvoice200 = InvoiceOverviewDtoV1
713
+ export const GetInvoice200 = InvoiceOverviewDtoV1
714
+ export type UpdateInvoiceRequestJson = UpdateInvoiceRequestV1
715
+ export const UpdateInvoiceRequestJson = UpdateInvoiceRequestV1
716
+ export type UpdateInvoice200 = InvoiceOverviewDtoV1
717
+ export const UpdateInvoice200 = InvoiceOverviewDtoV1
718
+ export type DuplicateInvoice201 = InvoiceOverviewDtoV1
719
+ export const DuplicateInvoice201 = InvoiceOverviewDtoV1
720
+ export type ExportInvoiceParams = { readonly "userLocale": string }
721
+ export const ExportInvoiceParams = Schema.Struct({ "userLocale": Schema.String.annotate({ "description": "Represents a locale." }) })
722
+ export type AddInvoiceItemRequestJson = CreateInvoiceItemRequestV1
723
+ export const AddInvoiceItemRequestJson = CreateInvoiceItemRequestV1
724
+ export type AddInvoiceItem200 = InvoiceOverviewDtoV1
725
+ export const AddInvoiceItem200 = InvoiceOverviewDtoV1
726
+ export type ImportTimeEntriesAndExpensesRequestJson = ImportTimeEntriesAndExpensesRequestV1
727
+ export const ImportTimeEntriesAndExpensesRequestJson = ImportTimeEntriesAndExpensesRequestV1
728
+ export type ImportTimeEntriesAndExpenses200 = InvoiceOverviewDtoV1
729
+ export const ImportTimeEntriesAndExpenses200 = InvoiceOverviewDtoV1
730
+ export type RemoveInvoiceItem200 = InvoiceOverviewDtoV1
731
+ export const RemoveInvoiceItem200 = InvoiceOverviewDtoV1
732
+ export type GetPaymentsForInvoiceParams = { readonly "page"?: number, readonly "page-size"?: number }
733
+ export const GetPaymentsForInvoiceParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))) })
734
+ export type GetPaymentsForInvoice200 = ReadonlyArray<InvoicePaymentDtoV1>
735
+ export const GetPaymentsForInvoice200 = Schema.Array(InvoicePaymentDtoV1)
736
+ export type CreateInvoicePaymentRequestJson = CreateInvoicePaymentRequest
737
+ export const CreateInvoicePaymentRequestJson = CreateInvoicePaymentRequest
738
+ export type CreateInvoicePayment201 = InvoiceOverviewDtoV1
739
+ export const CreateInvoicePayment201 = InvoiceOverviewDtoV1
740
+ export type DeletePaymentById200 = InvoiceOverviewDtoV1
741
+ export const DeletePaymentById200 = InvoiceOverviewDtoV1
742
+ export type ChangeInvoiceStatusRequestJson = ChangeInvoiceStatusRequestV1
743
+ export const ChangeInvoiceStatusRequestJson = ChangeInvoiceStatusRequestV1
744
+ export type AddLimitedUsersRequestJson = AddLimitedUsersRequest
745
+ export const AddLimitedUsersRequestJson = AddLimitedUsersRequest
746
+ export type GetMemberProfile200 = MemberProfileDtoV1
747
+ export const GetMemberProfile200 = MemberProfileDtoV1
748
+ export type UpdateMemberProfileWithAdditionalDataRequestJson = MemberProfileFullRequestV1
749
+ export const UpdateMemberProfileWithAdditionalDataRequestJson = MemberProfileFullRequestV1
750
+ export type UpdateMemberProfileWithAdditionalData200 = MemberProfileDtoV1
751
+ export const UpdateMemberProfileWithAdditionalData200 = MemberProfileDtoV1
752
+ export type GetProjectsParams = { readonly "name"?: string, readonly "strict-name-search"?: boolean, readonly "archived"?: boolean, readonly "billable"?: boolean, readonly "clients"?: ReadonlyArray<string>, readonly "contains-client"?: boolean, readonly "client-status"?: "ACTIVE" | "ARCHIVED" | "ALL", readonly "users"?: ReadonlyArray<string>, readonly "contains-user"?: boolean, readonly "user-status"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL", readonly "is-template"?: boolean, readonly "sort-column"?: "ID" | "NAME" | "CLIENT_NAME" | "DURATION" | "BUDGET" | "PROGRESS", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "hydrated"?: boolean, readonly "page"?: number, readonly "page-size"?: number, readonly "access"?: "PUBLIC" | "PRIVATE", readonly "expense-limit"?: number, readonly "expense-date"?: string, readonly "userGroups"?: ReadonlyArray<string>, readonly "contains-group"?: boolean }
753
+ export const GetProjectsParams = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of projects that contains the provided string in the project name." })), "strict-name-search": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to toggle on/off strict search mode. When set to true, search by name will only return projects whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include projects whose name contain the string value, but could be longer than the string value itself. For example, if there is a project with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that project in the results, whereas setting it to false will." })), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If provided and set to true, you'll only get archived projects. If omitted, you'll get both archived and non-archived projects." })), "billable": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If provided and set to true, you'll only get billable projects. If omitted, you'll get both billable and non-billable projects." })), "clients": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of projects that contain clients which match any of the provided ids." })).annotate({ "description": "If provided, you'll get a filtered list of projects that contain clients which match any of the provided ids." }).check(Schema.isUnique())), "contains-client": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, you'll get a filtered list of projects that contain clients which match the provided id(s) in 'clients' field. If set to false, you'll get a filtered list of projects which do NOT contain clients that match the provided id(s) in 'clients' field." })), "client-status": Schema.optionalKey(Schema.Literals(["ACTIVE", "ARCHIVED", "ALL"])), "users": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of projects that contain users which match any of the provided ids." })).annotate({ "description": "If provided, you'll get a filtered list of projects that contain users which match any of the provided ids." }).check(Schema.isUnique())), "contains-user": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, you'll get a filtered list of projects that contain users which match the provided id(s) in 'users' field. If set to false, you'll get a filtered list of projects which do NOT contain users which match the provided id(s) in 'users' field." })), "user-status": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"])), "is-template": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Filters projects based on whether they are used as a template or not." })), "sort-column": Schema.optionalKey(Schema.Literals(["ID", "NAME", "CLIENT_NAME", "DURATION", "BUDGET", "PROGRESS"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "hydrated": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, results will contain additional information about the project." })), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "access": Schema.optionalKey(Schema.Literals(["PUBLIC", "PRIVATE"])), "expense-limit": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the maximum number of expenses to fetch.", "format": "int32" }).check(Schema.isInt())), "expense-date": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you will get expenses dated before the provided value in yyyy-MM-dd format." })), "userGroups": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of projects that contain groups which match any of the provided ids." })).annotate({ "description": "If provided, you'll get a filtered list of projects that contain groups which match any of the provided ids." }).check(Schema.isUnique())), "contains-group": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, you'll get a filtered list of projects that contain groups which match the provided id(s) in 'userGroups' field. If set to false, you'll get a filtered list of projects which do NOT contain groups which match the provided id(s) in 'userGroups' field." })) })
754
+ export type GetProjects200 = ReadonlyArray<ProjectDtoV1>
755
+ export const GetProjects200 = Schema.Array(ProjectDtoV1)
756
+ export type CreateNewProjectRequestJson = ProjectRequest
757
+ export const CreateNewProjectRequestJson = ProjectRequest
758
+ export type CreateNewProject201 = ProjectDtoImplV1
759
+ export const CreateNewProject201 = ProjectDtoImplV1
760
+ export type CreateProjectFromTemplateRequestJson = CreateProjectFromTemplateV1
761
+ export const CreateProjectFromTemplateRequestJson = CreateProjectFromTemplateV1
762
+ export type CreateProjectFromTemplate200 = ProjectDtoImplV1
763
+ export const CreateProjectFromTemplate200 = ProjectDtoImplV1
764
+ export type GetProjectParams = { readonly "hydrated"?: boolean, readonly "custom-field-entity-type"?: string, readonly "expense-limit"?: number, readonly "expense-date"?: string }
765
+ export const GetProjectParams = Schema.Struct({ "hydrated": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, results will contain additional information about the project" })), "custom-field-entity-type": Schema.optionalKey(Schema.String), "expense-limit": Schema.optionalKey(Schema.Number.annotate({ "description": "Represents the maximum number of expenses to fetch.", "format": "int32" }).check(Schema.isInt())), "expense-date": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you will get expenses dated before the provided value in yyyy-MM-dd format." })) })
766
+ export type GetProject200 = ProjectDtoV1
767
+ export const GetProject200 = ProjectDtoV1
768
+ export type UpdateProjectRequestJson = UpdateProjectRequest
769
+ export const UpdateProjectRequestJson = UpdateProjectRequest
770
+ export type UpdateProject200 = ProjectDtoImplV1
771
+ export const UpdateProject200 = ProjectDtoImplV1
772
+ export type DeleteProject200 = ProjectDtoImplV1
773
+ export const DeleteProject200 = ProjectDtoImplV1
774
+ export type GetCustomFieldsOfProjectParams = { readonly "status"?: "INACTIVE" | "VISIBLE" | "INVISIBLE", readonly "entity-type"?: string }
775
+ export const GetCustomFieldsOfProjectParams = Schema.Struct({ "status": Schema.optionalKey(Schema.Literals(["INACTIVE", "VISIBLE", "INVISIBLE"])), "entity-type": Schema.optionalKey(Schema.String) })
776
+ export type GetCustomFieldsOfProject200 = ReadonlyArray<CustomFieldDtoV1>
777
+ export const GetCustomFieldsOfProject200 = Schema.Array(CustomFieldDtoV1)
778
+ export type RemoveDefaultValueOfProject200 = CustomFieldDtoV1
779
+ export const RemoveDefaultValueOfProject200 = CustomFieldDtoV1
780
+ export type EditProjectCustomFieldDefaultValueRequestJson = CustomFieldProjectDefaultValuesRequest
781
+ export const EditProjectCustomFieldDefaultValueRequestJson = CustomFieldProjectDefaultValuesRequest
782
+ export type EditProjectCustomFieldDefaultValue200 = CustomFieldDtoV1
783
+ export const EditProjectCustomFieldDefaultValue200 = CustomFieldDtoV1
784
+ export type UpdateEstimateRequestJson = ProjectEstimateRequest
785
+ export const UpdateEstimateRequestJson = ProjectEstimateRequest
786
+ export type UpdateEstimate200 = ProjectDtoImplV1
787
+ export const UpdateEstimate200 = ProjectDtoImplV1
788
+ export type AddUsersToProjectRequestJson = AddUsersToProjectRequestV1
789
+ export const AddUsersToProjectRequestJson = AddUsersToProjectRequestV1
790
+ export type UpdateMembershipsRequestJson = UpdateProjectMembershipsRequest
791
+ export const UpdateMembershipsRequestJson = UpdateProjectMembershipsRequest
792
+ export type UpdateMemberships200 = ProjectDtoImplV1
793
+ export const UpdateMemberships200 = ProjectDtoImplV1
794
+ export type GetTasksParams = { readonly "name"?: string, readonly "strict-name-search"?: boolean, readonly "is-active"?: boolean, readonly "page"?: number, readonly "page-size"?: number, readonly "sort-column"?: "ID" | "NAME", readonly "sort-order"?: "ASCENDING" | "DESCENDING" }
795
+ export const GetTasksParams = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of tasks that matches the provided string in their name." })), "strict-name-search": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to toggle on/off strict search mode. When set to true, search by name only will return tasks whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include tasks whose name contain the string value, but could be longer than the string value itself. For example, if there is a task with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that task in the results, whereas setting it to false will." })), "is-active": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Filters search results whether task is active or not." })), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "sort-column": Schema.optionalKey(Schema.Literals(["ID", "NAME"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])) })
796
+ export type GetTasks200 = ReadonlyArray<TaskDtoV1>
797
+ export const GetTasks200 = Schema.Array(TaskDtoV1)
798
+ export type CreateTaskParams = { readonly "contains-assignee"?: boolean }
799
+ export const CreateTaskParams = Schema.Struct({ "contains-assignee": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether task will have assignee or none." })) })
800
+ export type CreateTaskRequestJson = TaskRequestV1
801
+ export const CreateTaskRequestJson = TaskRequestV1
802
+ export type CreateTask201 = TaskDtoV1
803
+ export const CreateTask201 = TaskDtoV1
804
+ export type SetTaskCostRateRequestJson = CostRateRequestV1
805
+ export const SetTaskCostRateRequestJson = CostRateRequestV1
806
+ export type SetTaskCostRate200 = TaskDtoV1
807
+ export const SetTaskCostRate200 = TaskDtoV1
808
+ export type SetTaskHourlyRateRequestJson = HourlyRateRequestV1
809
+ export const SetTaskHourlyRateRequestJson = HourlyRateRequestV1
810
+ export type SetTaskHourlyRate200 = TaskDtoV1
811
+ export const SetTaskHourlyRate200 = TaskDtoV1
812
+ export type GetTask200 = TaskDtoV1
813
+ export const GetTask200 = TaskDtoV1
814
+ export type UpdateTaskParams = { readonly "contains-assignee"?: boolean, readonly "membership-status"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL" }
815
+ export const UpdateTaskParams = Schema.Struct({ "contains-assignee": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether task will have assignee or none." })), "membership-status": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"])) })
816
+ export type UpdateTaskRequestJson = UpdateTaskRequest
817
+ export const UpdateTaskRequestJson = UpdateTaskRequest
818
+ export type UpdateTask200 = TaskDtoV1
819
+ export const UpdateTask200 = TaskDtoV1
820
+ export type DeleteTask200 = TaskDtoV1
821
+ export const DeleteTask200 = TaskDtoV1
822
+ export type UpdateIsProjectTemplateRequestJson = PatchProjectTemplateRequest
823
+ export const UpdateIsProjectTemplateRequestJson = PatchProjectTemplateRequest
824
+ export type UpdateIsProjectTemplate200 = ProjectDtoImplV1
825
+ export const UpdateIsProjectTemplate200 = ProjectDtoImplV1
826
+ export type AddUsersCostRateRequestJson = CostRateRequestV1
827
+ export const AddUsersCostRateRequestJson = CostRateRequestV1
828
+ export type AddUsersCostRate200 = ProjectDtoImplV1
829
+ export const AddUsersCostRate200 = ProjectDtoImplV1
830
+ export type AddUsersHourlyRateRequestJson = CostRateRequestV1
831
+ export const AddUsersHourlyRateRequestJson = CostRateRequestV1
832
+ export type AddUsersHourlyRate200 = ProjectDtoImplV1
833
+ export const AddUsersHourlyRate200 = ProjectDtoImplV1
834
+ export type GetAllAssignmentsParams = { readonly "name"?: string, readonly "start": string, readonly "end": string, readonly "sort-column"?: "PROJECT" | "USER" | "ID", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "page"?: number, readonly "page-size"?: number }
835
+ export const GetAllAssignmentsParams = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, assignments will be filtered by name" })), "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." }), "end": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." }), "sort-column": Schema.optionalKey(Schema.Literals(["PROJECT", "USER", "ID"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))) })
836
+ export type GetAllAssignments200 = ReadonlyArray<AssignmentHydratedDtoV1>
837
+ export const GetAllAssignments200 = Schema.Array(AssignmentHydratedDtoV1)
838
+ export type GetProjectTotalsParams = { readonly "search"?: string, readonly "start": string, readonly "end": string, readonly "page"?: number, readonly "page-size"?: number }
839
+ export const GetProjectTotalsParams = Schema.Struct({ "search": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a term for searching projects and clients by name." })), "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." }), "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format." }), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))) })
840
+ export type GetProjectTotals200 = ReadonlyArray<SchedulingProjectsTotalsDtoV1>
841
+ export const GetProjectTotals200 = Schema.Array(SchedulingProjectsTotalsDtoV1)
842
+ export type GetFilteredProjectTotalsRequestJson = ProjectTotalsRequestV1
843
+ export const GetFilteredProjectTotalsRequestJson = ProjectTotalsRequestV1
844
+ export type GetFilteredProjectTotals200 = ReadonlyArray<SchedulingProjectsTotalsDtoV1>
845
+ export const GetFilteredProjectTotals200 = Schema.Array(SchedulingProjectsTotalsDtoV1)
846
+ export type GetProjectTotalsForSingleProjectParams = { readonly "start": string, readonly "end": string }
847
+ export const GetProjectTotalsForSingleProjectParams = Schema.Struct({ "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." }), "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format." }) })
848
+ export type GetProjectTotalsForSingleProject200 = SchedulingProjectsTotalsDtoV1
849
+ export const GetProjectTotalsForSingleProject200 = SchedulingProjectsTotalsDtoV1
850
+ export type PublishAssignmentsRequestJson = PublishAssignmentsRequestV1
851
+ export const PublishAssignmentsRequestJson = PublishAssignmentsRequestV1
852
+ export type CreateRecurringRequestJson = AssignmentCreateRequestV1
853
+ export const CreateRecurringRequestJson = AssignmentCreateRequestV1
854
+ export type CreateRecurring201 = ReadonlyArray<AssignmentDtoV1>
855
+ export const CreateRecurring201 = Schema.Array(AssignmentDtoV1)
856
+ export type DeleteRRecurringAssignmentParams = { readonly "seriesUpdateOption"?: "THIS_ONE" | "THIS_AND_FOLLOWING" | "ALL" }
857
+ export const DeleteRRecurringAssignmentParams = Schema.Struct({ "seriesUpdateOption": Schema.optionalKey(Schema.Literals(["THIS_ONE", "THIS_AND_FOLLOWING", "ALL"])) })
858
+ export type DeleteRRecurringAssignment200 = ReadonlyArray<AssignmentDtoV1>
859
+ export const DeleteRRecurringAssignment200 = Schema.Array(AssignmentDtoV1)
860
+ export type EditRecurringRequestJson = AssignmentUpdateRequestV1
861
+ export const EditRecurringRequestJson = AssignmentUpdateRequestV1
862
+ export type EditRecurring200 = ReadonlyArray<AssignmentDtoV1>
863
+ export const EditRecurring200 = Schema.Array(AssignmentDtoV1)
864
+ export type EditRecurringPeriodRequestJson = RecurringAssignmentRequestV1
865
+ export const EditRecurringPeriodRequestJson = RecurringAssignmentRequestV1
866
+ export type EditRecurringPeriod200 = ReadonlyArray<AssignmentDtoV1>
867
+ export const EditRecurringPeriod200 = Schema.Array(AssignmentDtoV1)
868
+ export type GetUserTotalsRequestJson = GetUserTotalsRequestV1
869
+ export const GetUserTotalsRequestJson = GetUserTotalsRequestV1
870
+ export type GetUserTotals200 = ReadonlyArray<SchedulingUsersTotalsDtoV1>
871
+ export const GetUserTotals200 = Schema.Array(SchedulingUsersTotalsDtoV1)
872
+ export type GetUserTotalsForSingleUserParams = { readonly "page"?: number, readonly "page-size"?: number, readonly "start": string, readonly "end": string }
873
+ export const GetUserTotalsForSingleUserParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "start": Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." }), "end": Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format." }) })
874
+ export type GetUserTotalsForSingleUser200 = SchedulingUsersTotalsDtoV1
875
+ export const GetUserTotalsForSingleUser200 = SchedulingUsersTotalsDtoV1
876
+ export type CopyAssignmentRequestJson = CopyAssignmentRequestV1
877
+ export const CopyAssignmentRequestJson = CopyAssignmentRequestV1
878
+ export type CopyAssignment200 = ReadonlyArray<AssignmentDtoV1>
879
+ export const CopyAssignment200 = Schema.Array(AssignmentDtoV1)
880
+ export type GetTagsParams = { readonly "name"?: string, readonly "strict-name-search"?: boolean, readonly "excluded-ids"?: string, readonly "sort-column"?: "ID" | "NAME", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "page"?: number, readonly "page-size"?: number, readonly "archived"?: boolean }
881
+ export const GetTagsParams = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of tags that matches the provided string in their name." })), "strict-name-search": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to toggle on/off strict search mode. When set to true, search by name will only return tags whose name exactly matches the string value given for the 'name' parameter. When set to false, results will also include tags whose name contain the string value, but could be longer than the string value itself. For example, if there is a tag with the name 'applications', and the search value is 'app', setting strict-name-search to true will not return that tag in the results, whereas setting it to false will." })), "excluded-ids": Schema.optionalKey(Schema.String), "sort-column": Schema.optionalKey(Schema.Literals(["ID", "NAME"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "archived": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Filters the result whether tags are archived or not." })) })
882
+ export type GetTags200 = ReadonlyArray<TagDtoV1>
883
+ export const GetTags200 = Schema.Array(TagDtoV1)
884
+ export type CreateNewTagRequestJson = TagRequest
885
+ export const CreateNewTagRequestJson = TagRequest
886
+ export type CreateNewTag201 = TagDtoV1
887
+ export const CreateNewTag201 = TagDtoV1
888
+ export type GetTag200 = TagDtoV1
889
+ export const GetTag200 = TagDtoV1
890
+ export type UpdateTagRequestJson = UpdateTagRequest
891
+ export const UpdateTagRequestJson = UpdateTagRequest
892
+ export type UpdateTag200 = TagDtoV1
893
+ export const UpdateTag200 = TagDtoV1
894
+ export type DeleteTag200 = TagDtoV1
895
+ export const DeleteTag200 = TagDtoV1
896
+ export type GetTemplatesParams = { readonly "name"?: string, readonly "cleansed"?: boolean, readonly "hydrated"?: boolean, readonly "page"?: number, readonly "page-size"?: number }
897
+ export const GetTemplatesParams = Schema.Struct({ "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of templates that contain the provided string in their name." })), "cleansed": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true will filter out inactive template projects and tasks." })), "hydrated": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true will return hydrated template projects and tasks." })), "page": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())) })
898
+ export type GetTemplates200 = ReadonlyArray<TemplateDto>
899
+ export const GetTemplates200 = Schema.Array(TemplateDto)
900
+ export type CreateManyRequestJson = ReadonlyArray<TemplateRequest>
901
+ export const CreateManyRequestJson = Schema.Array(TemplateRequest)
902
+ export type CreateMany200 = ReadonlyArray<TemplateDtoImpl>
903
+ export const CreateMany200 = Schema.Array(TemplateDtoImpl)
904
+ export type GetTemplateParams = { readonly "cleansed"?: boolean, readonly "hydrated"?: boolean }
905
+ export const GetTemplateParams = Schema.Struct({ "cleansed": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true will filter out inactive template projects and tasks." })), "hydrated": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true will return hydrated template projects and tasks." })) })
906
+ export type GetTemplate200 = TemplateDto
907
+ export const GetTemplate200 = TemplateDto
908
+ export type Delete1200 = TemplateDtoImpl
909
+ export const Delete1200 = TemplateDtoImpl
910
+ export type UpdateRequestJson = TemplatePatchRequest
911
+ export const UpdateRequestJson = TemplatePatchRequest
912
+ export type Update200 = TemplateDtoImpl
913
+ export const Update200 = TemplateDtoImpl
914
+ export type CreateTimeEntryRequestJson = CreateTimeEntryRequest
915
+ export const CreateTimeEntryRequestJson = CreateTimeEntryRequest
916
+ export type CreateTimeEntry201 = TimeEntryDtoImplV1
917
+ export const CreateTimeEntry201 = TimeEntryDtoImplV1
918
+ export type UpdateInvoicedStatusRequestJson = UpdateInvoicedStatusRequest
919
+ export const UpdateInvoicedStatusRequestJson = UpdateInvoicedStatusRequest
920
+ export type GetInProgressTimeEntriesParams = { readonly "page"?: number, readonly "page-size"?: number }
921
+ export const GetInProgressTimeEntriesParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "page-size": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(1000))) })
922
+ export type GetTimeEntryParams = { readonly "hydrated"?: boolean }
923
+ export const GetTimeEntryParams = Schema.Struct({ "hydrated": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether to include additional information of a time entry or not." })) })
924
+ export type GetTimeEntry200 = TimeEntryWithRatesDtoV1
925
+ export const GetTimeEntry200 = TimeEntryWithRatesDtoV1
926
+ export type UpdateTimeEntryRequestJson = UpdateTimeEntryRequest
927
+ export const UpdateTimeEntryRequestJson = UpdateTimeEntryRequest
928
+ export type UpdateTimeEntry200 = TimeEntryDtoImplV1
929
+ export const UpdateTimeEntry200 = TimeEntryDtoImplV1
930
+ export type GetBalancesForPolicyParams = { readonly "page"?: number, readonly "page-size"?: number, readonly "sort"?: "USER" | "POLICY" | "USED" | "BALANCE" | "TOTAL", readonly "sort-order"?: "ASCENDING" | "DESCENDING" }
931
+ export const GetBalancesForPolicyParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt()).check(Schema.isLessThanOrEqualTo(1000))), "page-size": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(200))), "sort": Schema.optionalKey(Schema.Literals(["USER", "POLICY", "USED", "BALANCE", "TOTAL"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])) })
932
+ export type UpdateBalanceRequestJson = UpdateBalanceRequestV1
933
+ export const UpdateBalanceRequestJson = UpdateBalanceRequestV1
934
+ export type GetBalancesForUserParams = { readonly "page"?: string, readonly "page-size"?: string, readonly "sort"?: "USER" | "POLICY" | "USED" | "BALANCE" | "TOTAL", readonly "sort-order"?: "ASCENDING" | "DESCENDING" }
935
+ export const GetBalancesForUserParams = Schema.Struct({ "page": Schema.optionalKey(Schema.String), "page-size": Schema.optionalKey(Schema.String), "sort": Schema.optionalKey(Schema.Literals(["USER", "POLICY", "USED", "BALANCE", "TOTAL"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])) })
936
+ export type FindPoliciesForWorkspaceParams = { readonly "page"?: string, readonly "page-size"?: number, readonly "name"?: string, readonly "status"?: "ACTIVE" | "ARCHIVED" | "ALL", readonly "sort-column"?: string, readonly "sort-order"?: string }
937
+ export const FindPoliciesForWorkspaceParams = Schema.Struct({ "page": Schema.optionalKey(Schema.String), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1)).check(Schema.isLessThanOrEqualTo(200))), "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of policies that contain the provided string in their name." })), "status": Schema.optionalKey(Schema.Literals(["ACTIVE", "ARCHIVED", "ALL"])), "sort-column": Schema.optionalKey(Schema.String), "sort-order": Schema.optionalKey(Schema.String) })
938
+ export type FindPoliciesForWorkspace200 = ReadonlyArray<PolicyDtoV1>
939
+ export const FindPoliciesForWorkspace200 = Schema.Array(PolicyDtoV1)
940
+ export type CreatePolicyRequestJson = CreatePolicyRequestV1
941
+ export const CreatePolicyRequestJson = CreatePolicyRequestV1
942
+ export type CreatePolicy201 = PolicyDtoV1
943
+ export const CreatePolicy201 = PolicyDtoV1
944
+ export type GetPolicy200 = PolicyDtoV1
945
+ export const GetPolicy200 = PolicyDtoV1
946
+ export type UpdatePolicyRequestJson = UpdatePolicyRequestV1
947
+ export const UpdatePolicyRequestJson = UpdatePolicyRequestV1
948
+ export type UpdatePolicy200 = PolicyDtoV1
949
+ export const UpdatePolicy200 = PolicyDtoV1
950
+ export type UpdatePolicyStatusRequestJson = ChangePolicyStatusRequestV1
951
+ export const UpdatePolicyStatusRequestJson = ChangePolicyStatusRequestV1
952
+ export type UpdatePolicyStatus200 = PolicyDtoV1
953
+ export const UpdatePolicyStatus200 = PolicyDtoV1
954
+ export type CreateTimeOffRequestRequestJson = CreateTimeOffRequestV1Request
955
+ export const CreateTimeOffRequestRequestJson = CreateTimeOffRequestV1Request
956
+ export type CreateTimeOffRequest200 = TimeOffRequestFullV1Dto
957
+ export const CreateTimeOffRequest200 = TimeOffRequestFullV1Dto
958
+ export type DeleteTimeOffRequest200 = TimeOffRequestV1Dto
959
+ export const DeleteTimeOffRequest200 = TimeOffRequestV1Dto
960
+ export type ChangeTimeOffRequestStatusRequestJson = StatusTimeOffRequestV1Request
961
+ export const ChangeTimeOffRequestStatusRequestJson = StatusTimeOffRequestV1Request
962
+ export type ChangeTimeOffRequestStatus200 = TimeOffRequestV1Dto
963
+ export const ChangeTimeOffRequestStatus200 = TimeOffRequestV1Dto
964
+ export type CreateTimeOffRequestForOtherRequestJson = CreateTimeOffRequestV1Request
965
+ export const CreateTimeOffRequestForOtherRequestJson = CreateTimeOffRequestV1Request
966
+ export type CreateTimeOffRequestForOther200 = TimeOffRequestFullV1Dto
967
+ export const CreateTimeOffRequestForOther200 = TimeOffRequestFullV1Dto
968
+ export type GetTimeOffRequestRequestJson = GetTimeOffRequestsV1Request
969
+ export const GetTimeOffRequestRequestJson = GetTimeOffRequestsV1Request
970
+ export type GetTimeOffRequest200 = TimeOffRequestsWithCountV1Dto
971
+ export const GetTimeOffRequest200 = TimeOffRequestsWithCountV1Dto
972
+ export type GetUserGroupsParams = { readonly "project-id"?: string, readonly "name"?: string, readonly "sort-column"?: "ID" | "NAME", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "page"?: number, readonly "page-size"?: number, readonly "includeTeamManagers"?: boolean }
973
+ export const GetUserGroupsParams = Schema.Struct({ "project-id": Schema.optionalKey(Schema.String), "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of groups that matches the string provided in their name." })), "sort-column": Schema.optionalKey(Schema.Literals(["ID", "NAME"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "includeTeamManagers": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If provided, you'll get a list of team managers assigned to this user group." })) })
974
+ export type GetUserGroups200 = ReadonlyArray<UserGroupDtoV1>
975
+ export const GetUserGroups200 = Schema.Array(UserGroupDtoV1)
976
+ export type CreateUserGroupRequestJson = UserGroupRequest
977
+ export const CreateUserGroupRequestJson = UserGroupRequest
978
+ export type CreateUserGroup201 = UserGroupDtoV1
979
+ export const CreateUserGroup201 = UserGroupDtoV1
980
+ export type UpdateUserGroupRequestJson = UpdateUserGroupRequest
981
+ export const UpdateUserGroupRequestJson = UpdateUserGroupRequest
982
+ export type UpdateUserGroup200 = UserGroupDtoV1
983
+ export const UpdateUserGroup200 = UserGroupDtoV1
984
+ export type DeleteUserGroup200 = UserGroupDtoV1
985
+ export const DeleteUserGroup200 = UserGroupDtoV1
986
+ export type AddUserRequestJson = UserGroupUserRequest
987
+ export const AddUserRequestJson = UserGroupUserRequest
988
+ export type AddUser200 = UserGroupDtoV1
989
+ export const AddUser200 = UserGroupDtoV1
990
+ export type DeleteUser200 = UserGroupDtoV1
991
+ export const DeleteUser200 = UserGroupDtoV1
992
+ export type GetTimeEntriesParams = { readonly "description"?: string, readonly "start"?: string, readonly "end"?: string, readonly "project"?: string, readonly "task"?: string, readonly "tags"?: ReadonlyArray<string>, readonly "project-required"?: boolean, readonly "task-required"?: boolean, readonly "hydrated"?: boolean, readonly "page"?: number, readonly "page-size"?: number, readonly "in-progress"?: string, readonly "get-week-before"?: string }
993
+ export const GetTimeEntriesParams = Schema.Struct({ "description": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a term for searching time entries by description." })), "start": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a start date in the yyyy-MM-ddThh:mm:ssZ format." })), "end": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an end date in the yyyy-MM-ddThh:mm:ssZ format." })), "project": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of time entries that matches the provided string in their project id." })), "task": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of time entries that matches the provided string in their task id." })), "tags": Schema.optionalKey(Schema.Array(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of time entries that matches the provided string(s) in their tag id(s)." })).annotate({ "description": "If provided, you'll get a filtered list of time entries that matches the provided string(s) in their tag id(s)." }).check(Schema.isUnique())), "project-required": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether to only get time entries which have a project." })), "task-required": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether to only get time entries which have tasks." })), "hydrated": Schema.optionalKey(Schema.Boolean.annotate({ "description": "Flag to set whether to include additional information on time entries or not." })), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "in-progress": Schema.optionalKey(Schema.String), "get-week-before": Schema.optionalKey(Schema.String.annotate({ "description": "Valid yyyy-MM-ddThh:mm:ssZ format date. If provided, filters results within the week before the datetime provided and only those entries with assigned project or task." })) })
994
+ export type GetTimeEntries200 = ReadonlyArray<TimeEntryWithRatesDtoV1>
995
+ export const GetTimeEntries200 = Schema.Array(TimeEntryWithRatesDtoV1)
996
+ export type ReplaceManyParams = { readonly "hydrated"?: boolean }
997
+ export const ReplaceManyParams = Schema.Struct({ "hydrated": Schema.optionalKey(Schema.Boolean.annotate({ "description": "If set to true, results will contain additional information about the time entry." })) })
998
+ export type ReplaceManyRequestJson = ReadonlyArray<UpdateTimeEntryBulkRequest>
999
+ export const ReplaceManyRequestJson = Schema.Array(UpdateTimeEntryBulkRequest).check(Schema.isMinLength(1))
1000
+ export type ReplaceMany200 = ReadonlyArray<TimeEntryDtoV1>
1001
+ export const ReplaceMany200 = Schema.Array(TimeEntryDtoV1)
1002
+ export type CreateForOthersParams = { readonly "from-entry"?: string }
1003
+ export const CreateForOthersParams = Schema.Struct({ "from-entry": Schema.optionalKey(Schema.String.annotate({ "description": "Represents a time entry identifier across the system." })) })
1004
+ export type CreateForOthersRequestJson = CreateTimeEntryRequest
1005
+ export const CreateForOthersRequestJson = CreateTimeEntryRequest
1006
+ export type CreateForOthers201 = TimeEntryDtoImplV1
1007
+ export const CreateForOthers201 = TimeEntryDtoImplV1
1008
+ export type DeleteManyParams = { readonly "time-entry-ids": ReadonlyArray<string> }
1009
+ export const DeleteManyParams = Schema.Struct({ "time-entry-ids": Schema.Array(Schema.String.annotate({ "description": "Represents a list of time entry ids to delete." })).annotate({ "description": "Represents a list of time entry ids to delete." }) })
1010
+ export type DeleteMany200 = ReadonlyArray<TimeEntryDtoImplV1>
1011
+ export const DeleteMany200 = Schema.Array(TimeEntryDtoImplV1)
1012
+ export type StopRunningTimeEntryRequestJson = StopTimeEntryRequest
1013
+ export const StopRunningTimeEntryRequestJson = StopTimeEntryRequest
1014
+ export type StopRunningTimeEntry200 = TimeEntryDtoImplV1
1015
+ export const StopRunningTimeEntry200 = TimeEntryDtoImplV1
1016
+ export type DuplicateTimeEntry201 = TimeEntryDtoImplV1
1017
+ export const DuplicateTimeEntry201 = TimeEntryDtoImplV1
1018
+ export type GetUsersOfWorkspaceParams = { readonly "email"?: string, readonly "project-id"?: string, readonly "status"?: "PENDING" | "ACTIVE" | "DECLINED" | "INACTIVE" | "ALL", readonly "account-statuses"?: string, readonly "name"?: string, readonly "sort-column"?: "ID" | "EMAIL" | "NAME" | "NAME_LOWERCASE" | "ACCESS" | "HOURLYRATE" | "COSTRATE", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "page"?: number, readonly "page-size"?: number, readonly "memberships"?: "ALL" | "NONE" | "WORKSPACE" | "PROJECT" | "USERGROUP", readonly "include-roles": string }
1019
+ export const GetUsersOfWorkspaceParams = Schema.Struct({ "email": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of users that contain the provided string in their email address." })), "project-id": Schema.optionalKey(Schema.String), "status": Schema.optionalKey(Schema.Literals(["PENDING", "ACTIVE", "DECLINED", "INACTIVE", "ALL"])), "account-statuses": Schema.optionalKey(Schema.String), "name": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get a filtered list of users that contain the provided string in their name" })), "sort-column": Schema.optionalKey(Schema.Literals(["ID", "EMAIL", "NAME", "NAME_LOWERCASE", "ACCESS", "HOURLYRATE", "COSTRATE"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "memberships": Schema.optionalKey(Schema.Literals(["ALL", "NONE", "WORKSPACE", "PROJECT", "USERGROUP"])), "include-roles": Schema.String })
1020
+ export type GetUsersOfWorkspace200 = ReadonlyArray<UserDtoV1>
1021
+ export const GetUsersOfWorkspace200 = Schema.Array(UserDtoV1)
1022
+ export type AddUsersParams = { readonly "send-email": string }
1023
+ export const AddUsersParams = Schema.Struct({ "send-email": Schema.String })
1024
+ export type AddUsersRequestJson = AddUserToWorkspaceRequest
1025
+ export const AddUsersRequestJson = AddUserToWorkspaceRequest
1026
+ export type AddUsers200 = WorkspaceDtoV1
1027
+ export const AddUsers200 = WorkspaceDtoV1
1028
+ export type FilterUsersOfWorkspaceRequestJson = GetUsersRequestV1
1029
+ export const FilterUsersOfWorkspaceRequestJson = GetUsersRequestV1
1030
+ export type FilterUsersOfWorkspace200 = ReadonlyArray<UserDtoV1>
1031
+ export const FilterUsersOfWorkspace200 = Schema.Array(UserDtoV1)
1032
+ export type UpdateUserStatusRequestJson = UpdateUserStatusRequest
1033
+ export const UpdateUserStatusRequestJson = UpdateUserStatusRequest
1034
+ export type UpdateUserStatus200 = WorkspaceDtoV1
1035
+ export const UpdateUserStatus200 = WorkspaceDtoV1
1036
+ export type RemoveMember200 = WorkspaceDtoV1
1037
+ export const RemoveMember200 = WorkspaceDtoV1
1038
+ export type SetCostRateForUserRequestJson = CostRateRequestV1
1039
+ export const SetCostRateForUserRequestJson = CostRateRequestV1
1040
+ export type SetCostRateForUser200 = WorkspaceDtoV1
1041
+ export const SetCostRateForUser200 = WorkspaceDtoV1
1042
+ export type UpsertUserCustomFieldValueRequestJson = UpsertUserCustomFieldRequestV1
1043
+ export const UpsertUserCustomFieldValueRequestJson = UpsertUserCustomFieldRequestV1
1044
+ export type UpsertUserCustomFieldValue201 = UserCustomFieldValueDtoV1
1045
+ export const UpsertUserCustomFieldValue201 = UserCustomFieldValueDtoV1
1046
+ export type SetHourlyRateForUserRequestJson = HourlyRateRequestV1
1047
+ export const SetHourlyRateForUserRequestJson = HourlyRateRequestV1
1048
+ export type SetHourlyRateForUser200 = WorkspaceDtoV1
1049
+ export const SetHourlyRateForUser200 = WorkspaceDtoV1
1050
+ export type GetManagersOfUserParams = { readonly "sort-column"?: "ID" | "EMAIL" | "NAME" | "NAME_LOWERCASE" | "ACCESS" | "HOURLYRATE" | "COSTRATE", readonly "sort-order"?: "ASCENDING" | "DESCENDING", readonly "page"?: number, readonly "page-size"?: number }
1051
+ export const GetManagersOfUserParams = Schema.Struct({ "sort-column": Schema.optionalKey(Schema.Literals(["ID", "EMAIL", "NAME", "NAME_LOWERCASE", "ACCESS", "HOURLYRATE", "COSTRATE"])), "sort-order": Schema.optionalKey(Schema.Literals(["ASCENDING", "DESCENDING"])), "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "page-size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))) })
1052
+ export type GetManagersOfUser200 = ReadonlyArray<UserDtoV1>
1053
+ export const GetManagersOfUser200 = Schema.Array(UserDtoV1)
1054
+ export type CreateUserRoleRequestJson = RoleRequestV1
1055
+ export const CreateUserRoleRequestJson = RoleRequestV1
1056
+ export type CreateUserRole201 = ReadonlyArray<RoleDetailsDtoV1>
1057
+ export const CreateUserRole201 = Schema.Array(RoleDetailsDtoV1)
1058
+ export type DeleteUserRoleRequestJson = RoleRequestV1
1059
+ export const DeleteUserRoleRequestJson = RoleRequestV1
1060
+ export type GetWebhooksParams = { readonly "type"?: "USER_CREATED" | "SYSTEM" | "ADDON" }
1061
+ export const GetWebhooksParams = Schema.Struct({ "type": Schema.optionalKey(Schema.Literals(["USER_CREATED", "SYSTEM", "ADDON"])) })
1062
+ export type GetWebhooks200 = WebhooksDtoV1
1063
+ export const GetWebhooks200 = WebhooksDtoV1
1064
+ export type CreateWebhookRequestJson = CreateWebhookRequestV1
1065
+ export const CreateWebhookRequestJson = CreateWebhookRequestV1
1066
+ export type CreateWebhook201 = WebhookDtoV1
1067
+ export const CreateWebhook201 = WebhookDtoV1
1068
+ export type GetWebhook200 = WebhookDtoV1
1069
+ export const GetWebhook200 = WebhookDtoV1
1070
+ export type UpdateWebhookRequestJson = UpdateWebhookRequestV1
1071
+ export const UpdateWebhookRequestJson = UpdateWebhookRequestV1
1072
+ export type UpdateWebhook200 = WebhookDtoV1
1073
+ export const UpdateWebhook200 = WebhookDtoV1
1074
+ export type GetLogsForWebhookParams = { readonly "page"?: number, readonly "size"?: number }
1075
+ export const GetLogsForWebhookParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))) })
1076
+ export type GetLogsForWebhookRequestJson = WebhookLogSearchRequestV1
1077
+ export const GetLogsForWebhookRequestJson = WebhookLogSearchRequestV1
1078
+ export type GetLogsForWebhook200 = ReadonlyArray<WebhookLogDtoV1>
1079
+ export const GetLogsForWebhook200 = Schema.Array(WebhookLogDtoV1)
1080
+ export type GetWebhookEventStatusesWithLatestLogParams = { readonly "page"?: number, readonly "size"?: number, readonly "statuses"?: "SUCCEEDED" | "RETRYING" | "FAILED" }
1081
+ export const GetWebhookEventStatusesWithLatestLogParams = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "size": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "statuses": Schema.optionalKey(Schema.Literals(["SUCCEEDED", "RETRYING", "FAILED"])) })
1082
+ export type GetWebhookEventStatusesWithLatestLog200 = ReadonlyArray<WebhookEventStatusWithLatestLogDtoV1>
1083
+ export const GetWebhookEventStatusesWithLatestLog200 = Schema.Array(WebhookEventStatusWithLatestLogDtoV1)
1084
+ export type GenerateNewToken200 = WebhookDtoV1
1085
+ export const GenerateNewToken200 = WebhookDtoV1
1086
+ export type GenerateSharedReportV1Params = { readonly "dateRangeStart"?: string, readonly "dateRangeEnd"?: string, readonly "sortOrder"?: string, readonly "sortColumn"?: string, readonly "exportType"?: string, readonly "page"?: number, readonly "pageSize"?: number }
1087
+ export const GenerateSharedReportV1Params = Schema.Struct({ "dateRangeStart": Schema.optionalKey(Schema.String.annotate({ "description": "Provide the start date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" })), "dateRangeEnd": Schema.optionalKey(Schema.String.annotate({ "description": "Provide the end date in format YYYY-MM-DDTHH:MM:SS.ssssss. The system interprets this value based on the user's timezone (provided in the timeZone request parameter or the timezone configured in the user profile)" })), "sortOrder": Schema.optionalKey(Schema.String.annotate({ "description": "Sort result in ascending or descending order" })), "sortColumn": Schema.optionalKey(Schema.String.annotate({ "description": "If provided, you'll get result sorted by sort column." })), "exportType": Schema.optionalKey(Schema.String.annotate({ "description": "Represents an export type of shared report" })), "page": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "format": "int32" }).check(Schema.isInt())) })
1088
+ export type GenerateAttendanceReportRequestJson = AttendanceReportFilterV1
1089
+ export const GenerateAttendanceReportRequestJson = AttendanceReportFilterV1
1090
+ export type GenerateDetailedReportRequestJson = DetailedReportFilterV1
1091
+ export const GenerateDetailedReportRequestJson = DetailedReportFilterV1
1092
+ export type GenerateDetailedReportV1RequestJson = ExpenseReportFilterV1
1093
+ export const GenerateDetailedReportV1RequestJson = ExpenseReportFilterV1
1094
+ export type GenerateDetailedReportV1200 = ExpenseDetailedReportDtoV1
1095
+ export const GenerateDetailedReportV1200 = ExpenseDetailedReportDtoV1
1096
+ export type GenerateSummaryReportRequestJson = SummaryReportFilterV1
1097
+ export const GenerateSummaryReportRequestJson = SummaryReportFilterV1
1098
+ export type GenerateWeeklyReportRequestJson = WeeklyReportFilterV1
1099
+ export const GenerateWeeklyReportRequestJson = WeeklyReportFilterV1
1100
+ export type GetSharedReportsV1Params = { readonly "page"?: number, readonly "pageSize"?: number, readonly "sharedReportsFilter"?: "ALL" | "ALL_ADMIN" | "CREATED_BY_ME" | "SHARED_WITH_ME" }
1101
+ export const GetSharedReportsV1Params = Schema.Struct({ "page": Schema.optionalKey(Schema.Number.annotate({ "description": "Page number.", "format": "int32" }).check(Schema.isInt())), "pageSize": Schema.optionalKey(Schema.Number.annotate({ "description": "Page size.", "format": "int32" }).check(Schema.isInt()).check(Schema.isGreaterThanOrEqualTo(1))), "sharedReportsFilter": Schema.optionalKey(Schema.Literals(["ALL", "ALL_ADMIN", "CREATED_BY_ME", "SHARED_WITH_ME"]).annotate({ "description": "Filters shared reports by origin." })) })
1102
+ export type SaveSharedReportV1RequestJson = SharedReportRequestV1
1103
+ export const SaveSharedReportV1RequestJson = SharedReportRequestV1
1104
+ export type UpdateSharedReportV1RequestJson = UpdateSharedReportRequestV1
1105
+ export const UpdateSharedReportV1RequestJson = UpdateSharedReportRequestV1
1106
+ export type GetAuditLogsRequestJson = AuditLogGetRequestV1
1107
+ export const GetAuditLogsRequestJson = AuditLogGetRequestV1
1108
+ export type GetAuditLogs200 = PageableV1ListAuditLogDtoV1
1109
+ export const GetAuditLogs200 = PageableV1ListAuditLogDtoV1
1110
+
1111
+ export interface OperationConfig {
1112
+ /**
1113
+ * Whether or not the response should be included in the value returned from
1114
+ * an operation.
1115
+ *
1116
+ * If set to `true`, a tuple of `[A, HttpClientResponse]` will be returned,
1117
+ * where `A` is the success type of the operation.
1118
+ *
1119
+ * If set to `false`, only the success type of the operation will be returned.
1120
+ */
1121
+ readonly includeResponse?: boolean | undefined
1122
+ }
1123
+
1124
+ /**
1125
+ * A utility type which optionally includes the response in the return result
1126
+ * of an operation based upon the value of the `includeResponse` configuration
1127
+ * option.
1128
+ */
1129
+ export type WithOptionalResponse<A, Config extends OperationConfig> = Config extends {
1130
+ readonly includeResponse: true
1131
+ } ? [A, HttpClientResponse.HttpClientResponse] : A
1132
+
1133
+ export const make = (
1134
+ httpClient: HttpClient.HttpClient,
1135
+ options: {
1136
+ readonly transformClient?: ((client: HttpClient.HttpClient) => Effect.Effect<HttpClient.HttpClient>) | undefined
1137
+ } = {}
1138
+ ): ClockifyApi => {
1139
+ const unexpectedStatus = (response: HttpClientResponse.HttpClientResponse) =>
1140
+ Effect.flatMap(
1141
+ Effect.orElseSucceed(response.json, () => "Unexpected status code"),
1142
+ (description) =>
1143
+ Effect.fail(
1144
+ new HttpClientError.HttpClientError({
1145
+ reason: new HttpClientError.StatusCodeError({
1146
+ request: response.request,
1147
+ response,
1148
+ description: typeof description === "string" ? description : JSON.stringify(description),
1149
+ }),
1150
+ }),
1151
+ ),
1152
+ )
1153
+ const withResponse = <Config extends OperationConfig>(config: Config | undefined) => (
1154
+ f: (response: HttpClientResponse.HttpClientResponse) => Effect.Effect<any, any>,
1155
+ ): (request: HttpClientRequest.HttpClientRequest) => Effect.Effect<any, any> => {
1156
+ const withOptionalResponse = (
1157
+ config?.includeResponse
1158
+ ? (response: HttpClientResponse.HttpClientResponse) => Effect.map(f(response), (a) => [a, response])
1159
+ : (response: HttpClientResponse.HttpClientResponse) => f(response)
1160
+ ) as any
1161
+ return options?.transformClient
1162
+ ? (request) =>
1163
+ Effect.flatMap(
1164
+ Effect.flatMap(options.transformClient!(httpClient), (client) => client.execute(request)),
1165
+ withOptionalResponse
1166
+ )
1167
+ : (request) => Effect.flatMap(httpClient.execute(request), withOptionalResponse)
1168
+ }
1169
+ const decodeSuccess =
1170
+ <Schema extends Schema.Constraint>(schema: Schema) =>
1171
+ (response: HttpClientResponse.HttpClientResponse) =>
1172
+ HttpClientResponse.schemaBodyJson(schema)(response)
1173
+ return {
1174
+ httpClient,
1175
+ "uploadImage": (options) => HttpClientRequest.post(`/v1/file/image`).pipe(
1176
+ HttpClientRequest.bodyFormDataRecord(options.payload as any),
1177
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1178
+ "2xx": decodeSuccess(UploadImage200),
1179
+ orElse: unexpectedStatus
1180
+ }))
1181
+ ),
1182
+ "getLoggedUser": (options) => HttpClientRequest.get(`/v1/user`).pipe(
1183
+ HttpClientRequest.setUrlParams({ "include-memberships": options?.params?.["include-memberships"] as any }),
1184
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1185
+ "2xx": decodeSuccess(GetLoggedUser200),
1186
+ orElse: unexpectedStatus
1187
+ }))
1188
+ ),
1189
+ "getWorkspacesOfUser": (options) => HttpClientRequest.get(`/v1/workspaces`).pipe(
1190
+ HttpClientRequest.setUrlParams({ "roles": options?.params?.["roles"] as any }),
1191
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1192
+ "2xx": decodeSuccess(GetWorkspacesOfUser200),
1193
+ orElse: unexpectedStatus
1194
+ }))
1195
+ ),
1196
+ "createWorkspace": (options) => HttpClientRequest.post(`/v1/workspaces`).pipe(
1197
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1198
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1199
+ "2xx": decodeSuccess(CreateWorkspace201),
1200
+ orElse: unexpectedStatus
1201
+ }))
1202
+ ),
1203
+ "getWorkspaceOfUser": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}`).pipe(
1204
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1205
+ "2xx": decodeSuccess(GetWorkspaceOfUser200),
1206
+ orElse: unexpectedStatus
1207
+ }))
1208
+ ),
1209
+ "getAddonWebhooks": (workspaceId, addonId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/addons/${addonId}/webhooks`).pipe(
1210
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1211
+ "2xx": decodeSuccess(GetAddonWebhooks200),
1212
+ orElse: unexpectedStatus
1213
+ }))
1214
+ ),
1215
+ "getApprovalRequests": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/approval-requests`).pipe(
1216
+ HttpClientRequest.setUrlParams({ "status": options?.params?.["status"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any }),
1217
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1218
+ "2xx": decodeSuccess(GetApprovalRequests200),
1219
+ orElse: unexpectedStatus
1220
+ }))
1221
+ ),
1222
+ "createApprrovalRequest": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/approval-requests`).pipe(
1223
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1224
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1225
+ "2xx": decodeSuccess(CreateApprrovalRequest201),
1226
+ orElse: unexpectedStatus
1227
+ }))
1228
+ ),
1229
+ "resubmitApprovalRequest": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/approval-requests/resubmit-entries-for-approval`).pipe(
1230
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1231
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1232
+ orElse: unexpectedStatus
1233
+ }))
1234
+ ),
1235
+ "createApprovalForOther": (workspaceId, userId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/approval-requests/users/${userId}`).pipe(
1236
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1237
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1238
+ "2xx": decodeSuccess(CreateApprovalForOther201),
1239
+ orElse: unexpectedStatus
1240
+ }))
1241
+ ),
1242
+ "resubmitApprovalRequestForOther": (workspaceId, userId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/approval-requests/users/${userId}/resubmit-entries-for-approval`).pipe(
1243
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1244
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1245
+ orElse: unexpectedStatus
1246
+ }))
1247
+ ),
1248
+ "updateApprovalStatus": (workspaceId, approvalRequestId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/approval-requests/${approvalRequestId}`).pipe(
1249
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1250
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1251
+ "2xx": decodeSuccess(UpdateApprovalStatus200),
1252
+ orElse: unexpectedStatus
1253
+ }))
1254
+ ),
1255
+ "getClients": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/clients`).pipe(
1256
+ HttpClientRequest.setUrlParams({ "name": options?.params?.["name"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "archived": options?.params?.["archived"] as any }),
1257
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1258
+ "2xx": decodeSuccess(GetClients200),
1259
+ orElse: unexpectedStatus
1260
+ }))
1261
+ ),
1262
+ "createClient": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/clients`).pipe(
1263
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1264
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1265
+ "2xx": decodeSuccess(CreateClient201),
1266
+ orElse: unexpectedStatus
1267
+ }))
1268
+ ),
1269
+ "getClient": (workspaceId, id, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/clients/${id}`).pipe(
1270
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1271
+ "2xx": decodeSuccess(GetClient200),
1272
+ orElse: unexpectedStatus
1273
+ }))
1274
+ ),
1275
+ "updateClient": (workspaceId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/clients/${id}`).pipe(
1276
+ HttpClientRequest.setUrlParams({ "archive-projects": options.params?.["archive-projects"] as any, "mark-tasks-as-done": options.params?.["mark-tasks-as-done"] as any }),
1277
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1278
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1279
+ "2xx": decodeSuccess(UpdateClient200),
1280
+ orElse: unexpectedStatus
1281
+ }))
1282
+ ),
1283
+ "deleteClient": (workspaceId, id, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/clients/${id}`).pipe(
1284
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1285
+ "2xx": decodeSuccess(DeleteClient200),
1286
+ orElse: unexpectedStatus
1287
+ }))
1288
+ ),
1289
+ "setWorkspaceCostRate": (workspaceId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/cost-rate`).pipe(
1290
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1291
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1292
+ "2xx": decodeSuccess(SetWorkspaceCostRate200),
1293
+ orElse: unexpectedStatus
1294
+ }))
1295
+ ),
1296
+ "ofWorkspace": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/custom-fields`).pipe(
1297
+ HttpClientRequest.setUrlParams({ "name": options?.params?.["name"] as any, "status": options?.params?.["status"] as any, "entity-type": options?.params?.["entity-type"] as any }),
1298
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1299
+ "2xx": decodeSuccess(OfWorkspace200),
1300
+ orElse: unexpectedStatus
1301
+ }))
1302
+ ),
1303
+ "create": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/custom-fields`).pipe(
1304
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1305
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1306
+ orElse: unexpectedStatus
1307
+ }))
1308
+ ),
1309
+ "editCustomField": (workspaceId, customFieldId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/custom-fields/${customFieldId}`).pipe(
1310
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1311
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1312
+ "2xx": decodeSuccess(EditCustomField200),
1313
+ orElse: unexpectedStatus
1314
+ }))
1315
+ ),
1316
+ "delete": (workspaceId, customFieldId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/custom-fields/${customFieldId}`).pipe(
1317
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1318
+ "204": () => Effect.void,
1319
+ orElse: unexpectedStatus
1320
+ }))
1321
+ ),
1322
+ "getCreatedEntityInfo": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/entities/created`).pipe(
1323
+ HttpClientRequest.setUrlParams({ "type": options.params["type"] as any, "start": options.params["start"] as any, "end": options.params["end"] as any, "page": options.params["page"] as any, "limit": options.params["limit"] as any }),
1324
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1325
+ "2xx": decodeSuccess(GetCreatedEntityInfo200),
1326
+ orElse: unexpectedStatus
1327
+ }))
1328
+ ),
1329
+ "getDeletedEntityInfo": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/entities/deleted`).pipe(
1330
+ HttpClientRequest.setUrlParams({ "type": options.params["type"] as any, "start": options.params["start"] as any, "end": options.params["end"] as any, "page": options.params["page"] as any, "limit": options.params["limit"] as any }),
1331
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1332
+ "2xx": decodeSuccess(GetDeletedEntityInfo200),
1333
+ orElse: unexpectedStatus
1334
+ }))
1335
+ ),
1336
+ "getUpdatedEntityInfo": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/entities/updated`).pipe(
1337
+ HttpClientRequest.setUrlParams({ "type": options.params["type"] as any, "start": options.params["start"] as any, "end": options.params["end"] as any, "page": options.params["page"] as any, "limit": options.params["limit"] as any }),
1338
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1339
+ "2xx": decodeSuccess(GetUpdatedEntityInfo200),
1340
+ orElse: unexpectedStatus
1341
+ }))
1342
+ ),
1343
+ "getExpenses": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/expenses`).pipe(
1344
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "user-id": options?.params?.["user-id"] as any }),
1345
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1346
+ "2xx": decodeSuccess(GetExpenses200),
1347
+ orElse: unexpectedStatus
1348
+ }))
1349
+ ),
1350
+ "createExpense": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/expenses`).pipe(
1351
+ HttpClientRequest.bodyFormDataRecord(options.payload as any),
1352
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1353
+ "2xx": decodeSuccess(CreateExpense201),
1354
+ orElse: unexpectedStatus
1355
+ }))
1356
+ ),
1357
+ "getCategories": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/expenses/categories`).pipe(
1358
+ HttpClientRequest.setUrlParams({ "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "archived": options?.params?.["archived"] as any, "name": options?.params?.["name"] as any }),
1359
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1360
+ "2xx": decodeSuccess(GetCategories200),
1361
+ orElse: unexpectedStatus
1362
+ }))
1363
+ ),
1364
+ "createExpenseCategory": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/expenses/categories`).pipe(
1365
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1366
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1367
+ "2xx": decodeSuccess(CreateExpenseCategory201),
1368
+ orElse: unexpectedStatus
1369
+ }))
1370
+ ),
1371
+ "updateCategory": (workspaceId, categoryId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/expenses/categories/${categoryId}`).pipe(
1372
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1373
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1374
+ "2xx": decodeSuccess(UpdateCategory200),
1375
+ orElse: unexpectedStatus
1376
+ }))
1377
+ ),
1378
+ "deleteCategory": (workspaceId, categoryId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/expenses/categories/${categoryId}`).pipe(
1379
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1380
+ "204": () => Effect.void,
1381
+ orElse: unexpectedStatus
1382
+ }))
1383
+ ),
1384
+ "updateExpenseCategoryStatus": (workspaceId, categoryId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/expenses/categories/${categoryId}/status`).pipe(
1385
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1386
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1387
+ "2xx": decodeSuccess(UpdateExpenseCategoryStatus200),
1388
+ orElse: unexpectedStatus
1389
+ }))
1390
+ ),
1391
+ "getExpense": (workspaceId, expenseId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/expenses/${expenseId}`).pipe(
1392
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1393
+ "2xx": decodeSuccess(GetExpense200),
1394
+ orElse: unexpectedStatus
1395
+ }))
1396
+ ),
1397
+ "updateExpense": (workspaceId, expenseId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/expenses/${expenseId}`).pipe(
1398
+ HttpClientRequest.bodyFormDataRecord(options.payload as any),
1399
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1400
+ "2xx": decodeSuccess(UpdateExpense200),
1401
+ orElse: unexpectedStatus
1402
+ }))
1403
+ ),
1404
+ "deleteExpense": (workspaceId, expenseId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/expenses/${expenseId}`).pipe(
1405
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1406
+ "200": () => Effect.void,
1407
+ orElse: unexpectedStatus
1408
+ }))
1409
+ ),
1410
+ "downloadFile": (workspaceId, expenseId, fileId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/expenses/${expenseId}/files/${fileId}`).pipe(
1411
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1412
+ orElse: unexpectedStatus
1413
+ }))
1414
+ ),
1415
+ "getHolidays": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/holidays`).pipe(
1416
+ HttpClientRequest.setUrlParams({ "assigned-to": options?.params?.["assigned-to"] as any }),
1417
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1418
+ "2xx": decodeSuccess(GetHolidays200),
1419
+ orElse: unexpectedStatus
1420
+ }))
1421
+ ),
1422
+ "createHoliday": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/holidays`).pipe(
1423
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1424
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1425
+ "2xx": decodeSuccess(CreateHoliday200),
1426
+ orElse: unexpectedStatus
1427
+ }))
1428
+ ),
1429
+ "getHolidaysInPeriod": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/holidays/in-period`).pipe(
1430
+ HttpClientRequest.setUrlParams({ "assigned-to": options.params["assigned-to"] as any, "start": options.params["start"] as any, "end": options.params["end"] as any }),
1431
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1432
+ "2xx": decodeSuccess(GetHolidaysInPeriod200),
1433
+ orElse: unexpectedStatus
1434
+ }))
1435
+ ),
1436
+ "updateHoliday": (workspaceId, holidayId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/holidays/${holidayId}`).pipe(
1437
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1438
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1439
+ "2xx": decodeSuccess(UpdateHoliday200),
1440
+ orElse: unexpectedStatus
1441
+ }))
1442
+ ),
1443
+ "deleteHoliday": (workspaceId, holidayId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/holidays/${holidayId}`).pipe(
1444
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1445
+ "2xx": decodeSuccess(DeleteHoliday200),
1446
+ orElse: unexpectedStatus
1447
+ }))
1448
+ ),
1449
+ "setWorkspaceHourlyRate": (workspaceId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/hourly-rate`).pipe(
1450
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1451
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1452
+ "2xx": decodeSuccess(SetWorkspaceHourlyRate200),
1453
+ orElse: unexpectedStatus
1454
+ }))
1455
+ ),
1456
+ "getInvoices": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/invoices`).pipe(
1457
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "statuses": options?.params?.["statuses"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any }),
1458
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1459
+ "2xx": decodeSuccess(GetInvoices200),
1460
+ orElse: unexpectedStatus
1461
+ }))
1462
+ ),
1463
+ "createInvoice": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/invoices`).pipe(
1464
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1465
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1466
+ "2xx": decodeSuccess(CreateInvoice201),
1467
+ orElse: unexpectedStatus
1468
+ }))
1469
+ ),
1470
+ "getInvoicesInfo": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/invoices/info`).pipe(
1471
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1472
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1473
+ "2xx": decodeSuccess(GetInvoicesInfo200),
1474
+ orElse: unexpectedStatus
1475
+ }))
1476
+ ),
1477
+ "getInvoiceSettings": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/invoices/settings`).pipe(
1478
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1479
+ "2xx": decodeSuccess(GetInvoiceSettings200),
1480
+ orElse: unexpectedStatus
1481
+ }))
1482
+ ),
1483
+ "updateInvoiceSettings": (workspaceId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/invoices/settings`).pipe(
1484
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1485
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1486
+ "200": () => Effect.void,
1487
+ orElse: unexpectedStatus
1488
+ }))
1489
+ ),
1490
+ "getInvoice": (workspaceId, invoiceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}`).pipe(
1491
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1492
+ "2xx": decodeSuccess(GetInvoice200),
1493
+ orElse: unexpectedStatus
1494
+ }))
1495
+ ),
1496
+ "updateInvoice": (workspaceId, invoiceId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}`).pipe(
1497
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1498
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1499
+ "2xx": decodeSuccess(UpdateInvoice200),
1500
+ orElse: unexpectedStatus
1501
+ }))
1502
+ ),
1503
+ "deleteInvoice": (workspaceId, invoiceId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}`).pipe(
1504
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1505
+ "200": () => Effect.void,
1506
+ orElse: unexpectedStatus
1507
+ }))
1508
+ ),
1509
+ "duplicateInvoice": (workspaceId, invoiceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/duplicate`).pipe(
1510
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1511
+ "2xx": decodeSuccess(DuplicateInvoice201),
1512
+ orElse: unexpectedStatus
1513
+ }))
1514
+ ),
1515
+ "exportInvoice": (workspaceId, invoiceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/export`).pipe(
1516
+ HttpClientRequest.setUrlParams({ "userLocale": options.params["userLocale"] as any }),
1517
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1518
+ orElse: unexpectedStatus
1519
+ }))
1520
+ ),
1521
+ "addInvoiceItem": (workspaceId, invoiceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/items`).pipe(
1522
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1523
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1524
+ "2xx": decodeSuccess(AddInvoiceItem200),
1525
+ orElse: unexpectedStatus
1526
+ }))
1527
+ ),
1528
+ "importTimeEntriesAndExpenses": (workspaceId, invoiceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/items/import`).pipe(
1529
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1530
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1531
+ "2xx": decodeSuccess(ImportTimeEntriesAndExpenses200),
1532
+ orElse: unexpectedStatus
1533
+ }))
1534
+ ),
1535
+ "removeInvoiceItem": (workspaceId, invoiceId, order, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/items/${order}`).pipe(
1536
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1537
+ "2xx": decodeSuccess(RemoveInvoiceItem200),
1538
+ orElse: unexpectedStatus
1539
+ }))
1540
+ ),
1541
+ "getPaymentsForInvoice": (workspaceId, invoiceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/payments`).pipe(
1542
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any }),
1543
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1544
+ "2xx": decodeSuccess(GetPaymentsForInvoice200),
1545
+ orElse: unexpectedStatus
1546
+ }))
1547
+ ),
1548
+ "createInvoicePayment": (workspaceId, invoiceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/payments`).pipe(
1549
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1550
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1551
+ "2xx": decodeSuccess(CreateInvoicePayment201),
1552
+ orElse: unexpectedStatus
1553
+ }))
1554
+ ),
1555
+ "deletePaymentById": (workspaceId, invoiceId, paymentId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/payments/${paymentId}`).pipe(
1556
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1557
+ "2xx": decodeSuccess(DeletePaymentById200),
1558
+ orElse: unexpectedStatus
1559
+ }))
1560
+ ),
1561
+ "changeInvoiceStatus": (workspaceId, invoiceId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/invoices/${invoiceId}/status`).pipe(
1562
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1563
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1564
+ "200": () => Effect.void,
1565
+ orElse: unexpectedStatus
1566
+ }))
1567
+ ),
1568
+ "addLimitedUsers": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/limited-users`).pipe(
1569
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1570
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1571
+ orElse: unexpectedStatus
1572
+ }))
1573
+ ),
1574
+ "getMemberProfile": (workspaceId, userId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/member-profile/${userId}`).pipe(
1575
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1576
+ "2xx": decodeSuccess(GetMemberProfile200),
1577
+ orElse: unexpectedStatus
1578
+ }))
1579
+ ),
1580
+ "updateMemberProfileWithAdditionalData": (workspaceId, userId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/member-profile/${userId}`).pipe(
1581
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1582
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1583
+ "2xx": decodeSuccess(UpdateMemberProfileWithAdditionalData200),
1584
+ orElse: unexpectedStatus
1585
+ }))
1586
+ ),
1587
+ "getProjects": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/projects`).pipe(
1588
+ HttpClientRequest.setUrlParams({ "name": options?.params?.["name"] as any, "strict-name-search": options?.params?.["strict-name-search"] as any, "archived": options?.params?.["archived"] as any, "billable": options?.params?.["billable"] as any, "clients": options?.params?.["clients"] as any, "contains-client": options?.params?.["contains-client"] as any, "client-status": options?.params?.["client-status"] as any, "users": options?.params?.["users"] as any, "contains-user": options?.params?.["contains-user"] as any, "user-status": options?.params?.["user-status"] as any, "is-template": options?.params?.["is-template"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any, "hydrated": options?.params?.["hydrated"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "access": options?.params?.["access"] as any, "expense-limit": options?.params?.["expense-limit"] as any, "expense-date": options?.params?.["expense-date"] as any, "userGroups": options?.params?.["userGroups"] as any, "contains-group": options?.params?.["contains-group"] as any }),
1589
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1590
+ "2xx": decodeSuccess(GetProjects200),
1591
+ orElse: unexpectedStatus
1592
+ }))
1593
+ ),
1594
+ "createNewProject": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/projects`).pipe(
1595
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1596
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1597
+ "2xx": decodeSuccess(CreateNewProject201),
1598
+ orElse: unexpectedStatus
1599
+ }))
1600
+ ),
1601
+ "createProjectFromTemplate": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/projects/from-template`).pipe(
1602
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1603
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1604
+ "2xx": decodeSuccess(CreateProjectFromTemplate200),
1605
+ orElse: unexpectedStatus
1606
+ }))
1607
+ ),
1608
+ "getProject": (workspaceId, projectId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/projects/${projectId}`).pipe(
1609
+ HttpClientRequest.setUrlParams({ "hydrated": options?.params?.["hydrated"] as any, "custom-field-entity-type": options?.params?.["custom-field-entity-type"] as any, "expense-limit": options?.params?.["expense-limit"] as any, "expense-date": options?.params?.["expense-date"] as any }),
1610
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1611
+ "2xx": decodeSuccess(GetProject200),
1612
+ orElse: unexpectedStatus
1613
+ }))
1614
+ ),
1615
+ "updateProject": (workspaceId, projectId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/projects/${projectId}`).pipe(
1616
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1617
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1618
+ "2xx": decodeSuccess(UpdateProject200),
1619
+ orElse: unexpectedStatus
1620
+ }))
1621
+ ),
1622
+ "deleteProject": (workspaceId, projectId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/projects/${projectId}`).pipe(
1623
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1624
+ "2xx": decodeSuccess(DeleteProject200),
1625
+ orElse: unexpectedStatus
1626
+ }))
1627
+ ),
1628
+ "getCustomFieldsOfProject": (workspaceId, projectId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/projects/${projectId}/custom-fields`).pipe(
1629
+ HttpClientRequest.setUrlParams({ "status": options?.params?.["status"] as any, "entity-type": options?.params?.["entity-type"] as any }),
1630
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1631
+ "2xx": decodeSuccess(GetCustomFieldsOfProject200),
1632
+ orElse: unexpectedStatus
1633
+ }))
1634
+ ),
1635
+ "removeDefaultValueOfProject": (workspaceId, projectId, customFieldId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/projects/${projectId}/custom-fields/${customFieldId}`).pipe(
1636
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1637
+ "2xx": decodeSuccess(RemoveDefaultValueOfProject200),
1638
+ orElse: unexpectedStatus
1639
+ }))
1640
+ ),
1641
+ "editProjectCustomFieldDefaultValue": (workspaceId, projectId, customFieldId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/projects/${projectId}/custom-fields/${customFieldId}`).pipe(
1642
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1643
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1644
+ "2xx": decodeSuccess(EditProjectCustomFieldDefaultValue200),
1645
+ orElse: unexpectedStatus
1646
+ }))
1647
+ ),
1648
+ "updateEstimate": (workspaceId, projectId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/projects/${projectId}/estimate`).pipe(
1649
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1650
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1651
+ "2xx": decodeSuccess(UpdateEstimate200),
1652
+ orElse: unexpectedStatus
1653
+ }))
1654
+ ),
1655
+ "addUsersToProject": (workspaceId, projectId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/projects/${projectId}/memberships`).pipe(
1656
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1657
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1658
+ orElse: unexpectedStatus
1659
+ }))
1660
+ ),
1661
+ "updateMemberships": (workspaceId, projectId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/projects/${projectId}/memberships`).pipe(
1662
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1663
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1664
+ "2xx": decodeSuccess(UpdateMemberships200),
1665
+ orElse: unexpectedStatus
1666
+ }))
1667
+ ),
1668
+ "getTasks": (workspaceId, projectId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/projects/${projectId}/tasks`).pipe(
1669
+ HttpClientRequest.setUrlParams({ "name": options?.params?.["name"] as any, "strict-name-search": options?.params?.["strict-name-search"] as any, "is-active": options?.params?.["is-active"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any }),
1670
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1671
+ "2xx": decodeSuccess(GetTasks200),
1672
+ orElse: unexpectedStatus
1673
+ }))
1674
+ ),
1675
+ "createTask": (workspaceId, projectId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/projects/${projectId}/tasks`).pipe(
1676
+ HttpClientRequest.setUrlParams({ "contains-assignee": options.params?.["contains-assignee"] as any }),
1677
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1678
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1679
+ "2xx": decodeSuccess(CreateTask201),
1680
+ orElse: unexpectedStatus
1681
+ }))
1682
+ ),
1683
+ "setTaskCostRate": (workspaceId, projectId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/projects/${projectId}/tasks/${id}/cost-rate`).pipe(
1684
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1685
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1686
+ "2xx": decodeSuccess(SetTaskCostRate200),
1687
+ orElse: unexpectedStatus
1688
+ }))
1689
+ ),
1690
+ "setTaskHourlyRate": (workspaceId, projectId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/projects/${projectId}/tasks/${id}/hourly-rate`).pipe(
1691
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1692
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1693
+ "2xx": decodeSuccess(SetTaskHourlyRate200),
1694
+ orElse: unexpectedStatus
1695
+ }))
1696
+ ),
1697
+ "getTask": (workspaceId, projectId, taskId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/projects/${projectId}/tasks/${taskId}`).pipe(
1698
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1699
+ "2xx": decodeSuccess(GetTask200),
1700
+ orElse: unexpectedStatus
1701
+ }))
1702
+ ),
1703
+ "updateTask": (workspaceId, projectId, taskId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/projects/${projectId}/tasks/${taskId}`).pipe(
1704
+ HttpClientRequest.setUrlParams({ "contains-assignee": options.params?.["contains-assignee"] as any, "membership-status": options.params?.["membership-status"] as any }),
1705
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1706
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1707
+ "2xx": decodeSuccess(UpdateTask200),
1708
+ orElse: unexpectedStatus
1709
+ }))
1710
+ ),
1711
+ "deleteTask": (workspaceId, projectId, taskId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/projects/${projectId}/tasks/${taskId}`).pipe(
1712
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1713
+ "2xx": decodeSuccess(DeleteTask200),
1714
+ orElse: unexpectedStatus
1715
+ }))
1716
+ ),
1717
+ "updateIsProjectTemplate": (workspaceId, projectId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/projects/${projectId}/template`).pipe(
1718
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1719
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1720
+ "2xx": decodeSuccess(UpdateIsProjectTemplate200),
1721
+ orElse: unexpectedStatus
1722
+ }))
1723
+ ),
1724
+ "addUsersCostRate": (workspaceId, projectId, userId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/projects/${projectId}/users/${userId}/cost-rate`).pipe(
1725
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1726
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1727
+ "2xx": decodeSuccess(AddUsersCostRate200),
1728
+ orElse: unexpectedStatus
1729
+ }))
1730
+ ),
1731
+ "addUsersHourlyRate": (workspaceId, projectId, userId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/projects/${projectId}/users/${userId}/hourly-rate`).pipe(
1732
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1733
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1734
+ "2xx": decodeSuccess(AddUsersHourlyRate200),
1735
+ orElse: unexpectedStatus
1736
+ }))
1737
+ ),
1738
+ "getAllAssignments": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/scheduling/assignments/all`).pipe(
1739
+ HttpClientRequest.setUrlParams({ "name": options.params["name"] as any, "start": options.params["start"] as any, "end": options.params["end"] as any, "sort-column": options.params["sort-column"] as any, "sort-order": options.params["sort-order"] as any, "page": options.params["page"] as any, "page-size": options.params["page-size"] as any }),
1740
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1741
+ "2xx": decodeSuccess(GetAllAssignments200),
1742
+ orElse: unexpectedStatus
1743
+ }))
1744
+ ),
1745
+ "getProjectTotals": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/scheduling/assignments/projects/totals`).pipe(
1746
+ HttpClientRequest.setUrlParams({ "search": options.params["search"] as any, "start": options.params["start"] as any, "end": options.params["end"] as any, "page": options.params["page"] as any, "page-size": options.params["page-size"] as any }),
1747
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1748
+ "2xx": decodeSuccess(GetProjectTotals200),
1749
+ orElse: unexpectedStatus
1750
+ }))
1751
+ ),
1752
+ "getFilteredProjectTotals": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/scheduling/assignments/projects/totals`).pipe(
1753
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1754
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1755
+ "2xx": decodeSuccess(GetFilteredProjectTotals200),
1756
+ orElse: unexpectedStatus
1757
+ }))
1758
+ ),
1759
+ "getProjectTotalsForSingleProject": (workspaceId, projectId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/scheduling/assignments/projects/totals/${projectId}`).pipe(
1760
+ HttpClientRequest.setUrlParams({ "start": options.params["start"] as any, "end": options.params["end"] as any }),
1761
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1762
+ "2xx": decodeSuccess(GetProjectTotalsForSingleProject200),
1763
+ orElse: unexpectedStatus
1764
+ }))
1765
+ ),
1766
+ "publishAssignments": (workspaceId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/scheduling/assignments/publish`).pipe(
1767
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1768
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1769
+ "200": () => Effect.void,
1770
+ orElse: unexpectedStatus
1771
+ }))
1772
+ ),
1773
+ "createRecurring": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/scheduling/assignments/recurring`).pipe(
1774
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1775
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1776
+ "2xx": decodeSuccess(CreateRecurring201),
1777
+ orElse: unexpectedStatus
1778
+ }))
1779
+ ),
1780
+ "deleteRRecurringAssignment": (workspaceId, assignmentId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/scheduling/assignments/recurring/${assignmentId}`).pipe(
1781
+ HttpClientRequest.setUrlParams({ "seriesUpdateOption": options?.params?.["seriesUpdateOption"] as any }),
1782
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1783
+ "2xx": decodeSuccess(DeleteRRecurringAssignment200),
1784
+ orElse: unexpectedStatus
1785
+ }))
1786
+ ),
1787
+ "editRecurring": (workspaceId, assignmentId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/scheduling/assignments/recurring/${assignmentId}`).pipe(
1788
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1789
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1790
+ "2xx": decodeSuccess(EditRecurring200),
1791
+ orElse: unexpectedStatus
1792
+ }))
1793
+ ),
1794
+ "editRecurringPeriod": (workspaceId, assignmentId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/scheduling/assignments/series/${assignmentId}`).pipe(
1795
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1796
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1797
+ "2xx": decodeSuccess(EditRecurringPeriod200),
1798
+ orElse: unexpectedStatus
1799
+ }))
1800
+ ),
1801
+ "getUserTotals": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/scheduling/assignments/user-filter/totals`).pipe(
1802
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1803
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1804
+ "2xx": decodeSuccess(GetUserTotals200),
1805
+ orElse: unexpectedStatus
1806
+ }))
1807
+ ),
1808
+ "getUserTotalsForSingleUser": (workspaceId, userId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/scheduling/assignments/users/${userId}/totals`).pipe(
1809
+ HttpClientRequest.setUrlParams({ "page": options.params["page"] as any, "page-size": options.params["page-size"] as any, "start": options.params["start"] as any, "end": options.params["end"] as any }),
1810
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1811
+ "2xx": decodeSuccess(GetUserTotalsForSingleUser200),
1812
+ orElse: unexpectedStatus
1813
+ }))
1814
+ ),
1815
+ "copyAssignment": (workspaceId, assignmentId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/scheduling/assignments/${assignmentId}/copy`).pipe(
1816
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1817
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1818
+ "2xx": decodeSuccess(CopyAssignment200),
1819
+ orElse: unexpectedStatus
1820
+ }))
1821
+ ),
1822
+ "getTags": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/tags`).pipe(
1823
+ HttpClientRequest.setUrlParams({ "name": options?.params?.["name"] as any, "strict-name-search": options?.params?.["strict-name-search"] as any, "excluded-ids": options?.params?.["excluded-ids"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "archived": options?.params?.["archived"] as any }),
1824
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1825
+ "2xx": decodeSuccess(GetTags200),
1826
+ orElse: unexpectedStatus
1827
+ }))
1828
+ ),
1829
+ "createNewTag": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/tags`).pipe(
1830
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1831
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1832
+ "2xx": decodeSuccess(CreateNewTag201),
1833
+ orElse: unexpectedStatus
1834
+ }))
1835
+ ),
1836
+ "getTag": (workspaceId, id, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/tags/${id}`).pipe(
1837
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1838
+ "2xx": decodeSuccess(GetTag200),
1839
+ orElse: unexpectedStatus
1840
+ }))
1841
+ ),
1842
+ "updateTag": (workspaceId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/tags/${id}`).pipe(
1843
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1844
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1845
+ "2xx": decodeSuccess(UpdateTag200),
1846
+ orElse: unexpectedStatus
1847
+ }))
1848
+ ),
1849
+ "deleteTag": (workspaceId, id, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/tags/${id}`).pipe(
1850
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1851
+ "2xx": decodeSuccess(DeleteTag200),
1852
+ orElse: unexpectedStatus
1853
+ }))
1854
+ ),
1855
+ "getTemplates": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/templates`).pipe(
1856
+ HttpClientRequest.setUrlParams({ "name": options?.params?.["name"] as any, "cleansed": options?.params?.["cleansed"] as any, "hydrated": options?.params?.["hydrated"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any }),
1857
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1858
+ "2xx": decodeSuccess(GetTemplates200),
1859
+ orElse: unexpectedStatus
1860
+ }))
1861
+ ),
1862
+ "createMany": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/templates`).pipe(
1863
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1864
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1865
+ "2xx": decodeSuccess(CreateMany200),
1866
+ orElse: unexpectedStatus
1867
+ }))
1868
+ ),
1869
+ "getTemplate": (workspaceId, templateId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/templates/${templateId}`).pipe(
1870
+ HttpClientRequest.setUrlParams({ "cleansed": options?.params?.["cleansed"] as any, "hydrated": options?.params?.["hydrated"] as any }),
1871
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1872
+ "2xx": decodeSuccess(GetTemplate200),
1873
+ orElse: unexpectedStatus
1874
+ }))
1875
+ ),
1876
+ "delete1": (workspaceId, templateId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/templates/${templateId}`).pipe(
1877
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1878
+ "2xx": decodeSuccess(Delete1200),
1879
+ orElse: unexpectedStatus
1880
+ }))
1881
+ ),
1882
+ "update": (workspaceId, templateId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/templates/${templateId}`).pipe(
1883
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1884
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1885
+ "2xx": decodeSuccess(Update200),
1886
+ orElse: unexpectedStatus
1887
+ }))
1888
+ ),
1889
+ "createTimeEntry": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/time-entries`).pipe(
1890
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1891
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1892
+ "2xx": decodeSuccess(CreateTimeEntry201),
1893
+ orElse: unexpectedStatus
1894
+ }))
1895
+ ),
1896
+ "updateInvoicedStatus": (workspaceId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/time-entries/invoiced`).pipe(
1897
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1898
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1899
+ "200": () => Effect.void,
1900
+ orElse: unexpectedStatus
1901
+ }))
1902
+ ),
1903
+ "getInProgressTimeEntries": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/time-entries/status/in-progress`).pipe(
1904
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any }),
1905
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1906
+ orElse: unexpectedStatus
1907
+ }))
1908
+ ),
1909
+ "getTimeEntry": (workspaceId, id, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/time-entries/${id}`).pipe(
1910
+ HttpClientRequest.setUrlParams({ "hydrated": options?.params?.["hydrated"] as any }),
1911
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1912
+ "2xx": decodeSuccess(GetTimeEntry200),
1913
+ orElse: unexpectedStatus
1914
+ }))
1915
+ ),
1916
+ "updateTimeEntry": (workspaceId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/time-entries/${id}`).pipe(
1917
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1918
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1919
+ "2xx": decodeSuccess(UpdateTimeEntry200),
1920
+ orElse: unexpectedStatus
1921
+ }))
1922
+ ),
1923
+ "deleteTimeEntry": (workspaceId, id, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/time-entries/${id}`).pipe(
1924
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1925
+ "204": () => Effect.void,
1926
+ orElse: unexpectedStatus
1927
+ }))
1928
+ ),
1929
+ "getBalancesForPolicy": (workspaceId, policyId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/time-off/balance/policy/${policyId}`).pipe(
1930
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "sort": options?.params?.["sort"] as any, "sort-order": options?.params?.["sort-order"] as any }),
1931
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1932
+ orElse: unexpectedStatus
1933
+ }))
1934
+ ),
1935
+ "updateBalance": (workspaceId, policyId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/time-off/balance/policy/${policyId}`).pipe(
1936
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1937
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1938
+ "204": () => Effect.void,
1939
+ orElse: unexpectedStatus
1940
+ }))
1941
+ ),
1942
+ "getBalancesForUser": (workspaceId, userId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/time-off/balance/user/${userId}`).pipe(
1943
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "sort": options?.params?.["sort"] as any, "sort-order": options?.params?.["sort-order"] as any }),
1944
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1945
+ orElse: unexpectedStatus
1946
+ }))
1947
+ ),
1948
+ "findPoliciesForWorkspace": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/time-off/policies`).pipe(
1949
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "name": options?.params?.["name"] as any, "status": options?.params?.["status"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any }),
1950
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1951
+ "2xx": decodeSuccess(FindPoliciesForWorkspace200),
1952
+ orElse: unexpectedStatus
1953
+ }))
1954
+ ),
1955
+ "createPolicy": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/time-off/policies`).pipe(
1956
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1957
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1958
+ "2xx": decodeSuccess(CreatePolicy201),
1959
+ orElse: unexpectedStatus
1960
+ }))
1961
+ ),
1962
+ "getPolicy": (workspaceId, id, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/time-off/policies/${id}`).pipe(
1963
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1964
+ "2xx": decodeSuccess(GetPolicy200),
1965
+ orElse: unexpectedStatus
1966
+ }))
1967
+ ),
1968
+ "updatePolicy": (workspaceId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/time-off/policies/${id}`).pipe(
1969
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1970
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1971
+ "2xx": decodeSuccess(UpdatePolicy200),
1972
+ orElse: unexpectedStatus
1973
+ }))
1974
+ ),
1975
+ "deletePolicy": (workspaceId, id, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/time-off/policies/${id}`).pipe(
1976
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1977
+ "200": () => Effect.void,
1978
+ orElse: unexpectedStatus
1979
+ }))
1980
+ ),
1981
+ "updatePolicyStatus": (workspaceId, id, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/time-off/policies/${id}`).pipe(
1982
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1983
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1984
+ "2xx": decodeSuccess(UpdatePolicyStatus200),
1985
+ orElse: unexpectedStatus
1986
+ }))
1987
+ ),
1988
+ "createTimeOffRequest": (workspaceId, policyId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/time-off/policies/${policyId}/requests`).pipe(
1989
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
1990
+ withResponse(options.config)(HttpClientResponse.matchStatus({
1991
+ "2xx": decodeSuccess(CreateTimeOffRequest200),
1992
+ orElse: unexpectedStatus
1993
+ }))
1994
+ ),
1995
+ "deleteTimeOffRequest": (workspaceId, policyId, requestId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/time-off/policies/${policyId}/requests/${requestId}`).pipe(
1996
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
1997
+ "2xx": decodeSuccess(DeleteTimeOffRequest200),
1998
+ orElse: unexpectedStatus
1999
+ }))
2000
+ ),
2001
+ "changeTimeOffRequestStatus": (workspaceId, policyId, requestId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/time-off/policies/${policyId}/requests/${requestId}`).pipe(
2002
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2003
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2004
+ "2xx": decodeSuccess(ChangeTimeOffRequestStatus200),
2005
+ orElse: unexpectedStatus
2006
+ }))
2007
+ ),
2008
+ "createTimeOffRequestForOther": (workspaceId, policyId, userId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/time-off/policies/${policyId}/users/${userId}/requests`).pipe(
2009
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2010
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2011
+ "2xx": decodeSuccess(CreateTimeOffRequestForOther200),
2012
+ orElse: unexpectedStatus
2013
+ }))
2014
+ ),
2015
+ "getTimeOffRequest": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/time-off/requests`).pipe(
2016
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2017
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2018
+ "2xx": decodeSuccess(GetTimeOffRequest200),
2019
+ orElse: unexpectedStatus
2020
+ }))
2021
+ ),
2022
+ "getUserGroups": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/user-groups`).pipe(
2023
+ HttpClientRequest.setUrlParams({ "project-id": options?.params?.["project-id"] as any, "name": options?.params?.["name"] as any, "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "includeTeamManagers": options?.params?.["includeTeamManagers"] as any }),
2024
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2025
+ "2xx": decodeSuccess(GetUserGroups200),
2026
+ orElse: unexpectedStatus
2027
+ }))
2028
+ ),
2029
+ "createUserGroup": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/user-groups`).pipe(
2030
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2031
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2032
+ "2xx": decodeSuccess(CreateUserGroup201),
2033
+ orElse: unexpectedStatus
2034
+ }))
2035
+ ),
2036
+ "updateUserGroup": (workspaceId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/user-groups/${id}`).pipe(
2037
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2038
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2039
+ "2xx": decodeSuccess(UpdateUserGroup200),
2040
+ orElse: unexpectedStatus
2041
+ }))
2042
+ ),
2043
+ "deleteUserGroup": (workspaceId, id, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/user-groups/${id}`).pipe(
2044
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2045
+ "2xx": decodeSuccess(DeleteUserGroup200),
2046
+ orElse: unexpectedStatus
2047
+ }))
2048
+ ),
2049
+ "addUser": (workspaceId, userGroupId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/user-groups/${userGroupId}/users`).pipe(
2050
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2051
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2052
+ "2xx": decodeSuccess(AddUser200),
2053
+ orElse: unexpectedStatus
2054
+ }))
2055
+ ),
2056
+ "deleteUser": (workspaceId, userGroupId, userId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/user-groups/${userGroupId}/users/${userId}`).pipe(
2057
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2058
+ "2xx": decodeSuccess(DeleteUser200),
2059
+ orElse: unexpectedStatus
2060
+ }))
2061
+ ),
2062
+ "getTimeEntries": (workspaceId, userId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/user/${userId}/time-entries`).pipe(
2063
+ HttpClientRequest.setUrlParams({ "description": options?.params?.["description"] as any, "start": options?.params?.["start"] as any, "end": options?.params?.["end"] as any, "project": options?.params?.["project"] as any, "task": options?.params?.["task"] as any, "tags": options?.params?.["tags"] as any, "project-required": options?.params?.["project-required"] as any, "task-required": options?.params?.["task-required"] as any, "hydrated": options?.params?.["hydrated"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any, "in-progress": options?.params?.["in-progress"] as any, "get-week-before": options?.params?.["get-week-before"] as any }),
2064
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2065
+ "2xx": decodeSuccess(GetTimeEntries200),
2066
+ orElse: unexpectedStatus
2067
+ }))
2068
+ ),
2069
+ "replaceMany": (workspaceId, userId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/user/${userId}/time-entries`).pipe(
2070
+ HttpClientRequest.setUrlParams({ "hydrated": options.params?.["hydrated"] as any }),
2071
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2072
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2073
+ "2xx": decodeSuccess(ReplaceMany200),
2074
+ orElse: unexpectedStatus
2075
+ }))
2076
+ ),
2077
+ "createForOthers": (workspaceId, userId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/user/${userId}/time-entries`).pipe(
2078
+ HttpClientRequest.setUrlParams({ "from-entry": options.params?.["from-entry"] as any }),
2079
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2080
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2081
+ "2xx": decodeSuccess(CreateForOthers201),
2082
+ orElse: unexpectedStatus
2083
+ }))
2084
+ ),
2085
+ "deleteMany": (workspaceId, userId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/user/${userId}/time-entries`).pipe(
2086
+ HttpClientRequest.setUrlParams({ "time-entry-ids": options.params["time-entry-ids"] as any }),
2087
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2088
+ "2xx": decodeSuccess(DeleteMany200),
2089
+ orElse: unexpectedStatus
2090
+ }))
2091
+ ),
2092
+ "stopRunningTimeEntry": (workspaceId, userId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/user/${userId}/time-entries`).pipe(
2093
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2094
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2095
+ "2xx": decodeSuccess(StopRunningTimeEntry200),
2096
+ orElse: unexpectedStatus
2097
+ }))
2098
+ ),
2099
+ "duplicateTimeEntry": (workspaceId, userId, id, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/user/${userId}/time-entries/${id}/duplicate`).pipe(
2100
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2101
+ "2xx": decodeSuccess(DuplicateTimeEntry201),
2102
+ orElse: unexpectedStatus
2103
+ }))
2104
+ ),
2105
+ "getUsersOfWorkspace": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/users`).pipe(
2106
+ HttpClientRequest.setUrlParams({ "email": options.params["email"] as any, "project-id": options.params["project-id"] as any, "status": options.params["status"] as any, "account-statuses": options.params["account-statuses"] as any, "name": options.params["name"] as any, "sort-column": options.params["sort-column"] as any, "sort-order": options.params["sort-order"] as any, "page": options.params["page"] as any, "page-size": options.params["page-size"] as any, "memberships": options.params["memberships"] as any, "include-roles": options.params["include-roles"] as any }),
2107
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2108
+ "2xx": decodeSuccess(GetUsersOfWorkspace200),
2109
+ orElse: unexpectedStatus
2110
+ }))
2111
+ ),
2112
+ "addUsers": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/users`).pipe(
2113
+ HttpClientRequest.setUrlParams({ "send-email": options.params["send-email"] as any }),
2114
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2115
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2116
+ "2xx": decodeSuccess(AddUsers200),
2117
+ orElse: unexpectedStatus
2118
+ }))
2119
+ ),
2120
+ "filterUsersOfWorkspace": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/users/info`).pipe(
2121
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2122
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2123
+ "2xx": decodeSuccess(FilterUsersOfWorkspace200),
2124
+ orElse: unexpectedStatus
2125
+ }))
2126
+ ),
2127
+ "updateUserStatus": (workspaceId, userId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/users/${userId}`).pipe(
2128
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2129
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2130
+ "2xx": decodeSuccess(UpdateUserStatus200),
2131
+ orElse: unexpectedStatus
2132
+ }))
2133
+ ),
2134
+ "removeMember": (workspaceId, userId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/users/${userId}`).pipe(
2135
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2136
+ "2xx": decodeSuccess(RemoveMember200),
2137
+ orElse: unexpectedStatus
2138
+ }))
2139
+ ),
2140
+ "setCostRateForUser": (workspaceId, userId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/users/${userId}/cost-rate`).pipe(
2141
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2142
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2143
+ "2xx": decodeSuccess(SetCostRateForUser200),
2144
+ orElse: unexpectedStatus
2145
+ }))
2146
+ ),
2147
+ "upsertUserCustomFieldValue": (workspaceId, userId, customFieldId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/users/${userId}/custom-field/${customFieldId}/value`).pipe(
2148
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2149
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2150
+ "2xx": decodeSuccess(UpsertUserCustomFieldValue201),
2151
+ orElse: unexpectedStatus
2152
+ }))
2153
+ ),
2154
+ "setHourlyRateForUser": (workspaceId, userId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/users/${userId}/hourly-rate`).pipe(
2155
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2156
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2157
+ "2xx": decodeSuccess(SetHourlyRateForUser200),
2158
+ orElse: unexpectedStatus
2159
+ }))
2160
+ ),
2161
+ "getManagersOfUser": (workspaceId, userId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/users/${userId}/managers`).pipe(
2162
+ HttpClientRequest.setUrlParams({ "sort-column": options?.params?.["sort-column"] as any, "sort-order": options?.params?.["sort-order"] as any, "page": options?.params?.["page"] as any, "page-size": options?.params?.["page-size"] as any }),
2163
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2164
+ "2xx": decodeSuccess(GetManagersOfUser200),
2165
+ orElse: unexpectedStatus
2166
+ }))
2167
+ ),
2168
+ "createUserRole": (workspaceId, userId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/users/${userId}/roles`).pipe(
2169
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2170
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2171
+ "2xx": decodeSuccess(CreateUserRole201),
2172
+ orElse: unexpectedStatus
2173
+ }))
2174
+ ),
2175
+ "deleteUserRole": (workspaceId, userId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/users/${userId}/roles`).pipe(
2176
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2177
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2178
+ "204": () => Effect.void,
2179
+ orElse: unexpectedStatus
2180
+ }))
2181
+ ),
2182
+ "getWebhooks": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/webhooks`).pipe(
2183
+ HttpClientRequest.setUrlParams({ "type": options?.params?.["type"] as any }),
2184
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2185
+ "2xx": decodeSuccess(GetWebhooks200),
2186
+ orElse: unexpectedStatus
2187
+ }))
2188
+ ),
2189
+ "createWebhook": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/webhooks`).pipe(
2190
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2191
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2192
+ "2xx": decodeSuccess(CreateWebhook201),
2193
+ orElse: unexpectedStatus
2194
+ }))
2195
+ ),
2196
+ "getWebhook": (workspaceId, webhookId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/webhooks/${webhookId}`).pipe(
2197
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2198
+ "2xx": decodeSuccess(GetWebhook200),
2199
+ orElse: unexpectedStatus
2200
+ }))
2201
+ ),
2202
+ "updateWebhook": (workspaceId, webhookId, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/webhooks/${webhookId}`).pipe(
2203
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2204
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2205
+ "2xx": decodeSuccess(UpdateWebhook200),
2206
+ orElse: unexpectedStatus
2207
+ }))
2208
+ ),
2209
+ "deleteWebhook": (workspaceId, webhookId, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/webhooks/${webhookId}`).pipe(
2210
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2211
+ "200": () => Effect.void,
2212
+ orElse: unexpectedStatus
2213
+ }))
2214
+ ),
2215
+ "getLogsForWebhook": (workspaceId, webhookId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/webhooks/${webhookId}/logs`).pipe(
2216
+ HttpClientRequest.setUrlParams({ "page": options.params?.["page"] as any, "size": options.params?.["size"] as any }),
2217
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2218
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2219
+ "2xx": decodeSuccess(GetLogsForWebhook200),
2220
+ orElse: unexpectedStatus
2221
+ }))
2222
+ ),
2223
+ "getWebhookEventStatusesWithLatestLog": (workspaceId, webhookId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/webhooks/${webhookId}/statuses`).pipe(
2224
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "size": options?.params?.["size"] as any, "statuses": options?.params?.["statuses"] as any }),
2225
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2226
+ "2xx": decodeSuccess(GetWebhookEventStatusesWithLatestLog200),
2227
+ orElse: unexpectedStatus
2228
+ }))
2229
+ ),
2230
+ "generateNewToken": (workspaceId, webhookId, options) => HttpClientRequest.patch(`/v1/workspaces/${workspaceId}/webhooks/${webhookId}/token`).pipe(
2231
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2232
+ "2xx": decodeSuccess(GenerateNewToken200),
2233
+ orElse: unexpectedStatus
2234
+ }))
2235
+ ),
2236
+ "generateSharedReportV1": (id, options) => HttpClientRequest.get(`/v1/shared-reports/${id}`).pipe(
2237
+ HttpClientRequest.setUrlParams({ "dateRangeStart": options?.params?.["dateRangeStart"] as any, "dateRangeEnd": options?.params?.["dateRangeEnd"] as any, "sortOrder": options?.params?.["sortOrder"] as any, "sortColumn": options?.params?.["sortColumn"] as any, "exportType": options?.params?.["exportType"] as any, "page": options?.params?.["page"] as any, "pageSize": options?.params?.["pageSize"] as any }),
2238
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2239
+ orElse: unexpectedStatus
2240
+ }))
2241
+ ),
2242
+ "generateAttendanceReport": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/reports/attendance`).pipe(
2243
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2244
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2245
+ orElse: unexpectedStatus
2246
+ }))
2247
+ ),
2248
+ "generateDetailedReport": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/reports/detailed`).pipe(
2249
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2250
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2251
+ orElse: unexpectedStatus
2252
+ }))
2253
+ ),
2254
+ "generateDetailedReportV1": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/reports/expenses/detailed`).pipe(
2255
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2256
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2257
+ "2xx": decodeSuccess(GenerateDetailedReportV1200),
2258
+ orElse: unexpectedStatus
2259
+ }))
2260
+ ),
2261
+ "generateSummaryReport": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/reports/summary`).pipe(
2262
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2263
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2264
+ orElse: unexpectedStatus
2265
+ }))
2266
+ ),
2267
+ "generateWeeklyReport": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/reports/weekly`).pipe(
2268
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2269
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2270
+ orElse: unexpectedStatus
2271
+ }))
2272
+ ),
2273
+ "getSharedReportsV1": (workspaceId, options) => HttpClientRequest.get(`/v1/workspaces/${workspaceId}/shared-reports`).pipe(
2274
+ HttpClientRequest.setUrlParams({ "page": options?.params?.["page"] as any, "pageSize": options?.params?.["pageSize"] as any, "sharedReportsFilter": options?.params?.["sharedReportsFilter"] as any }),
2275
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2276
+ orElse: unexpectedStatus
2277
+ }))
2278
+ ),
2279
+ "saveSharedReportV1": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/shared-reports`).pipe(
2280
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2281
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2282
+ orElse: unexpectedStatus
2283
+ }))
2284
+ ),
2285
+ "updateSharedReportV1": (workspaceId, id, options) => HttpClientRequest.put(`/v1/workspaces/${workspaceId}/shared-reports/${id}`).pipe(
2286
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2287
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2288
+ orElse: unexpectedStatus
2289
+ }))
2290
+ ),
2291
+ "deleteSharedReportV1": (workspaceId, id, options) => HttpClientRequest.delete(`/v1/workspaces/${workspaceId}/shared-reports/${id}`).pipe(
2292
+ withResponse(options?.config)(HttpClientResponse.matchStatus({
2293
+ "204": () => Effect.void,
2294
+ orElse: unexpectedStatus
2295
+ }))
2296
+ ),
2297
+ "getAuditLogs": (workspaceId, options) => HttpClientRequest.post(`/v1/workspaces/${workspaceId}/audit-log`).pipe(
2298
+ HttpClientRequest.bodyJsonUnsafe(options.payload),
2299
+ withResponse(options.config)(HttpClientResponse.matchStatus({
2300
+ "2xx": decodeSuccess(GetAuditLogs200),
2301
+ orElse: unexpectedStatus
2302
+ }))
2303
+ )
2304
+ }
2305
+ }
2306
+
2307
+ export interface ClockifyApi {
2308
+ readonly httpClient: HttpClient.HttpClient
2309
+ /**
2310
+ * Add a photo
2311
+ */
2312
+ readonly "uploadImage": <Config extends OperationConfig>(options: { readonly payload: typeof UploadImageRequestFormData.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UploadImage200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2313
+ /**
2314
+ * Get currently logged-in user's info
2315
+ */
2316
+ readonly "getLoggedUser": <Config extends OperationConfig>(options: { readonly params?: typeof GetLoggedUserParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetLoggedUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2317
+ /**
2318
+ * Get all my workspaces
2319
+ */
2320
+ readonly "getWorkspacesOfUser": <Config extends OperationConfig>(options: { readonly params?: typeof GetWorkspacesOfUserParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetWorkspacesOfUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2321
+ /**
2322
+ * Add a workspace
2323
+ */
2324
+ readonly "createWorkspace": <Config extends OperationConfig>(options: { readonly payload: typeof CreateWorkspaceRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateWorkspace201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2325
+ /**
2326
+ * Get workspace info
2327
+ */
2328
+ readonly "getWorkspaceOfUser": <Config extends OperationConfig>(workspaceId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetWorkspaceOfUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2329
+ /**
2330
+ * Get all webhooks for addon on a workspace
2331
+ */
2332
+ readonly "getAddonWebhooks": <Config extends OperationConfig>(workspaceId: string, addonId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetAddonWebhooks200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2333
+ /**
2334
+ * Get approval requests
2335
+ */
2336
+ readonly "getApprovalRequests": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetApprovalRequestsParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetApprovalRequests200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2337
+ /**
2338
+ * Submit approval request
2339
+ */
2340
+ readonly "createApprrovalRequest": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateApprrovalRequestRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateApprrovalRequest201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2341
+ /**
2342
+ * Submit non pending/approved entries/expenses for approval to an existing approval request
2343
+ */
2344
+ readonly "resubmitApprovalRequest": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof ResubmitApprovalRequestRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2345
+ /**
2346
+ * Submit an approval request for a user
2347
+ */
2348
+ readonly "createApprovalForOther": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof CreateApprovalForOtherRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateApprovalForOther201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2349
+ /**
2350
+ * Re-submit rejected/withdrawn entries/expenses for an approval of a user
2351
+ */
2352
+ readonly "resubmitApprovalRequestForOther": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof ResubmitApprovalRequestForOtherRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2353
+ /**
2354
+ * Update an approval request
2355
+ */
2356
+ readonly "updateApprovalStatus": <Config extends OperationConfig>(workspaceId: string, approvalRequestId: string, options: { readonly payload: typeof UpdateApprovalStatusRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateApprovalStatus200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2357
+ /**
2358
+ * Find clients on a workspace
2359
+ */
2360
+ readonly "getClients": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetClientsParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetClients200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2361
+ /**
2362
+ * Add a new client
2363
+ */
2364
+ readonly "createClient": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateClientRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateClient201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2365
+ /**
2366
+ * Get a client by ID
2367
+ */
2368
+ readonly "getClient": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetClient200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2369
+ /**
2370
+ * Update a client
2371
+ */
2372
+ readonly "updateClient": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly params?: typeof UpdateClientParams.Encoded | undefined; readonly payload: typeof UpdateClientRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateClient200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2373
+ /**
2374
+ * Delete a client
2375
+ */
2376
+ readonly "deleteClient": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteClient200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2377
+ /**
2378
+ * Update workspace cost rate
2379
+ */
2380
+ readonly "setWorkspaceCostRate": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof SetWorkspaceCostRateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof SetWorkspaceCostRate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2381
+ /**
2382
+ * Get custom fields on a workspace
2383
+ */
2384
+ readonly "ofWorkspace": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof OfWorkspaceParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof OfWorkspace200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2385
+ /**
2386
+ * Create custom fields on a workspace
2387
+ */
2388
+ readonly "create": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2389
+ /**
2390
+ * Update custom field on workspace
2391
+ */
2392
+ readonly "editCustomField": <Config extends OperationConfig>(workspaceId: string, customFieldId: string, options: { readonly payload: typeof EditCustomFieldRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof EditCustomField200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2393
+ /**
2394
+ * Delete a custom field
2395
+ */
2396
+ readonly "delete": <Config extends OperationConfig>(workspaceId: string, customFieldId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2397
+ /**
2398
+ * Retrieves records from the database collection that were created within a specified date range.
2399
+ * The date range is determined by two parameters: start and end.
2400
+ */
2401
+ readonly "getCreatedEntityInfo": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof GetCreatedEntityInfoParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetCreatedEntityInfo200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2402
+ /**
2403
+ * Retrieves a list of record(s) that were deleted within a specified date range.
2404
+ * The date range is determined by the two parameters start and end.
2405
+ *
2406
+ * > ### 💡 Note
2407
+ * > Deleted entities will be updated and reflected in this endpoint approximately one minute after the deletion occurs. Also, entities that are created and deleted within the request date range will not appear in the /deleted endpoint.
2408
+ */
2409
+ readonly "getDeletedEntityInfo": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof GetDeletedEntityInfoParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetDeletedEntityInfo200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2410
+ /**
2411
+ * Retrieves records that were updated within the specified date range.
2412
+ * The date range is determined by the two parameters: start and end.
2413
+ *
2414
+ * > ### 💡 Note
2415
+ * > If an entity is both created and updated within the requested date range, it will be excluded from the /updated endpoint results.
2416
+ */
2417
+ readonly "getUpdatedEntityInfo": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof GetUpdatedEntityInfoParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetUpdatedEntityInfo200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2418
+ /**
2419
+ * Get all expenses on a workspace
2420
+ */
2421
+ readonly "getExpenses": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetExpensesParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetExpenses200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2422
+ /**
2423
+ * Create an expense
2424
+ */
2425
+ readonly "createExpense": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateExpenseRequestFormData.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateExpense201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2426
+ /**
2427
+ * Get all expense categories
2428
+ */
2429
+ readonly "getCategories": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetCategoriesParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetCategories200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2430
+ /**
2431
+ * Add an expense category
2432
+ */
2433
+ readonly "createExpenseCategory": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateExpenseCategoryRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateExpenseCategory201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2434
+ /**
2435
+ * Update an expense category
2436
+ */
2437
+ readonly "updateCategory": <Config extends OperationConfig>(workspaceId: string, categoryId: string, options: { readonly payload: typeof UpdateCategoryRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateCategory200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2438
+ /**
2439
+ * Delete an expense category
2440
+ */
2441
+ readonly "deleteCategory": <Config extends OperationConfig>(workspaceId: string, categoryId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2442
+ /**
2443
+ * Archive an expense category
2444
+ */
2445
+ readonly "updateExpenseCategoryStatus": <Config extends OperationConfig>(workspaceId: string, categoryId: string, options: { readonly payload: typeof UpdateExpenseCategoryStatusRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateExpenseCategoryStatus200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2446
+ /**
2447
+ * Get an expense by ID
2448
+ */
2449
+ readonly "getExpense": <Config extends OperationConfig>(workspaceId: string, expenseId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetExpense200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2450
+ /**
2451
+ * Update an expense
2452
+ */
2453
+ readonly "updateExpense": <Config extends OperationConfig>(workspaceId: string, expenseId: string, options: { readonly payload: typeof UpdateExpenseRequestFormData.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateExpense200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2454
+ /**
2455
+ * Delete an expense
2456
+ */
2457
+ readonly "deleteExpense": <Config extends OperationConfig>(workspaceId: string, expenseId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2458
+ /**
2459
+ * Download a receipt
2460
+ */
2461
+ readonly "downloadFile": <Config extends OperationConfig>(workspaceId: string, expenseId: string, fileId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2462
+ /**
2463
+ * Get holidays on a workspace
2464
+ */
2465
+ readonly "getHolidays": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetHolidaysParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetHolidays200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2466
+ /**
2467
+ * Create a holiday
2468
+ */
2469
+ readonly "createHoliday": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateHolidayRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateHoliday200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2470
+ /**
2471
+ * Get holidays in a specific period
2472
+ */
2473
+ readonly "getHolidaysInPeriod": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof GetHolidaysInPeriodParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetHolidaysInPeriod200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2474
+ /**
2475
+ * Update a holiday
2476
+ */
2477
+ readonly "updateHoliday": <Config extends OperationConfig>(workspaceId: string, holidayId: string, options: { readonly payload: typeof UpdateHolidayRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateHoliday200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2478
+ /**
2479
+ * Delete a holiday
2480
+ */
2481
+ readonly "deleteHoliday": <Config extends OperationConfig>(workspaceId: string, holidayId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteHoliday200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2482
+ /**
2483
+ * Update workspace billable rate
2484
+ */
2485
+ readonly "setWorkspaceHourlyRate": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof SetWorkspaceHourlyRateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof SetWorkspaceHourlyRate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2486
+ /**
2487
+ * Get all invoices on a workspace
2488
+ */
2489
+ readonly "getInvoices": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetInvoicesParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetInvoices200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2490
+ /**
2491
+ * Add an invoice
2492
+ */
2493
+ readonly "createInvoice": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateInvoiceRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateInvoice201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2494
+ /**
2495
+ * Filter out invoices
2496
+ */
2497
+ readonly "getInvoicesInfo": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GetInvoicesInfoRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetInvoicesInfo200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2498
+ /**
2499
+ * Get an invoice in another language
2500
+ */
2501
+ readonly "getInvoiceSettings": <Config extends OperationConfig>(workspaceId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetInvoiceSettings200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2502
+ /**
2503
+ * Change an invoice language
2504
+ */
2505
+ readonly "updateInvoiceSettings": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof UpdateInvoiceSettingsRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2506
+ /**
2507
+ * Get an invoice by ID
2508
+ */
2509
+ readonly "getInvoice": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetInvoice200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2510
+ /**
2511
+ * Update an invoice
2512
+ */
2513
+ readonly "updateInvoice": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly payload: typeof UpdateInvoiceRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateInvoice200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2514
+ /**
2515
+ * Delete an invoice
2516
+ */
2517
+ readonly "deleteInvoice": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2518
+ /**
2519
+ * Duplicate an invoice
2520
+ */
2521
+ readonly "duplicateInvoice": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DuplicateInvoice201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2522
+ /**
2523
+ * Export an invoice
2524
+ */
2525
+ readonly "exportInvoice": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly params: typeof ExportInvoiceParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2526
+ /**
2527
+ * Add item to an invoice
2528
+ */
2529
+ readonly "addInvoiceItem": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly payload: typeof AddInvoiceItemRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof AddInvoiceItem200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2530
+ /**
2531
+ * Import time entries and expenses to an invoice
2532
+ */
2533
+ readonly "importTimeEntriesAndExpenses": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly payload: typeof ImportTimeEntriesAndExpensesRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof ImportTimeEntriesAndExpenses200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2534
+ /**
2535
+ * Delete item from an invoice
2536
+ */
2537
+ readonly "removeInvoiceItem": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, order: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof RemoveInvoiceItem200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2538
+ /**
2539
+ * Get payments for an invoice
2540
+ */
2541
+ readonly "getPaymentsForInvoice": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly params?: typeof GetPaymentsForInvoiceParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetPaymentsForInvoice200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2542
+ /**
2543
+ * Add payment to an invoice
2544
+ */
2545
+ readonly "createInvoicePayment": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly payload: typeof CreateInvoicePaymentRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateInvoicePayment201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2546
+ /**
2547
+ * Delete payment from an invoice
2548
+ */
2549
+ readonly "deletePaymentById": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, paymentId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeletePaymentById200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2550
+ /**
2551
+ * Change an invoice status
2552
+ */
2553
+ readonly "changeInvoiceStatus": <Config extends OperationConfig>(workspaceId: string, invoiceId: string, options: { readonly payload: typeof ChangeInvoiceStatusRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2554
+ /**
2555
+ * Add limited users
2556
+ */
2557
+ readonly "addLimitedUsers": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof AddLimitedUsersRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2558
+ /**
2559
+ * Get a member's profile
2560
+ */
2561
+ readonly "getMemberProfile": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetMemberProfile200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2562
+ /**
2563
+ * Update a member's profile
2564
+ */
2565
+ readonly "updateMemberProfileWithAdditionalData": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof UpdateMemberProfileWithAdditionalDataRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateMemberProfileWithAdditionalData200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2566
+ /**
2567
+ * Get all projects on a workspace
2568
+ */
2569
+ readonly "getProjects": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetProjectsParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetProjects200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2570
+ /**
2571
+ * Add a new project
2572
+ */
2573
+ readonly "createNewProject": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateNewProjectRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateNewProject201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2574
+ /**
2575
+ * Create project from a template
2576
+ */
2577
+ readonly "createProjectFromTemplate": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateProjectFromTemplateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateProjectFromTemplate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2578
+ /**
2579
+ * Find a project by ID
2580
+ */
2581
+ readonly "getProject": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly params?: typeof GetProjectParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetProject200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2582
+ /**
2583
+ * Update a project on a workspace
2584
+ */
2585
+ readonly "updateProject": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly payload: typeof UpdateProjectRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateProject200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2586
+ /**
2587
+ * Delete a project from a workspace
2588
+ */
2589
+ readonly "deleteProject": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteProject200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2590
+ /**
2591
+ * Get custom fields on a project
2592
+ */
2593
+ readonly "getCustomFieldsOfProject": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly params?: typeof GetCustomFieldsOfProjectParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetCustomFieldsOfProject200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2594
+ /**
2595
+ * Remove custom field from a project
2596
+ */
2597
+ readonly "removeDefaultValueOfProject": <Config extends OperationConfig>(workspaceId: string, projectId: string, customFieldId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof RemoveDefaultValueOfProject200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2598
+ /**
2599
+ * Update custom field on a project
2600
+ */
2601
+ readonly "editProjectCustomFieldDefaultValue": <Config extends OperationConfig>(workspaceId: string, projectId: string, customFieldId: string, options: { readonly payload: typeof EditProjectCustomFieldDefaultValueRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof EditProjectCustomFieldDefaultValue200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2602
+ /**
2603
+ * Update project estimate
2604
+ */
2605
+ readonly "updateEstimate": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly payload: typeof UpdateEstimateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateEstimate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2606
+ /**
2607
+ * Assign/remove users to/from the project
2608
+ */
2609
+ readonly "addUsersToProject": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly payload: typeof AddUsersToProjectRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2610
+ /**
2611
+ * Update project memberships
2612
+ */
2613
+ readonly "updateMemberships": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly payload: typeof UpdateMembershipsRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateMemberships200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2614
+ /**
2615
+ * Find tasks on a project
2616
+ */
2617
+ readonly "getTasks": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly params?: typeof GetTasksParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTasks200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2618
+ /**
2619
+ * Add a new task on a project
2620
+ */
2621
+ readonly "createTask": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly params?: typeof CreateTaskParams.Encoded | undefined; readonly payload: typeof CreateTaskRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateTask201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2622
+ /**
2623
+ * Update a task's cost rate
2624
+ */
2625
+ readonly "setTaskCostRate": <Config extends OperationConfig>(workspaceId: string, projectId: string, id: string, options: { readonly payload: typeof SetTaskCostRateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof SetTaskCostRate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2626
+ /**
2627
+ * Update a task's billable rate
2628
+ */
2629
+ readonly "setTaskHourlyRate": <Config extends OperationConfig>(workspaceId: string, projectId: string, id: string, options: { readonly payload: typeof SetTaskHourlyRateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof SetTaskHourlyRate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2630
+ /**
2631
+ * Get a task by id
2632
+ */
2633
+ readonly "getTask": <Config extends OperationConfig>(workspaceId: string, projectId: string, taskId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTask200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2634
+ /**
2635
+ * Update a task on a project
2636
+ */
2637
+ readonly "updateTask": <Config extends OperationConfig>(workspaceId: string, projectId: string, taskId: string, options: { readonly params?: typeof UpdateTaskParams.Encoded | undefined; readonly payload: typeof UpdateTaskRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateTask200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2638
+ /**
2639
+ * Delete a task from a project
2640
+ */
2641
+ readonly "deleteTask": <Config extends OperationConfig>(workspaceId: string, projectId: string, taskId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteTask200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2642
+ /**
2643
+ * Update a project template
2644
+ */
2645
+ readonly "updateIsProjectTemplate": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly payload: typeof UpdateIsProjectTemplateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateIsProjectTemplate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2646
+ /**
2647
+ * Update project user's cost rate
2648
+ */
2649
+ readonly "addUsersCostRate": <Config extends OperationConfig>(workspaceId: string, projectId: string, userId: string, options: { readonly payload: typeof AddUsersCostRateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof AddUsersCostRate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2650
+ /**
2651
+ * Update a project user's billable rate
2652
+ */
2653
+ readonly "addUsersHourlyRate": <Config extends OperationConfig>(workspaceId: string, projectId: string, userId: string, options: { readonly payload: typeof AddUsersHourlyRateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof AddUsersHourlyRate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2654
+ /**
2655
+ * Get all assignments
2656
+ */
2657
+ readonly "getAllAssignments": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof GetAllAssignmentsParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetAllAssignments200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2658
+ /**
2659
+ * Get all scheduled assignments per project
2660
+ */
2661
+ readonly "getProjectTotals": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof GetProjectTotalsParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetProjectTotals200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2662
+ /**
2663
+ * Get all scheduled assignments per project
2664
+ */
2665
+ readonly "getFilteredProjectTotals": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GetFilteredProjectTotalsRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetFilteredProjectTotals200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2666
+ /**
2667
+ * Get all scheduled assignments on project
2668
+ */
2669
+ readonly "getProjectTotalsForSingleProject": <Config extends OperationConfig>(workspaceId: string, projectId: string, options: { readonly params: typeof GetProjectTotalsForSingleProjectParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetProjectTotalsForSingleProject200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2670
+ /**
2671
+ * Publish assignments
2672
+ */
2673
+ readonly "publishAssignments": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof PublishAssignmentsRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2674
+ /**
2675
+ * Create assignment
2676
+ */
2677
+ readonly "createRecurring": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateRecurringRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateRecurring201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2678
+ /**
2679
+ * Delete assignment
2680
+ */
2681
+ readonly "deleteRRecurringAssignment": <Config extends OperationConfig>(workspaceId: string, assignmentId: string, options: { readonly params?: typeof DeleteRRecurringAssignmentParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteRRecurringAssignment200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2682
+ /**
2683
+ * Update assignment
2684
+ */
2685
+ readonly "editRecurring": <Config extends OperationConfig>(workspaceId: string, assignmentId: string, options: { readonly payload: typeof EditRecurringRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof EditRecurring200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2686
+ /**
2687
+ * Change the recurring period
2688
+ */
2689
+ readonly "editRecurringPeriod": <Config extends OperationConfig>(workspaceId: string, assignmentId: string, options: { readonly payload: typeof EditRecurringPeriodRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof EditRecurringPeriod200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2690
+ /**
2691
+ * Get total of users' capacity on workspace
2692
+ */
2693
+ readonly "getUserTotals": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GetUserTotalsRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetUserTotals200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2694
+ /**
2695
+ * Get total capacity of a user
2696
+ */
2697
+ readonly "getUserTotalsForSingleUser": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly params: typeof GetUserTotalsForSingleUserParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetUserTotalsForSingleUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2698
+ /**
2699
+ * Copy a scheduled assignment
2700
+ */
2701
+ readonly "copyAssignment": <Config extends OperationConfig>(workspaceId: string, assignmentId: string, options: { readonly payload: typeof CopyAssignmentRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CopyAssignment200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2702
+ /**
2703
+ * Find tags on a workspace
2704
+ */
2705
+ readonly "getTags": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetTagsParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTags200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2706
+ /**
2707
+ * Add a new tag
2708
+ */
2709
+ readonly "createNewTag": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateNewTagRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateNewTag201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2710
+ /**
2711
+ * Get a tag by ID
2712
+ */
2713
+ readonly "getTag": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTag200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2714
+ /**
2715
+ * Update a tag
2716
+ */
2717
+ readonly "updateTag": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly payload: typeof UpdateTagRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateTag200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2718
+ /**
2719
+ * Delete a tag
2720
+ */
2721
+ readonly "deleteTag": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteTag200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2722
+ /**
2723
+ * Get all templates on a workspace
2724
+ */
2725
+ readonly "getTemplates": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetTemplatesParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTemplates200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2726
+ /**
2727
+ * Create templates on a workspace
2728
+ */
2729
+ readonly "createMany": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateManyRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateMany200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2730
+ /**
2731
+ * Get template by ID on a workspace
2732
+ */
2733
+ readonly "getTemplate": <Config extends OperationConfig>(workspaceId: string, templateId: string, options: { readonly params?: typeof GetTemplateParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTemplate200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2734
+ /**
2735
+ * Delete a template
2736
+ */
2737
+ readonly "delete1": <Config extends OperationConfig>(workspaceId: string, templateId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof Delete1200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2738
+ /**
2739
+ * Update a template
2740
+ */
2741
+ readonly "update": <Config extends OperationConfig>(workspaceId: string, templateId: string, options: { readonly payload: typeof UpdateRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof Update200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2742
+ /**
2743
+ * Add a new time entry
2744
+ */
2745
+ readonly "createTimeEntry": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateTimeEntryRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateTimeEntry201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2746
+ /**
2747
+ * Mark time entries as invoiced
2748
+ */
2749
+ readonly "updateInvoicedStatus": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof UpdateInvoicedStatusRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2750
+ /**
2751
+ * Get all in progress time entries on a workspace
2752
+ */
2753
+ readonly "getInProgressTimeEntries": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetInProgressTimeEntriesParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2754
+ /**
2755
+ * Get a specific time entry on a workspace
2756
+ */
2757
+ readonly "getTimeEntry": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly params?: typeof GetTimeEntryParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTimeEntry200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2758
+ /**
2759
+ * Update time entry on a workspace
2760
+ */
2761
+ readonly "updateTimeEntry": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly payload: typeof UpdateTimeEntryRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateTimeEntry200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2762
+ /**
2763
+ * Delete a time entry from a workspace
2764
+ */
2765
+ readonly "deleteTimeEntry": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2766
+ /**
2767
+ * Get balances for a policy
2768
+ */
2769
+ readonly "getBalancesForPolicy": <Config extends OperationConfig>(workspaceId: string, policyId: string, options: { readonly params?: typeof GetBalancesForPolicyParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2770
+ /**
2771
+ * Update a balance
2772
+ */
2773
+ readonly "updateBalance": <Config extends OperationConfig>(workspaceId: string, policyId: string, options: { readonly payload: typeof UpdateBalanceRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2774
+ /**
2775
+ * Get balance for a user
2776
+ */
2777
+ readonly "getBalancesForUser": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly params?: typeof GetBalancesForUserParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2778
+ /**
2779
+ * Get policies on a workspace
2780
+ */
2781
+ readonly "findPoliciesForWorkspace": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof FindPoliciesForWorkspaceParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof FindPoliciesForWorkspace200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2782
+ /**
2783
+ * Create a time off policy
2784
+ */
2785
+ readonly "createPolicy": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreatePolicyRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreatePolicy201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2786
+ /**
2787
+ * Get a time off policy
2788
+ */
2789
+ readonly "getPolicy": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetPolicy200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2790
+ /**
2791
+ * Update a policy
2792
+ */
2793
+ readonly "updatePolicy": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly payload: typeof UpdatePolicyRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdatePolicy200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2794
+ /**
2795
+ * Delete a policy
2796
+ */
2797
+ readonly "deletePolicy": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2798
+ /**
2799
+ * Change a policy status
2800
+ */
2801
+ readonly "updatePolicyStatus": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly payload: typeof UpdatePolicyStatusRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdatePolicyStatus200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2802
+ /**
2803
+ * Create a time off request
2804
+ */
2805
+ readonly "createTimeOffRequest": <Config extends OperationConfig>(workspaceId: string, policyId: string, options: { readonly payload: typeof CreateTimeOffRequestRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateTimeOffRequest200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2806
+ /**
2807
+ * Delete a time off request
2808
+ */
2809
+ readonly "deleteTimeOffRequest": <Config extends OperationConfig>(workspaceId: string, policyId: string, requestId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteTimeOffRequest200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2810
+ /**
2811
+ * Change a time off request status
2812
+ */
2813
+ readonly "changeTimeOffRequestStatus": <Config extends OperationConfig>(workspaceId: string, policyId: string, requestId: string, options: { readonly payload: typeof ChangeTimeOffRequestStatusRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof ChangeTimeOffRequestStatus200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2814
+ /**
2815
+ * Create a time off request for a user
2816
+ */
2817
+ readonly "createTimeOffRequestForOther": <Config extends OperationConfig>(workspaceId: string, policyId: string, userId: string, options: { readonly payload: typeof CreateTimeOffRequestForOtherRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateTimeOffRequestForOther200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2818
+ /**
2819
+ * Get all time off requests on a workspace
2820
+ */
2821
+ readonly "getTimeOffRequest": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GetTimeOffRequestRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetTimeOffRequest200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2822
+ /**
2823
+ * Find all groups on a workspace
2824
+ */
2825
+ readonly "getUserGroups": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetUserGroupsParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetUserGroups200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2826
+ /**
2827
+ * Add a new group
2828
+ */
2829
+ readonly "createUserGroup": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateUserGroupRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateUserGroup201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2830
+ /**
2831
+ * Update a group
2832
+ */
2833
+ readonly "updateUserGroup": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly payload: typeof UpdateUserGroupRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateUserGroup200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2834
+ /**
2835
+ * Delete a group
2836
+ */
2837
+ readonly "deleteUserGroup": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteUserGroup200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2838
+ /**
2839
+ * Add users to a group
2840
+ */
2841
+ readonly "addUser": <Config extends OperationConfig>(workspaceId: string, userGroupId: string, options: { readonly payload: typeof AddUserRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof AddUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2842
+ /**
2843
+ * Remove a user from a group
2844
+ */
2845
+ readonly "deleteUser": <Config extends OperationConfig>(workspaceId: string, userGroupId: string, userId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DeleteUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2846
+ /**
2847
+ * Get time entries for a user on a workspace
2848
+ */
2849
+ readonly "getTimeEntries": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly params?: typeof GetTimeEntriesParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetTimeEntries200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2850
+ /**
2851
+ * Bulk edit time entries
2852
+ */
2853
+ readonly "replaceMany": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly params?: typeof ReplaceManyParams.Encoded | undefined; readonly payload: typeof ReplaceManyRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof ReplaceMany200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2854
+ /**
2855
+ * Add a new time entry for another user on workspace
2856
+ */
2857
+ readonly "createForOthers": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly params?: typeof CreateForOthersParams.Encoded | undefined; readonly payload: typeof CreateForOthersRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateForOthers201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2858
+ /**
2859
+ * Delete all time entries for a user on a workspace
2860
+ */
2861
+ readonly "deleteMany": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly params: typeof DeleteManyParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof DeleteMany200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2862
+ /**
2863
+ * Stop a currently running timer on a workspace for a user
2864
+ */
2865
+ readonly "stopRunningTimeEntry": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof StopRunningTimeEntryRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof StopRunningTimeEntry200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2866
+ /**
2867
+ * Duplicate a time entry
2868
+ */
2869
+ readonly "duplicateTimeEntry": <Config extends OperationConfig>(workspaceId: string, userId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof DuplicateTimeEntry201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2870
+ /**
2871
+ * Find all users on a workspace
2872
+ */
2873
+ readonly "getUsersOfWorkspace": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof GetUsersOfWorkspaceParams.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetUsersOfWorkspace200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2874
+ /**
2875
+ * You can add users to a workspace via API only if that workspace has a paid subscription. If the workspace has a paid subscription, you can add as many users as you want but you are limited by the number of paid user seats on that workspace.
2876
+ */
2877
+ readonly "addUsers": <Config extends OperationConfig>(workspaceId: string, options: { readonly params: typeof AddUsersParams.Encoded; readonly payload: typeof AddUsersRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof AddUsers200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2878
+ /**
2879
+ * Filter workspace users
2880
+ */
2881
+ readonly "filterUsersOfWorkspace": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof FilterUsersOfWorkspaceRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof FilterUsersOfWorkspace200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2882
+ /**
2883
+ * Update a user's status
2884
+ */
2885
+ readonly "updateUserStatus": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof UpdateUserStatusRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateUserStatus200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2886
+ /**
2887
+ * This endpoint is not functional and has been deprecated. A user can be removed/deleted on the CAKE.com Account Members page after deactivating all their existing memberships on all workspaces within an organization.
2888
+ */
2889
+ readonly "removeMember": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof RemoveMember200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2890
+ /**
2891
+ * Update a user's cost rate
2892
+ */
2893
+ readonly "setCostRateForUser": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof SetCostRateForUserRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof SetCostRateForUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2894
+ /**
2895
+ * Update a user's custom field
2896
+ */
2897
+ readonly "upsertUserCustomFieldValue": <Config extends OperationConfig>(workspaceId: string, userId: string, customFieldId: string, options: { readonly payload: typeof UpsertUserCustomFieldValueRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpsertUserCustomFieldValue201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2898
+ /**
2899
+ * Update a user's hourly rate
2900
+ */
2901
+ readonly "setHourlyRateForUser": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof SetHourlyRateForUserRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof SetHourlyRateForUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2902
+ /**
2903
+ * Find user's team manager
2904
+ */
2905
+ readonly "getManagersOfUser": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly params?: typeof GetManagersOfUserParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetManagersOfUser200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2906
+ /**
2907
+ * Give manager role to a user
2908
+ */
2909
+ readonly "createUserRole": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof CreateUserRoleRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateUserRole201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2910
+ /**
2911
+ * Remove user's manager role
2912
+ */
2913
+ readonly "deleteUserRole": <Config extends OperationConfig>(workspaceId: string, userId: string, options: { readonly payload: typeof DeleteUserRoleRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2914
+ /**
2915
+ * Get all webhooks on a workspace
2916
+ */
2917
+ readonly "getWebhooks": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetWebhooksParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetWebhooks200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2918
+ /**
2919
+ * Creating a webhook generates a new token which can be used to verify that the webhook being sent was sent by Clockify, as it will always be present in the header.
2920
+ */
2921
+ readonly "createWebhook": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof CreateWebhookRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof CreateWebhook201.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2922
+ /**
2923
+ * Get a specific webhook by id
2924
+ */
2925
+ readonly "getWebhook": <Config extends OperationConfig>(workspaceId: string, webhookId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetWebhook200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2926
+ /**
2927
+ * Update a webhook
2928
+ */
2929
+ readonly "updateWebhook": <Config extends OperationConfig>(workspaceId: string, webhookId: string, options: { readonly payload: typeof UpdateWebhookRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof UpdateWebhook200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2930
+ /**
2931
+ * Delete a webhook
2932
+ */
2933
+ readonly "deleteWebhook": <Config extends OperationConfig>(workspaceId: string, webhookId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2934
+ /**
2935
+ * Get logs for a webhook
2936
+ */
2937
+ readonly "getLogsForWebhook": <Config extends OperationConfig>(workspaceId: string, webhookId: string, options: { readonly params?: typeof GetLogsForWebhookParams.Encoded | undefined; readonly payload: typeof GetLogsForWebhookRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetLogsForWebhook200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2938
+ /**
2939
+ * Get webhook event statuses for a webhook
2940
+ */
2941
+ readonly "getWebhookEventStatusesWithLatestLog": <Config extends OperationConfig>(workspaceId: string, webhookId: string, options: { readonly params?: typeof GetWebhookEventStatusesWithLatestLogParams.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GetWebhookEventStatusesWithLatestLog200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2942
+ /**
2943
+ * Generates a new webhook token and invalidates previous one
2944
+ */
2945
+ readonly "generateNewToken": <Config extends OperationConfig>(workspaceId: string, webhookId: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<typeof GenerateNewToken200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2946
+ /**
2947
+ * Response depends on report type and export type. Given example is for SUMMARY report and JSON exportType.
2948
+ *
2949
+ * Shared report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).
2950
+ */
2951
+ readonly "generateSharedReportV1": <Config extends OperationConfig>(id: string, options: { readonly params?: typeof GenerateSharedReportV1Params.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2952
+ /**
2953
+ * Generate an attendance report
2954
+ */
2955
+ readonly "generateAttendanceReport": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GenerateAttendanceReportRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2956
+ /**
2957
+ * Detailed report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).
2958
+ */
2959
+ readonly "generateDetailedReport": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GenerateDetailedReportRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2960
+ /**
2961
+ * Expense report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).
2962
+ */
2963
+ readonly "generateDetailedReportV1": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GenerateDetailedReportV1RequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GenerateDetailedReportV1200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2964
+ /**
2965
+ * Summary report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).
2966
+ */
2967
+ readonly "generateSummaryReport": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GenerateSummaryReportRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2968
+ /**
2969
+ * Weekly report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).
2970
+ */
2971
+ readonly "generateWeeklyReport": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GenerateWeeklyReportRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2972
+ /**
2973
+ * Gets all shared reports for current user on given workspace
2974
+ */
2975
+ readonly "getSharedReportsV1": <Config extends OperationConfig>(workspaceId: string, options: { readonly params?: typeof GetSharedReportsV1Params.Encoded | undefined; readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2976
+ /**
2977
+ * Saves shared report with name, options and report filter.
2978
+ *
2979
+ * Shared report data on FREE subscription plan is limited to a maximum interval length of one month (31 days).
2980
+ */
2981
+ readonly "saveSharedReportV1": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof SaveSharedReportV1RequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2982
+ /**
2983
+ * Updates shared report name and/or options
2984
+ */
2985
+ readonly "updateSharedReportV1": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly payload: typeof UpdateSharedReportV1RequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2986
+ /**
2987
+ * Delete a shared report
2988
+ */
2989
+ readonly "deleteSharedReportV1": <Config extends OperationConfig>(workspaceId: string, id: string, options: { readonly config?: Config | undefined } | undefined) => Effect.Effect<WithOptionalResponse<void, Config>, HttpClientError.HttpClientError | SchemaError>
2990
+ /**
2991
+ * Generate an audit log report
2992
+ */
2993
+ readonly "getAuditLogs": <Config extends OperationConfig>(workspaceId: string, options: { readonly payload: typeof GetAuditLogsRequestJson.Encoded; readonly config?: Config | undefined }) => Effect.Effect<WithOptionalResponse<typeof GetAuditLogs200.Type, Config>, HttpClientError.HttpClientError | SchemaError>
2994
+ }
2995
+
2996
+ export interface ClockifyApiError<Tag extends string, E> {
2997
+ readonly _tag: Tag
2998
+ readonly request: HttpClientRequest.HttpClientRequest
2999
+ readonly response: HttpClientResponse.HttpClientResponse
3000
+ readonly cause: E
3001
+ }
3002
+
3003
+ class ClockifyApiErrorImpl extends Data.Error<{
3004
+ _tag: string
3005
+ cause: any
3006
+ request: HttpClientRequest.HttpClientRequest
3007
+ response: HttpClientResponse.HttpClientResponse
3008
+ }> {}
3009
+
3010
+ export const ClockifyApiError = <Tag extends string, E>(
3011
+ tag: Tag,
3012
+ cause: E,
3013
+ response: HttpClientResponse.HttpClientResponse,
3014
+ ): ClockifyApiError<Tag, E> =>
3015
+ new ClockifyApiErrorImpl({
3016
+ _tag: tag,
3017
+ cause,
3018
+ response,
3019
+ request: response.request,
3020
+ }) as any