@conflict-hq/ezacto-client 0.1.0

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.
@@ -0,0 +1,3421 @@
1
+ export type AttachmentUploadInput = {
2
+ "file": string;
3
+ };
4
+ export type Attachment = {
5
+ "id": number;
6
+ "name": string;
7
+ "content_hash": string;
8
+ "byte_size": number;
9
+ "content_type": string;
10
+ "uploaded_by_user_id": number | null;
11
+ "created_at": string;
12
+ "updated_at": string;
13
+ };
14
+ export type AttachmentEnvelope = {
15
+ "data": Attachment;
16
+ "links": Links;
17
+ };
18
+ export type AttachmentListEnvelope = {
19
+ "data": Array<Attachment>;
20
+ "links": Links;
21
+ };
22
+ export type InvoiceReminderPolicy = {
23
+ "first_after_days": number;
24
+ "every_days": number;
25
+ };
26
+ export type FieldError = {
27
+ "field": string;
28
+ "code": string;
29
+ "message": string;
30
+ "minimum_length"?: number;
31
+ };
32
+ export type ErrorDetail = {
33
+ "code": string;
34
+ "message": string;
35
+ "fields": Array<FieldError>;
36
+ };
37
+ export type ErrorEnvelope = {
38
+ "error": ErrorDetail;
39
+ "request_id": string;
40
+ };
41
+ export type SignupInput = {
42
+ "organization_name": string;
43
+ "first_name": string;
44
+ "last_name": string;
45
+ "email": string;
46
+ "password": string;
47
+ };
48
+ export type AuthTokenInput = {
49
+ "token": string;
50
+ };
51
+ export type PasswordSignInInput = {
52
+ "email": string;
53
+ "password": string;
54
+ };
55
+ export type EmailInput = {
56
+ "email": string;
57
+ };
58
+ export type PasswordResetInput = {
59
+ "token": string;
60
+ "password": string;
61
+ };
62
+ export type AuthAccepted = {
63
+ "status": "verification_sent" | "reset_requested";
64
+ };
65
+ export type AuthAcceptedEnvelope = {
66
+ "data": AuthAccepted;
67
+ };
68
+ export type AuthPrincipal = {
69
+ "status": "verified" | "authenticated" | "password_reset";
70
+ "user_id": number;
71
+ "profile": "member" | "project_manager" | "people_admin" | "accounting" | "executive_manager" | "administrator";
72
+ "manager_grants": Array<string>;
73
+ };
74
+ export type AuthPrincipalEnvelope = {
75
+ "data": AuthPrincipal;
76
+ };
77
+ export type Session = {
78
+ "id": number;
79
+ "created_at": string;
80
+ "last_seen_at": string;
81
+ "idle_expires_at": string;
82
+ "absolute_expires_at": string;
83
+ "revoked_at": string | null;
84
+ "revocation_reason": "user_revoked" | "privilege_change" | "password_reset" | "user_disabled" | null;
85
+ "current": boolean;
86
+ };
87
+ export type SessionEnvelope = {
88
+ "data": Session;
89
+ };
90
+ export type SessionPage = {
91
+ "data": Array<Session>;
92
+ "links": Links;
93
+ };
94
+ export type EmailRecipient = {
95
+ "email": string;
96
+ "name"?: string;
97
+ };
98
+ export type EmailLog = {
99
+ "id": number;
100
+ "from": EmailRecipient | null;
101
+ "reply_to": Array<EmailRecipient>;
102
+ "to": Array<EmailRecipient>;
103
+ "template": string;
104
+ "subject": string;
105
+ "provider": string | null;
106
+ "provider_message_id": string | null;
107
+ "provider_request_id": string | null;
108
+ "provider_latency_ms": number | null;
109
+ "status": "queued" | "sent" | "bounced" | "complained" | "failed";
110
+ "related_type": string | null;
111
+ "related_id": number | null;
112
+ "attempt_count": number;
113
+ "failure_code": "queue_unavailable" | "provider_timeout" | "provider_rejected" | null;
114
+ "failure_reason": string | null;
115
+ "created_at": string;
116
+ "updated_at": string;
117
+ };
118
+ export type EmailLogPage = {
119
+ "data": Array<EmailLog>;
120
+ "links": Links;
121
+ };
122
+ export type EmailReputationSnapshot = {
123
+ "sent": number;
124
+ "bounced": number;
125
+ "complained": number;
126
+ "failed": number;
127
+ "bounce_rate_ppm": number;
128
+ "complaint_rate_ppm": number;
129
+ };
130
+ export type EmailHealth = {
131
+ "reputation": EmailReputationSnapshot;
132
+ };
133
+ export type EmailHealthEnvelope = {
134
+ "data": EmailHealth;
135
+ "links": Links;
136
+ };
137
+ export type EmailTemplateVariable = {
138
+ "name": string;
139
+ "token": string;
140
+ "description": string;
141
+ "compatibility": "harvest" | "native";
142
+ };
143
+ export type EmailTemplateVariableGroup = {
144
+ "kind": "invoice" | "reminder" | "thank_you" | "auth_email_verification" | "auth_password_reset";
145
+ "variables": Array<EmailTemplateVariable>;
146
+ };
147
+ export type EmailTemplateVariableCatalog = {
148
+ "data": Array<EmailTemplateVariableGroup>;
149
+ "links": Links;
150
+ };
151
+ export type EmailTemplate = {
152
+ "kind": "invoice" | "reminder" | "thank_you" | "auth_email_verification" | "auth_password_reset";
153
+ "version": number;
154
+ "subject_template": string;
155
+ "text_template": string;
156
+ "html_template": string | null;
157
+ "unknown_variable_policy": "error" | "literal";
158
+ "created_by_user_id": number | null;
159
+ "created_at": string;
160
+ };
161
+ export type EmailTemplatePage = {
162
+ "data": Array<EmailTemplate>;
163
+ "links": Links;
164
+ };
165
+ export type EmailTemplateEnvelope = {
166
+ "data": EmailTemplate;
167
+ };
168
+ export type EmailTemplateVersionInput = {
169
+ "expected_version": number;
170
+ "subject_template": string;
171
+ "text_template": string;
172
+ "html_template"?: string | null;
173
+ "unknown_variable_policy"?: "error" | "literal";
174
+ };
175
+ export type SenderIdentityEvidence = {
176
+ "version": number;
177
+ "source": "provider_api" | "deployment_config";
178
+ "identity_kind": "email_address" | "domain";
179
+ "verification_status": "pending" | "verified" | "failed" | "temporary_failure" | "operator_configured";
180
+ "dkim_status": "pending" | "verified" | "failed" | "not_applicable";
181
+ "mail_from_domain": string | null;
182
+ "mail_from_status": "pending" | "verified" | "failed" | "not_configured";
183
+ "observed_at": string;
184
+ };
185
+ export type SenderIdentity = {
186
+ "id": number;
187
+ "email": string;
188
+ "display_name": string;
189
+ "reply_to_email": string | null;
190
+ "provider": string;
191
+ "provider_identity": string;
192
+ "is_default": boolean;
193
+ "version": number;
194
+ "archived_at": string | null;
195
+ "evidence": SenderIdentityEvidence | null;
196
+ "created_by_user_id": number;
197
+ "created_at": string;
198
+ "updated_at": string;
199
+ };
200
+ export type SenderIdentityPage = {
201
+ "data": Array<SenderIdentity>;
202
+ "links": Links;
203
+ };
204
+ export type SenderIdentityEnvelope = {
205
+ "data": SenderIdentity;
206
+ };
207
+ export type SenderIdentityInput = {
208
+ "email": string;
209
+ "display_name": string;
210
+ "reply_to_email"?: string | null;
211
+ "provider": string;
212
+ "provider_identity": string;
213
+ };
214
+ export type SenderIdentityPatch = {
215
+ "expected_version": number;
216
+ "display_name"?: string;
217
+ "reply_to_email"?: string | null;
218
+ };
219
+ export type SenderIdentityVersionInput = {
220
+ "expected_version": number;
221
+ };
222
+ export type BackupRun = {
223
+ "id": number;
224
+ "status": "running" | "completed" | "failed";
225
+ "trigger": "nightly" | "manual";
226
+ "started_at": string;
227
+ "completed_at": string | null;
228
+ "r2_prefix": string | null;
229
+ "table_count": number | null;
230
+ "total_rows": number | null;
231
+ "error_message": string | null;
232
+ };
233
+ export type BackupStatusEnvelope = {
234
+ "data": {
235
+ "last_completed": BackupRun | null;
236
+ "last_failed": BackupRun | null;
237
+ "recent_runs": Array<BackupRun>;
238
+ "has_failure": boolean;
239
+ };
240
+ "links": Links;
241
+ };
242
+ export type QuickBooksConnection = {
243
+ "realm_id": string;
244
+ "company_name": string | null;
245
+ "scope": string;
246
+ "allow_online_payment": boolean;
247
+ "connected_at": string;
248
+ };
249
+ export type QuickBooksStatusEnvelope = {
250
+ "data": {
251
+ "configured": boolean;
252
+ "connection": QuickBooksConnection | null;
253
+ };
254
+ };
255
+ export type QuickBooksAuthorizeEnvelope = {
256
+ "data": {
257
+ "authorize_url": string;
258
+ };
259
+ };
260
+ export type QuickBooksConnectionEnvelope = {
261
+ "data": QuickBooksConnection | null;
262
+ };
263
+ export type QuickBooksSettingsInput = {
264
+ "allow_online_payment": boolean;
265
+ };
266
+ export type SenderEvidenceRefreshInput = {
267
+ "expected_evidence_version": number;
268
+ };
269
+ export type EmailTestSendInput = {
270
+ "template_kind": "invoice" | "reminder" | "thank_you";
271
+ "template_version": number;
272
+ "variables": {
273
+ [key: string]: string;
274
+ };
275
+ "confirmed": true;
276
+ };
277
+ export type EmailTestSend = {
278
+ "status": "queued";
279
+ "delivery_id": number;
280
+ "sender_identity_id": number;
281
+ "template_kind": "invoice" | "reminder" | "thank_you";
282
+ "template_version": number;
283
+ "recipient_email": string;
284
+ };
285
+ export type EmailTestSendEnvelope = {
286
+ "data": EmailTestSend;
287
+ };
288
+ export type OutboxAggregate = {
289
+ "type": string;
290
+ "id": number;
291
+ "sequence": number;
292
+ };
293
+ export type ActivityLog = {
294
+ "event_id": string;
295
+ "event_type": string;
296
+ "aggregate": OutboxAggregate;
297
+ "payload": {
298
+ [key: string]: unknown;
299
+ };
300
+ "occurred_at": string;
301
+ "available_at": string;
302
+ "recorded_at": string;
303
+ };
304
+ export type ActivityLogPage = {
305
+ "data": Array<ActivityLog>;
306
+ "links": Links;
307
+ };
308
+ export type OutboxDelivery = {
309
+ "subscriber_id": string;
310
+ "event_id": string;
311
+ "event_type": string;
312
+ "aggregate": OutboxAggregate;
313
+ "status": "pending" | "processing" | "delivered" | "failed";
314
+ "attempt_count": number;
315
+ "next_attempt_at": string | null;
316
+ "last_error_code": "subscriber_timeout" | "subscriber_rejected" | null;
317
+ "delivered_at": string | null;
318
+ "failed_at": string | null;
319
+ "occurred_at": string;
320
+ "created_at": string;
321
+ "updated_at": string;
322
+ };
323
+ export type OutboxDeliveryPage = {
324
+ "data": Array<OutboxDelivery>;
325
+ "links": Links;
326
+ };
327
+ export type OutboxDeliveryEnvelope = {
328
+ "data": OutboxDelivery;
329
+ "links": Links;
330
+ };
331
+ export type Links = {
332
+ "self": string;
333
+ };
334
+ export type PageLinks = {
335
+ "self": string;
336
+ "next": string | null;
337
+ };
338
+ export type PageMetadata = {
339
+ "per_page": number;
340
+ "next_cursor": string | null;
341
+ };
342
+ export type Service = {
343
+ "service": "ezacto";
344
+ "version": "v1";
345
+ };
346
+ export type ServiceEnvelope = {
347
+ "data": Service;
348
+ "links": Links;
349
+ };
350
+ export type TokenAuthentication = {
351
+ "kind": "token";
352
+ "token_id": number;
353
+ "scopes": Array<"time_entries:read" | "time_entries:write" | "projects:read" | "projects:write" | "clients:read" | "clients:write" | "invoices:read" | "invoices:write" | "expenses:read" | "expenses:write" | "team:read" | "schedule:read" | "schedule:write" | "reports:read">;
354
+ };
355
+ export type SessionAuthentication = {
356
+ "kind": "session";
357
+ };
358
+ export type Whoami = {
359
+ "user_id": number;
360
+ "profile": "member" | "project_manager" | "people_admin" | "accounting" | "executive_manager" | "administrator";
361
+ "manager_grants": Array<string>;
362
+ "authentication": TokenAuthentication | SessionAuthentication;
363
+ };
364
+ export type WhoamiEnvelope = {
365
+ "data": Whoami;
366
+ "links": Links;
367
+ };
368
+ export type GeneralResource = {
369
+ "id": number;
370
+ "created_at": string;
371
+ "updated_at": string;
372
+ [key: string]: unknown;
373
+ };
374
+ export type GeneralMutationInput = {
375
+ [key: string]: unknown;
376
+ };
377
+ export type GeneralResourceEnvelope = {
378
+ "data": GeneralResource;
379
+ "links": Links;
380
+ };
381
+ export type GeneralResourcePage = {
382
+ "data": Array<GeneralResource>;
383
+ "links": PageLinks;
384
+ "page": PageMetadata;
385
+ };
386
+ export type ExpenseCategory = {
387
+ "id": number;
388
+ "name": string;
389
+ "unit_name": string | null;
390
+ "unit_price_cents": number | null;
391
+ "is_active": boolean;
392
+ "created_at": string;
393
+ "updated_at": string;
394
+ };
395
+ export type ExpenseCategoryInput = {
396
+ "name": string;
397
+ "unit_name"?: string | null;
398
+ "unit_price_cents"?: number | null;
399
+ "is_active"?: boolean;
400
+ };
401
+ export type ExpenseCategoryPatch = {
402
+ "name"?: string;
403
+ "unit_name"?: string | null;
404
+ "unit_price_cents"?: number | null;
405
+ "is_active"?: boolean;
406
+ };
407
+ export type ExpenseCategoryEnvelope = {
408
+ "data": ExpenseCategory;
409
+ "links": Links;
410
+ };
411
+ export type ExpenseCategoryPage = {
412
+ "data": Array<ExpenseCategory>;
413
+ "links": PageLinks;
414
+ "page": PageMetadata;
415
+ };
416
+ export type UserRate = {
417
+ "id": number;
418
+ "user_id": number;
419
+ "amount_cents": number;
420
+ "start_date": string | null;
421
+ "end_date": string | null;
422
+ "created_at": string;
423
+ "updated_at": string;
424
+ };
425
+ export type UserRateInput = {
426
+ "expected_version": number;
427
+ "amount_cents": number;
428
+ "start_date"?: string | null;
429
+ };
430
+ export type UserRateEnvelope = {
431
+ "data": UserRate;
432
+ "links": Links;
433
+ };
434
+ export type UserRatePage = {
435
+ "data": Array<UserRate>;
436
+ "links": PageLinks;
437
+ "page": PageMetadata;
438
+ };
439
+ export type TeamStatus = {
440
+ "enabled": boolean;
441
+ };
442
+ export type TeamStatusEnvelope = {
443
+ "data": TeamStatus;
444
+ "links": Links;
445
+ };
446
+ export type TeamNamedRelation = {
447
+ "id": number;
448
+ "name": string;
449
+ };
450
+ export type TeamPersonSummary = {
451
+ "id": number;
452
+ "first_name": string;
453
+ "last_name": string;
454
+ "email": string | null;
455
+ "avatar_url": string | null;
456
+ "profile": "member" | "project_manager" | "people_admin" | "accounting" | "executive_manager" | "administrator";
457
+ "is_owner": boolean;
458
+ "is_contractor": boolean;
459
+ "is_active": boolean;
460
+ "weekly_capacity": number;
461
+ "total_seconds": number;
462
+ "billable_seconds": number;
463
+ "nonbillable_seconds": number;
464
+ "utilization_ppm": number | null;
465
+ "running": boolean;
466
+ };
467
+ export type TeamPersonSummaryPage = {
468
+ "data": Array<TeamPersonSummary>;
469
+ "links": PageLinks;
470
+ "page": PageMetadata;
471
+ };
472
+ export type TeamProjectAssignment = {
473
+ "id": number;
474
+ "project_id": number;
475
+ "project_name": string;
476
+ "project_code": string;
477
+ "client_id": number;
478
+ "client_name": string;
479
+ "is_active": boolean;
480
+ "is_project_manager": boolean;
481
+ "use_default_rates": boolean;
482
+ "hourly_rate_cents"?: number | null;
483
+ "budget_seconds": number | null;
484
+ "updated_at": string;
485
+ };
486
+ export type TeamNotificationChannels = {
487
+ "email": boolean;
488
+ "desktop": boolean;
489
+ "slack": boolean;
490
+ };
491
+ export type TeamInactiveNotificationChannels = {
492
+ "email": false;
493
+ "desktop": false;
494
+ "slack": false;
495
+ };
496
+ export type TeamNotificationPreference = {
497
+ "delivery_active": false;
498
+ "daily_reminder_enabled": boolean;
499
+ "reminder_time": string | null;
500
+ "reminder_days": Array<"monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday">;
501
+ "channels": TeamNotificationChannels;
502
+ "include_in_team_reminders": boolean;
503
+ "weekly_digest": boolean;
504
+ "notify_project_deleted": boolean;
505
+ "updated_at": string;
506
+ };
507
+ export type TeamPerson = {
508
+ "id": number;
509
+ "first_name": string;
510
+ "last_name": string;
511
+ "email": string | null;
512
+ "telephone": string | null;
513
+ "employee_id": string | null;
514
+ "timezone": string;
515
+ "is_contractor": boolean;
516
+ "is_active": boolean;
517
+ "has_access_to_all_future_projects": boolean;
518
+ "weekly_capacity": number;
519
+ "profile": "member" | "project_manager" | "people_admin" | "accounting" | "executive_manager" | "administrator";
520
+ "is_owner": boolean;
521
+ "avatar_url": string | null;
522
+ "version": number;
523
+ "created_at": string;
524
+ "updated_at": string;
525
+ "roles": Array<TeamNamedRelation>;
526
+ "departments": Array<TeamNamedRelation>;
527
+ "project_assignments": Array<TeamProjectAssignment>;
528
+ "billable_rates"?: Array<UserRate>;
529
+ "cost_rates"?: Array<UserRate>;
530
+ "notifications": TeamNotificationPreference;
531
+ };
532
+ export type TeamPersonEnvelope = {
533
+ "data": TeamPerson;
534
+ "links": Links;
535
+ };
536
+ export type TeamCatalogProject = {
537
+ "id": number;
538
+ "name": string;
539
+ "code": string;
540
+ "client_id": number;
541
+ "client_name": string;
542
+ "is_active": boolean;
543
+ };
544
+ export type TeamCatalog = {
545
+ "roles": Array<TeamNamedRelation>;
546
+ "departments": Array<TeamNamedRelation>;
547
+ "projects": Array<TeamCatalogProject>;
548
+ };
549
+ export type TeamCatalogEnvelope = {
550
+ "data": TeamCatalog;
551
+ "links": Links;
552
+ };
553
+ export type TeamPersonPatch = {
554
+ "expected_version": number;
555
+ "first_name"?: string;
556
+ "last_name"?: string;
557
+ "telephone"?: string | null;
558
+ "employee_id"?: string | null;
559
+ "timezone"?: string;
560
+ "is_contractor"?: boolean;
561
+ "is_active"?: boolean;
562
+ "has_access_to_all_future_projects"?: boolean;
563
+ "weekly_capacity"?: number;
564
+ "profile"?: "member" | "project_manager" | "people_admin" | "accounting" | "executive_manager" | "administrator";
565
+ "role_ids"?: Array<number>;
566
+ "department_ids"?: Array<number>;
567
+ };
568
+ export type TeamAssignmentInput = {
569
+ "project_id": number;
570
+ "is_project_manager": boolean;
571
+ };
572
+ export type TeamAssignmentReplaceInput = {
573
+ "expected_version": number;
574
+ "assignments": Array<TeamAssignmentInput>;
575
+ };
576
+ export type TeamNotificationInput = {
577
+ "expected_version": number;
578
+ "daily_reminder_enabled": false;
579
+ "reminder_time": string | null;
580
+ "reminder_days": Array<"monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday" | "sunday">;
581
+ "channels": TeamInactiveNotificationChannels;
582
+ "include_in_team_reminders": false;
583
+ "weekly_digest": false;
584
+ "notify_project_deleted": false;
585
+ };
586
+ export type TeamRateInput = {
587
+ "expected_version": number;
588
+ "kind": "billable" | "cost";
589
+ "amount_cents": number;
590
+ "start_date": string | null;
591
+ };
592
+ export type TeamCommandReceipt = {
593
+ "target_user_id": number;
594
+ "version": number;
595
+ "resource_id": number | null;
596
+ "occurred_at": string;
597
+ };
598
+ export type TeamCommandReceiptEnvelope = {
599
+ "data": TeamCommandReceipt;
600
+ "links": Links;
601
+ };
602
+ export type ApiToken = {
603
+ "id": number;
604
+ "name": string;
605
+ "scopes": Array<"time_entries:read" | "time_entries:write" | "projects:read" | "projects:write" | "clients:read" | "clients:write" | "invoices:read" | "invoices:write" | "expenses:read" | "expenses:write" | "team:read" | "schedule:read" | "schedule:write" | "reports:read">;
606
+ "token_hint": string;
607
+ "created_at": string;
608
+ "last_used_at": string | null;
609
+ "expires_at": string | null;
610
+ "revoked_at": string | null;
611
+ };
612
+ export type IssuedApiToken = (ApiToken) & ({
613
+ "token": string;
614
+ });
615
+ export type CreateApiTokenInput = {
616
+ "name": string;
617
+ "scopes": Array<"time_entries:read" | "time_entries:write" | "projects:read" | "projects:write" | "clients:read" | "clients:write" | "invoices:read" | "invoices:write" | "expenses:read" | "expenses:write" | "team:read" | "schedule:read" | "schedule:write" | "reports:read">;
618
+ "expires_at"?: string | null;
619
+ };
620
+ export type ApiTokenEnvelope = {
621
+ "data": ApiToken;
622
+ "links": Links;
623
+ };
624
+ export type IssuedApiTokenEnvelope = {
625
+ "data": IssuedApiToken;
626
+ "links": Links;
627
+ };
628
+ export type ApiTokenListEnvelope = {
629
+ "data": Array<ApiToken>;
630
+ "links": Links;
631
+ };
632
+ export type TimeEntry = {
633
+ "id": number;
634
+ "user_id": number;
635
+ "project_id": number;
636
+ "task_id": number;
637
+ "user_assignment_id"?: number;
638
+ "task_assignment_id"?: number;
639
+ "spent_date": string;
640
+ "seconds": number;
641
+ "seconds_without_timer"?: number;
642
+ "rounded_seconds"?: number;
643
+ "is_running": boolean;
644
+ "timer_started_at"?: string | null;
645
+ "started_time"?: string | null;
646
+ "ended_time"?: string | null;
647
+ "notes"?: string | null;
648
+ "billable": boolean;
649
+ "budgeted": boolean;
650
+ "approval_status": "unsubmitted" | "submitted" | "approved";
651
+ "source_approval_status"?: "unsubmitted" | "submitted" | "approved" | null;
652
+ "invoice_id"?: number | null;
653
+ "is_billed"?: boolean;
654
+ "is_locked": boolean;
655
+ "locked_reason_code"?: string | null;
656
+ "locked_reason"?: string | null;
657
+ "external_ref"?: {
658
+ [key: string]: unknown;
659
+ } | null;
660
+ "calendar_event_ref"?: {
661
+ [key: string]: unknown;
662
+ } | null;
663
+ "minimum_note_length": number;
664
+ "billable_rate_cents"?: number | null;
665
+ "cost_rate_cents"?: number | null;
666
+ "created_at": string;
667
+ "updated_at": string;
668
+ };
669
+ export type TimeEntryInput = {
670
+ "project_id": number;
671
+ "task_id": number;
672
+ "spent_date"?: string;
673
+ "seconds"?: number;
674
+ "started_time"?: string;
675
+ "ended_time"?: string;
676
+ "notes"?: string | null;
677
+ "budgeted"?: boolean;
678
+ "external_ref"?: {
679
+ [key: string]: unknown;
680
+ } | null;
681
+ "calendar_event_ref"?: {
682
+ [key: string]: unknown;
683
+ } | null;
684
+ };
685
+ export type TimeEntryPatch = {
686
+ "project_id"?: number;
687
+ "task_id"?: number;
688
+ "spent_date"?: string;
689
+ "seconds"?: number;
690
+ "started_time"?: string;
691
+ "ended_time"?: string;
692
+ "notes"?: string | null;
693
+ "budgeted"?: boolean;
694
+ "external_ref"?: {
695
+ [key: string]: unknown;
696
+ } | null;
697
+ "calendar_event_ref"?: {
698
+ [key: string]: unknown;
699
+ } | null;
700
+ };
701
+ export type TimeEntryEnvelope = {
702
+ "data": TimeEntry;
703
+ "links": Links;
704
+ };
705
+ export type TimeEntryPage = {
706
+ "data": Array<TimeEntry>;
707
+ "links": PageLinks;
708
+ "page": PageMetadata;
709
+ };
710
+ export type TimeEntrySettings = {
711
+ "time_entry_mode": "duration" | "start_end";
712
+ "time_format": "decimal" | "hours_minutes";
713
+ "clock": "12h" | "24h";
714
+ "week_start_day": "saturday" | "sunday" | "monday";
715
+ };
716
+ export type TimeEntrySettingsEnvelope = {
717
+ "data": TimeEntrySettings;
718
+ "links": Links;
719
+ };
720
+ export type TimeEntryNoteSettings = {
721
+ "required": boolean;
722
+ "minimum_length": number;
723
+ };
724
+ export type TimeEntryNoteSettingsPatch = {
725
+ "required"?: boolean;
726
+ "minimum_length"?: number;
727
+ };
728
+ export type TimeEntryNoteSettingsEnvelope = {
729
+ "data": TimeEntryNoteSettings;
730
+ "links": Links;
731
+ };
732
+ export type TimeEntryOption = {
733
+ "project_id": number;
734
+ "task_id": number;
735
+ "minimum_note_length": number;
736
+ };
737
+ export type TimeEntryOptionListEnvelope = {
738
+ "data": Array<TimeEntryOption>;
739
+ "links": Links;
740
+ };
741
+ export type TimesheetSubmission = {
742
+ "id": number;
743
+ "user_id": number;
744
+ "user_name": string;
745
+ "period_start": string;
746
+ "period_end": string;
747
+ "status": "unsubmitted" | "submitted" | "approved";
748
+ "origin": "native" | "harvest_import" | "legacy_backfill";
749
+ "source_status": "submitted" | "approved" | null;
750
+ "source_observed_at": string | null;
751
+ "submitted_by_user_id": number | null;
752
+ "submitted_at": string | null;
753
+ "reviewed_by_user_id": number | null;
754
+ "reviewed_at": string | null;
755
+ "rejection_reason": string | null;
756
+ "version": number;
757
+ "entry_count": number;
758
+ "expense_count": number;
759
+ "total_seconds": number;
760
+ "billable_seconds": number;
761
+ "nonbillable_seconds": number;
762
+ "created_at": string;
763
+ "updated_at": string;
764
+ };
765
+ export type TimesheetSubmissionInput = {
766
+ "period_start": string;
767
+ "period_end": string;
768
+ };
769
+ export type TimesheetSubmissionEntry = {
770
+ "id": number;
771
+ "spent_date": string;
772
+ "project_id": number;
773
+ "project_name": string;
774
+ "task_id": number;
775
+ "task_name": string;
776
+ "seconds": number;
777
+ "notes": string | null;
778
+ };
779
+ export type TimesheetSubmissionExpense = {
780
+ "id": number;
781
+ "spent_date": string;
782
+ "project_id": number;
783
+ "project_name": string;
784
+ "expense_category_id": number;
785
+ "expense_category_name": string;
786
+ "total_cost_cents": number;
787
+ "currency": string;
788
+ "notes": string | null;
789
+ };
790
+ export type TimesheetSubmissionDetail = {
791
+ "id": number;
792
+ "user_id": number;
793
+ "user_name": string;
794
+ "period_start": string;
795
+ "period_end": string;
796
+ "status": "unsubmitted" | "submitted" | "approved";
797
+ "origin": "native" | "harvest_import" | "legacy_backfill";
798
+ "source_status": "submitted" | "approved" | null;
799
+ "source_observed_at": string | null;
800
+ "submitted_by_user_id": number | null;
801
+ "submitted_at": string | null;
802
+ "reviewed_by_user_id": number | null;
803
+ "reviewed_at": string | null;
804
+ "rejection_reason": string | null;
805
+ "version": number;
806
+ "entry_count": number;
807
+ "expense_count": number;
808
+ "total_seconds": number;
809
+ "billable_seconds": number;
810
+ "nonbillable_seconds": number;
811
+ "created_at": string;
812
+ "updated_at": string;
813
+ "entries": Array<TimesheetSubmissionEntry>;
814
+ "expenses": Array<TimesheetSubmissionExpense>;
815
+ };
816
+ export type TimesheetRejectionInput = {
817
+ "reason": string;
818
+ };
819
+ export type TimesheetWithdrawalInput = {
820
+ "reason": string;
821
+ };
822
+ export type TimesheetBulkApprovalInput = {
823
+ "submissions": Array<{
824
+ "id": number;
825
+ "expected_version": number;
826
+ }>;
827
+ };
828
+ export type TimesheetBulkApprovalResult = {
829
+ "data": Array<TimesheetSubmission>;
830
+ "links": Links;
831
+ };
832
+ export type TimesheetSubmissionEnvelope = {
833
+ "data": TimesheetSubmission;
834
+ "links": Links;
835
+ };
836
+ export type TimesheetSubmissionDetailEnvelope = {
837
+ "data": TimesheetSubmissionDetail;
838
+ "links": Links;
839
+ };
840
+ export type TimesheetSubmissionPage = {
841
+ "data": Array<TimesheetSubmission>;
842
+ "links": PageLinks;
843
+ "page": PageMetadata;
844
+ };
845
+ export type TimesheetDeadline = {
846
+ "day": "sunday" | "monday" | "tuesday" | "wednesday" | "thursday" | "friday" | "saturday";
847
+ "time": string;
848
+ };
849
+ export type TimesheetLockPolicy = {
850
+ "auto_lock": boolean;
851
+ "timesheet_deadline": TimesheetDeadline | null;
852
+ "timezone": string;
853
+ "week_start_day": "saturday" | "sunday" | "monday";
854
+ "updated_at": string;
855
+ };
856
+ export type TimesheetLockPolicyPatch = {
857
+ "auto_lock"?: boolean;
858
+ "timesheet_deadline"?: TimesheetDeadline | null;
859
+ "timezone"?: string;
860
+ };
861
+ export type TimesheetLockPolicyEnvelope = {
862
+ "data": TimesheetLockPolicy;
863
+ "links": Links;
864
+ };
865
+ export type TimesheetLockWindow = {
866
+ "id": number;
867
+ "kind": "manual" | "auto";
868
+ "period_start": string | null;
869
+ "period_end": string;
870
+ "reason": string;
871
+ "locked_by_user_id": number | null;
872
+ "locked_at": string;
873
+ "unlocked_by_user_id": number | null;
874
+ "unlocked_at": string | null;
875
+ "unlock_reason": string | null;
876
+ "active": boolean;
877
+ };
878
+ export type TimesheetManualLockInput = {
879
+ "locked_through": string;
880
+ "reason": string;
881
+ };
882
+ export type TimesheetUnlockInput = {
883
+ "reason": string;
884
+ };
885
+ export type TimesheetLockWindowEnvelope = {
886
+ "data": TimesheetLockWindow;
887
+ "links": Links;
888
+ };
889
+ export type TimesheetLockWindowPage = {
890
+ "data": Array<TimesheetLockWindow>;
891
+ "links": PageLinks;
892
+ "page": PageMetadata;
893
+ };
894
+ export type Expense = {
895
+ "id": number;
896
+ "user_id": number;
897
+ "project_id": number;
898
+ "expense_category_id": number;
899
+ "spent_date": string;
900
+ "notes"?: string | null;
901
+ "units"?: number | null;
902
+ "total_cost_cents": number;
903
+ "billable": boolean;
904
+ "approval_status": "unsubmitted" | "submitted" | "approved";
905
+ "source_approval_status"?: "unsubmitted" | "submitted" | "approved" | null;
906
+ "invoice_id"?: number | null;
907
+ "is_billed"?: boolean;
908
+ "is_locked": boolean;
909
+ "locked_reason_code"?: string | null;
910
+ "locked_reason"?: string | null;
911
+ "reimbursable": boolean;
912
+ "reimbursement_status": "none" | "pending" | "approved" | "paid";
913
+ "payout_ref"?: string | null;
914
+ "created_at": string;
915
+ "updated_at": string;
916
+ };
917
+ export type ExpenseInput = {
918
+ "project_id": number;
919
+ "expense_category_id": number;
920
+ "spent_date": string;
921
+ "notes"?: string | null;
922
+ "units"?: number;
923
+ "total_cost_cents"?: number;
924
+ "billable"?: boolean;
925
+ "reimbursable"?: boolean;
926
+ };
927
+ export type ExpensePatch = {
928
+ "project_id"?: number;
929
+ "expense_category_id"?: number;
930
+ "spent_date"?: string;
931
+ "notes"?: string | null;
932
+ "units"?: number;
933
+ "total_cost_cents"?: number;
934
+ "billable"?: boolean;
935
+ "reimbursable"?: boolean;
936
+ };
937
+ export type ExpenseEnvelope = {
938
+ "data": Expense;
939
+ "links": Links;
940
+ };
941
+ export type ExpensePage = {
942
+ "data": Array<Expense>;
943
+ "links": PageLinks;
944
+ "page": PageMetadata;
945
+ };
946
+ export type InvoiceLine = {
947
+ "id": number;
948
+ "invoice_id": number;
949
+ "position": number;
950
+ "kind": string;
951
+ "description": string | null;
952
+ "quantity": number;
953
+ "unit_price_cents": number;
954
+ "amount_cents": number;
955
+ "taxed": boolean;
956
+ "taxed2": boolean;
957
+ "project_id": number | null;
958
+ "created_at": string;
959
+ "updated_at": string;
960
+ };
961
+ export type Invoice = {
962
+ "id": number;
963
+ "client_id": number;
964
+ "created_by_user_id": number | null;
965
+ "number": string;
966
+ "subject": string | null;
967
+ "purchase_order": string | null;
968
+ "notes": string | null;
969
+ "currency": string;
970
+ "issue_date": string;
971
+ "due_date": string;
972
+ "payment_terms": "upon_receipt" | "net_15" | "net_30" | "net_45" | "net_60" | "custom";
973
+ "state": "draft" | "open" | "paid" | "closed";
974
+ "version": number;
975
+ "close_reason": "cancelled" | "written_off" | "source_closed" | null;
976
+ "close_write_off_cents": number;
977
+ "sent_at": string | null;
978
+ "paid_at": string | null;
979
+ "paid_date": string | null;
980
+ "closed_at": string | null;
981
+ "period_start": string | null;
982
+ "period_end": string | null;
983
+ "project_id": number | null;
984
+ "retainer_id": number | null;
985
+ "recurring_invoice_id": number | null;
986
+ "estimate_id": number | null;
987
+ "reminder_policy": InvoiceReminderPolicy | null;
988
+ "tax_rate_ppm": number | null;
989
+ "tax2_rate_ppm": number | null;
990
+ "discount_rate_ppm": number | null;
991
+ "amount_cents": number;
992
+ "due_amount_cents": number;
993
+ "tax_amount_cents": number;
994
+ "tax2_amount_cents": number;
995
+ "discount_amount_cents": number;
996
+ "written_off_cents": number;
997
+ "payment_options": Array<"stripe_checkout" | "paypal_checkout" | "quickbooks_checkout" | "mercury_transfer" | "wise_transfer">;
998
+ "reference_token": string | null;
999
+ "created_at": string;
1000
+ "updated_at": string;
1001
+ "line_items": Array<InvoiceLine>;
1002
+ };
1003
+ export type InvoiceEnvelope = {
1004
+ "data": Invoice;
1005
+ "links": Links;
1006
+ };
1007
+ export type InvoicePage = {
1008
+ "data": Array<Invoice>;
1009
+ "links": PageLinks;
1010
+ "page": PageMetadata;
1011
+ };
1012
+ export type EstimateLine = {
1013
+ "id": number;
1014
+ "estimate_id": number;
1015
+ "position": number;
1016
+ "kind": string;
1017
+ "description": string | null;
1018
+ "quantity": number;
1019
+ "unit_price_cents": number;
1020
+ "amount_cents": number;
1021
+ "taxed": boolean;
1022
+ "taxed2": boolean;
1023
+ "created_at": string;
1024
+ "updated_at": string;
1025
+ };
1026
+ export type Estimate = {
1027
+ "id": number;
1028
+ "client_id": number;
1029
+ "created_by_user_id": number | null;
1030
+ "number": string;
1031
+ "purchase_order": string | null;
1032
+ "subject": string | null;
1033
+ "notes": string | null;
1034
+ "currency": string;
1035
+ "state": "draft" | "sent" | "accepted" | "declined";
1036
+ "version": number;
1037
+ "issue_date": string;
1038
+ "sent_at": string | null;
1039
+ "accepted_at": string | null;
1040
+ "declined_at": string | null;
1041
+ "tax_rate_ppm": number | null;
1042
+ "tax2_rate_ppm": number | null;
1043
+ "discount_rate_ppm": number | null;
1044
+ "amount_cents": number;
1045
+ "tax_amount_cents": number;
1046
+ "tax2_amount_cents": number;
1047
+ "discount_amount_cents": number;
1048
+ "created_at": string;
1049
+ "updated_at": string;
1050
+ "line_items": Array<EstimateLine>;
1051
+ };
1052
+ export type EstimateEnvelope = {
1053
+ "data": Estimate;
1054
+ "links": Links;
1055
+ };
1056
+ export type EstimatePage = {
1057
+ "data": Array<Estimate>;
1058
+ "links": PageLinks;
1059
+ "page": PageMetadata;
1060
+ };
1061
+ export type EstimateMessage = {
1062
+ "id": number;
1063
+ "estimate_id": number;
1064
+ "sent_by": string | null;
1065
+ "sent_by_email": string | null;
1066
+ "sent_from": string | null;
1067
+ "sent_from_email": string | null;
1068
+ "recipients": Array<InvoiceRecipient>;
1069
+ "subject": string | null;
1070
+ "body": string | null;
1071
+ "send_me_a_copy": boolean;
1072
+ "event_type": "send" | "accept" | "decline" | "re-open" | "view" | "invoice" | null;
1073
+ "delivery_status": "queued" | "sent" | "bounced" | "complained" | "failed" | null;
1074
+ "provider_message_id": string | null;
1075
+ "created_at": string;
1076
+ "updated_at": string;
1077
+ };
1078
+ export type EstimateMessageListEnvelope = {
1079
+ "data": Array<EstimateMessage>;
1080
+ "links": Links;
1081
+ };
1082
+ export type EstimateMessageInput = {
1083
+ "expected_version": number;
1084
+ "event_type": "send";
1085
+ "recipients": Array<InvoiceRecipient>;
1086
+ "subject"?: string | null;
1087
+ "body"?: string | null;
1088
+ "send_me_a_copy"?: boolean;
1089
+ } | {
1090
+ "expected_version": number;
1091
+ "event_type": "accept" | "decline" | "re-open";
1092
+ "recipients"?: Array<InvoiceRecipient>;
1093
+ "subject"?: string | null;
1094
+ "body"?: string | null;
1095
+ "send_me_a_copy"?: boolean;
1096
+ };
1097
+ export type EstimateMessageCommandResponse = {
1098
+ "estimate": Estimate;
1099
+ "message": EstimateMessage;
1100
+ };
1101
+ export type EstimateMessageCommandEnvelope = {
1102
+ "data": EstimateMessageCommandResponse;
1103
+ "links": Links;
1104
+ };
1105
+ export type EstimateConversionInput = {
1106
+ "expected_version": number;
1107
+ "number": string;
1108
+ "issue_date": string;
1109
+ "due_date": string;
1110
+ "payment_terms": "upon_receipt" | "net_15" | "net_30" | "net_45" | "net_60" | "custom";
1111
+ };
1112
+ export type EstimateConversion = {
1113
+ "invoice": Invoice;
1114
+ "event": EstimateMessage;
1115
+ };
1116
+ export type EstimateConversionEnvelope = {
1117
+ "data": EstimateConversion;
1118
+ "links": Links;
1119
+ };
1120
+ export type InvoiceGenerationInput = {
1121
+ "client_id": number;
1122
+ "from": string;
1123
+ "to": string;
1124
+ "project_ids": Array<number>;
1125
+ "time_summary_type": "project" | "task" | "people" | "detailed" | null;
1126
+ "expense_summary_type": "project" | "category" | "people" | "detailed" | null;
1127
+ };
1128
+ export type InvoiceCommandSnapshot = {
1129
+ "id": number;
1130
+ "version": number;
1131
+ "updated_at": string;
1132
+ "state": "draft" | "open" | "paid" | "closed";
1133
+ "close_reason": "cancelled" | "written_off" | "source_closed" | null;
1134
+ "close_write_off_cents": number;
1135
+ "sent_at": string | null;
1136
+ "paid_at": string | null;
1137
+ "paid_date": string | null;
1138
+ "closed_at": string | null;
1139
+ "amount_cents": number;
1140
+ "due_amount_cents": number;
1141
+ "written_off_cents": number;
1142
+ "payment_count": number;
1143
+ "payment_status": "unpaid" | "partial" | "paid";
1144
+ };
1145
+ export type InvoiceCommandResult = {
1146
+ "schema_version": 1;
1147
+ "event_ids": Array<string>;
1148
+ "first_aggregate_sequence": number;
1149
+ "event_count": number;
1150
+ "invoice": InvoiceCommandSnapshot;
1151
+ };
1152
+ export type InvoiceCommandResponse = {
1153
+ "invoice": Invoice;
1154
+ "command": InvoiceCommandResult;
1155
+ };
1156
+ export type InvoiceCommandEnvelope = {
1157
+ "data": InvoiceCommandResponse;
1158
+ "links": Links;
1159
+ };
1160
+ export type InvoiceEditInput = {
1161
+ "expected_version": number;
1162
+ "client_id"?: number;
1163
+ "number"?: string;
1164
+ "subject"?: string | null;
1165
+ "purchase_order"?: string | null;
1166
+ "notes"?: string | null;
1167
+ "currency"?: string;
1168
+ "issue_date"?: string;
1169
+ "due_date"?: string;
1170
+ "payment_terms"?: "upon_receipt" | "net_15" | "net_30" | "net_45" | "net_60" | "custom";
1171
+ "project_id"?: number | null;
1172
+ "retainer_id"?: number | null;
1173
+ "reminder_policy"?: InvoiceReminderPolicy | null;
1174
+ "payment_options"?: Array<"stripe_checkout" | "paypal_checkout" | "quickbooks_checkout" | "mercury_transfer" | "wise_transfer">;
1175
+ "tax_rate_ppm"?: number | null;
1176
+ "tax2_rate_ppm"?: number | null;
1177
+ "discount_rate_ppm"?: number | null;
1178
+ };
1179
+ export type InvoiceLineInput = {
1180
+ "expected_version": number;
1181
+ "position": number;
1182
+ "kind": string;
1183
+ "description"?: string | null;
1184
+ "quantity": number;
1185
+ "unit_price_cents": number;
1186
+ "taxed"?: boolean;
1187
+ "taxed2"?: boolean;
1188
+ "project_id"?: number | null;
1189
+ };
1190
+ export type InvoiceLineUpdateInput = {
1191
+ "expected_version": number;
1192
+ "expected_updated_at": string;
1193
+ "position": number;
1194
+ "kind": string;
1195
+ "description"?: string | null;
1196
+ "quantity": number;
1197
+ "unit_price_cents": number;
1198
+ "taxed"?: boolean;
1199
+ "taxed2"?: boolean;
1200
+ "project_id"?: number | null;
1201
+ };
1202
+ export type VersionedRowDeleteInput = {
1203
+ "expected_version": number;
1204
+ "expected_updated_at": string;
1205
+ };
1206
+ export type InvoiceRecipient = {
1207
+ "name": string;
1208
+ "email": string;
1209
+ };
1210
+ export type InvoiceMessage = {
1211
+ "id": number;
1212
+ "invoice_id": number;
1213
+ "sent_by": string | null;
1214
+ "sent_by_email": string | null;
1215
+ "sent_from": string | null;
1216
+ "sent_from_email": string | null;
1217
+ "recipients": Array<InvoiceRecipient>;
1218
+ "subject": string | null;
1219
+ "body": string | null;
1220
+ "attach_pdf": boolean;
1221
+ "send_me_a_copy": boolean;
1222
+ "thank_you": boolean;
1223
+ "reminder": boolean;
1224
+ "send_reminder_on": string | null;
1225
+ "event_type": string | null;
1226
+ "delivery_status": string | null;
1227
+ "provider_message_id": string | null;
1228
+ "created_at": string;
1229
+ "updated_at": string;
1230
+ };
1231
+ export type InvoiceMessageListEnvelope = {
1232
+ "data": Array<InvoiceMessage>;
1233
+ "links": Links;
1234
+ };
1235
+ export type InvoiceMessageInput = {
1236
+ "event_type": "send" | "draft" | "cancel" | "write_off" | "reopen" | "re-open";
1237
+ "expected_version": number;
1238
+ "recipients"?: Array<InvoiceRecipient>;
1239
+ "subject"?: string | null;
1240
+ "body"?: string | null;
1241
+ "attach_pdf"?: boolean;
1242
+ "send_me_a_copy"?: boolean;
1243
+ "thank_you"?: boolean;
1244
+ "reminder"?: boolean;
1245
+ "send_reminder_on"?: string | null;
1246
+ };
1247
+ export type InvoiceTransitionInput = {
1248
+ "command": "send" | "draft" | "cancel" | "write_off" | "reopen" | "re-open";
1249
+ "expected_version": number;
1250
+ "recipients"?: Array<InvoiceRecipient>;
1251
+ "subject"?: string | null;
1252
+ "body"?: string | null;
1253
+ "attach_pdf"?: boolean;
1254
+ "send_me_a_copy"?: boolean;
1255
+ "thank_you"?: boolean;
1256
+ "reminder"?: boolean;
1257
+ "send_reminder_on"?: string | null;
1258
+ };
1259
+ export type InvoiceEmailDeliveryInput = {
1260
+ "expected_version": number;
1261
+ "recipients": Array<InvoiceRecipient>;
1262
+ "sender_identity_id"?: number;
1263
+ "template_version"?: number;
1264
+ "confirmed": true;
1265
+ };
1266
+ export type InvoicePayment = {
1267
+ "id": number;
1268
+ "invoice_id": number;
1269
+ "currency": string;
1270
+ "amount_cents": number;
1271
+ "paid_at": string | null;
1272
+ "paid_date": string | null;
1273
+ "notes": string | null;
1274
+ "recorded_by_user_id": number | null;
1275
+ "provider": string;
1276
+ "provider_shape": string;
1277
+ "provider_account_id": number | null;
1278
+ "provider_transaction_id": string | null;
1279
+ "bank_deposit_id": number | null;
1280
+ "created_at": string;
1281
+ "updated_at": string;
1282
+ };
1283
+ export type InvoicePaymentListEnvelope = {
1284
+ "data": Array<InvoicePayment>;
1285
+ "links": Links;
1286
+ };
1287
+ export type InvoicePaymentInput = {
1288
+ "expected_version": number;
1289
+ "amount_cents": number;
1290
+ "currency": string;
1291
+ "paid_at": string;
1292
+ "notes"?: string | null;
1293
+ } | {
1294
+ "expected_version": number;
1295
+ "amount_cents": number;
1296
+ "currency": string;
1297
+ "paid_date": string;
1298
+ "notes"?: string | null;
1299
+ };
1300
+ export type InvoicePaymentUpdateInput = {
1301
+ "expected_version": number;
1302
+ "expected_updated_at": string;
1303
+ "amount_cents": number;
1304
+ "paid_at": string;
1305
+ "notes"?: string | null;
1306
+ } | {
1307
+ "expected_version": number;
1308
+ "expected_updated_at": string;
1309
+ "amount_cents": number;
1310
+ "paid_date": string;
1311
+ "notes"?: string | null;
1312
+ };
1313
+ export type Retainer = {
1314
+ "id": number;
1315
+ "client_id": number | null;
1316
+ "project_id": number | null;
1317
+ "state": "ongoing" | "closed";
1318
+ "denomination": "money" | "hours";
1319
+ "amount_cents": number | null;
1320
+ "seconds": number | null;
1321
+ "locked_rate_cents": number | null;
1322
+ "rate_locked_at": string | null;
1323
+ "period": string | null;
1324
+ "rollover": "carry" | "expire" | "cap" | null;
1325
+ "expires_at": string | null;
1326
+ "on_exhaustion": "block" | "warn" | "overflow";
1327
+ "balance": number;
1328
+ "created_at": string;
1329
+ "updated_at": string;
1330
+ };
1331
+ export type RetainerEnvelope = {
1332
+ "data": Retainer;
1333
+ "links": Links;
1334
+ };
1335
+ export type RetainerPage = {
1336
+ "data": Array<Retainer>;
1337
+ "links": PageLinks;
1338
+ "page": PageMetadata;
1339
+ };
1340
+ export type RetainerInput = {
1341
+ "client_id"?: number | null;
1342
+ "project_id"?: number | null;
1343
+ "denomination": "money";
1344
+ "amount_cents": number;
1345
+ "period"?: string | null;
1346
+ "rollover"?: "carry" | "expire" | "cap" | null;
1347
+ "expires_at"?: string | null;
1348
+ "on_exhaustion"?: "block" | "warn" | "overflow";
1349
+ } | {
1350
+ "client_id"?: number | null;
1351
+ "project_id"?: number | null;
1352
+ "denomination": "hours";
1353
+ "seconds": number;
1354
+ "period"?: string | null;
1355
+ "rollover"?: "carry" | "expire" | "cap" | null;
1356
+ "expires_at"?: string | null;
1357
+ "on_exhaustion"?: "block" | "warn" | "overflow";
1358
+ } | {
1359
+ "client_id"?: number | null;
1360
+ "project_id"?: number | null;
1361
+ "denomination": "hours";
1362
+ "seconds": number;
1363
+ "locked_rate_cents": number;
1364
+ "rate_locked_at": string;
1365
+ "period"?: string | null;
1366
+ "rollover"?: "carry" | "expire" | "cap" | null;
1367
+ "expires_at"?: string | null;
1368
+ "on_exhaustion"?: "block" | "warn" | "overflow";
1369
+ };
1370
+ export type RetainerPatch = {
1371
+ "state"?: "ongoing" | "closed";
1372
+ "period"?: string | null;
1373
+ "rollover"?: "carry" | "expire" | "cap" | null;
1374
+ "expires_at"?: string | null;
1375
+ "on_exhaustion"?: "block" | "warn" | "overflow";
1376
+ };
1377
+ export type RetainerLedgerEntry = {
1378
+ "id": string;
1379
+ "retainer_id": number;
1380
+ "kind": "deposit" | "drawdown" | "expiry" | "reset" | "adjustment";
1381
+ "unit": "cents" | "seconds";
1382
+ "amount": number;
1383
+ "invoice_id": number | null;
1384
+ "occurred_on": string;
1385
+ "notes": string | null;
1386
+ "created_at": string;
1387
+ };
1388
+ export type RetainerLedgerListEnvelope = {
1389
+ "data": Array<RetainerLedgerEntry>;
1390
+ "links": Links;
1391
+ };
1392
+ export type RetainerLedgerMutation = {
1393
+ "entry": RetainerLedgerEntry;
1394
+ "balance": number;
1395
+ "denomination": "money" | "hours";
1396
+ };
1397
+ export type RetainerLedgerMutationEnvelope = {
1398
+ "data": RetainerLedgerMutation;
1399
+ "links": Links;
1400
+ };
1401
+ export type RetainerLedgerInput = {
1402
+ "kind": "deposit";
1403
+ "invoice_id": number;
1404
+ "amount_cents": number;
1405
+ "occurred_on": string;
1406
+ "notes"?: string | null;
1407
+ } | {
1408
+ "kind": "deposit";
1409
+ "invoice_id": number;
1410
+ "seconds": number;
1411
+ "occurred_on": string;
1412
+ "notes"?: string | null;
1413
+ } | {
1414
+ "kind": "drawdown";
1415
+ "invoice_id": number;
1416
+ "amount_cents": number;
1417
+ "occurred_on": string;
1418
+ "notes"?: string | null;
1419
+ } | {
1420
+ "kind": "drawdown";
1421
+ "invoice_id": number;
1422
+ "seconds": number;
1423
+ "occurred_on": string;
1424
+ "notes"?: string | null;
1425
+ } | {
1426
+ "kind": "expiry";
1427
+ "amount_cents": number;
1428
+ "occurred_on": string;
1429
+ "notes"?: string | null;
1430
+ } | {
1431
+ "kind": "expiry";
1432
+ "seconds": number;
1433
+ "occurred_on": string;
1434
+ "notes"?: string | null;
1435
+ } | {
1436
+ "kind": "reset";
1437
+ "amount_cents": number;
1438
+ "occurred_on": string;
1439
+ "notes"?: string | null;
1440
+ } | {
1441
+ "kind": "reset";
1442
+ "seconds": number;
1443
+ "occurred_on": string;
1444
+ "notes"?: string | null;
1445
+ } | {
1446
+ "kind": "adjustment";
1447
+ "amount_cents": number;
1448
+ "occurred_on": string;
1449
+ "notes": string;
1450
+ } | {
1451
+ "kind": "adjustment";
1452
+ "seconds": number;
1453
+ "occurred_on": string;
1454
+ "notes": string;
1455
+ };
1456
+ export type RetainerDrawdownInput = {
1457
+ "invoice_id": number;
1458
+ "amount_cents": number;
1459
+ "occurred_on": string;
1460
+ "notes"?: string | null;
1461
+ } | {
1462
+ "invoice_id": number;
1463
+ "seconds": number;
1464
+ "occurred_on": string;
1465
+ "notes"?: string | null;
1466
+ };
1467
+ export type RecurringFixedLine = {
1468
+ "kind": string;
1469
+ "description": string | null;
1470
+ "quantity": number;
1471
+ "unit_price_cents": number;
1472
+ "taxed": boolean;
1473
+ "taxed2": boolean;
1474
+ "project_id": number | null;
1475
+ "through"?: string | null;
1476
+ "installments"?: number | null;
1477
+ };
1478
+ export type RecurringAmountConfig = {
1479
+ "schema_version": 1;
1480
+ "type": "fixed_lines";
1481
+ "line_items": Array<RecurringFixedLine>;
1482
+ } | {
1483
+ "schema_version": 1;
1484
+ "type": "line_items_import";
1485
+ "project_ids": Array<number>;
1486
+ "time": {
1487
+ "summary_type": "project" | "task" | "people" | "detailed";
1488
+ };
1489
+ } | {
1490
+ "schema_version": 1;
1491
+ "type": "line_items_import";
1492
+ "project_ids": Array<number>;
1493
+ "expenses": {
1494
+ "summary_type": "project" | "category" | "people" | "detailed";
1495
+ };
1496
+ } | {
1497
+ "schema_version": 1;
1498
+ "type": "line_items_import";
1499
+ "project_ids": Array<number>;
1500
+ "time": {
1501
+ "summary_type": "project" | "task" | "people" | "detailed";
1502
+ };
1503
+ "expenses": {
1504
+ "summary_type": "project" | "category" | "people" | "detailed";
1505
+ };
1506
+ };
1507
+ export type RecurringInvoice = {
1508
+ "id": number;
1509
+ "client_id": number;
1510
+ "subject_template": string;
1511
+ "notes_template": string;
1512
+ "every_n_months": number;
1513
+ "day_of_month": number;
1514
+ "next_issue_on": string;
1515
+ "amount_config": RecurringAmountConfig;
1516
+ "can_draw_from_retainer_id": number | null;
1517
+ "created_at": string;
1518
+ "updated_at": string;
1519
+ };
1520
+ export type RecurringInvoiceEnvelope = {
1521
+ "data": RecurringInvoice;
1522
+ "links": Links;
1523
+ };
1524
+ export type RecurringGeneration = {
1525
+ "definition_id": number;
1526
+ "period": string;
1527
+ "next_issue_on": string;
1528
+ "retainer_drawdown_cents": number | null;
1529
+ };
1530
+ export type RecurringGenerationEnvelope = {
1531
+ "data": {
1532
+ "invoice": Invoice;
1533
+ "generation": RecurringGeneration;
1534
+ };
1535
+ "links": Links;
1536
+ };
1537
+ export type RecurringInvoicePage = {
1538
+ "data": Array<RecurringInvoice>;
1539
+ "links": PageLinks;
1540
+ "page": PageMetadata;
1541
+ };
1542
+ export type RecurringInvoiceInput = {
1543
+ "client_id": number;
1544
+ "subject_template": string;
1545
+ "notes_template": string;
1546
+ "every_n_months": number;
1547
+ "day_of_month": number;
1548
+ "next_issue_on": string;
1549
+ "amount_config": RecurringAmountConfig;
1550
+ "can_draw_from_retainer_id"?: number | null;
1551
+ };
1552
+ export type MyHoursProject = {
1553
+ "project_id": number;
1554
+ "project_name": string;
1555
+ "project_code": string;
1556
+ "client_id": number;
1557
+ "client_name": string;
1558
+ "seconds": number;
1559
+ "rounded_seconds": number;
1560
+ "billable_seconds": number;
1561
+ "time_entry_count": number;
1562
+ };
1563
+ export type MyHoursReport = {
1564
+ "from": string;
1565
+ "to": string;
1566
+ "user_id": number;
1567
+ "project_id": number | null;
1568
+ "seconds": number;
1569
+ "rounded_seconds": number;
1570
+ "billable_seconds": number;
1571
+ "time_entry_count": number;
1572
+ "projects": Array<MyHoursProject>;
1573
+ };
1574
+ export type MyHoursReportEnvelope = {
1575
+ "data": MyHoursReport;
1576
+ "links": Links;
1577
+ };
1578
+ export type DetailedTimeRow = {
1579
+ "spent_date": string;
1580
+ "client_id": number;
1581
+ "client_name": string;
1582
+ "project_id": number;
1583
+ "project_name": string;
1584
+ "project_code": string;
1585
+ "task_id": number;
1586
+ "task_name": string;
1587
+ "user_id": number;
1588
+ "user_name": string;
1589
+ "roles": Array<string>;
1590
+ "currency": string;
1591
+ "seconds": number;
1592
+ "rounded_seconds": number;
1593
+ "billable_seconds": number;
1594
+ "uninvoiced_billable_seconds": number;
1595
+ "time_entry_count": number;
1596
+ "billable_amount_cents"?: number | null;
1597
+ "entries_without_billable_rate": number;
1598
+ "time_entry_id"?: number;
1599
+ "notes"?: string | null;
1600
+ };
1601
+ export type DetailedTimeCurrencyTotal = {
1602
+ "currency": string;
1603
+ "billable_amount_cents"?: number | null;
1604
+ "entries_without_billable_rate": number;
1605
+ };
1606
+ export type DetailedTimeReport = {
1607
+ "from": string;
1608
+ "to": string;
1609
+ "client_id": number | null;
1610
+ "project_id": number | null;
1611
+ "hours": "all" | "billable" | "non_billable" | "uninvoiced";
1612
+ "grain": "day" | "entry";
1613
+ "active_projects_only": boolean;
1614
+ "seconds": number;
1615
+ "rounded_seconds": number;
1616
+ "billable_seconds": number;
1617
+ "uninvoiced_billable_seconds": number;
1618
+ "time_entry_count": number;
1619
+ "currencies": Array<DetailedTimeCurrencyTotal>;
1620
+ "rows": Array<DetailedTimeRow>;
1621
+ };
1622
+ export type DetailedTimeReportEnvelope = {
1623
+ "data": DetailedTimeReport;
1624
+ "links": Links;
1625
+ };
1626
+ export type TimeReportAmount = {
1627
+ "currency": string;
1628
+ "billable_cents": number;
1629
+ "uninvoiced_cents": number;
1630
+ };
1631
+ export type TimeReportTotals = {
1632
+ "seconds": number;
1633
+ "rounded_seconds": number;
1634
+ "billable_seconds": number;
1635
+ "time_entry_count": number;
1636
+ "unpriced_billable_entry_count": number;
1637
+ "amounts"?: Array<TimeReportAmount>;
1638
+ };
1639
+ export type TimeReportClientRow = {
1640
+ "seconds": number;
1641
+ "rounded_seconds": number;
1642
+ "billable_seconds": number;
1643
+ "time_entry_count": number;
1644
+ "unpriced_billable_entry_count": number;
1645
+ "amounts"?: Array<TimeReportAmount>;
1646
+ "client_id": number;
1647
+ "client_name": string;
1648
+ };
1649
+ export type TimeReportProjectRow = {
1650
+ "seconds": number;
1651
+ "rounded_seconds": number;
1652
+ "billable_seconds": number;
1653
+ "time_entry_count": number;
1654
+ "unpriced_billable_entry_count": number;
1655
+ "amounts"?: Array<TimeReportAmount>;
1656
+ "project_id": number;
1657
+ "project_name": string;
1658
+ "project_code": string;
1659
+ "client_id": number;
1660
+ "client_name": string;
1661
+ };
1662
+ export type TimeReportTaskRow = {
1663
+ "seconds": number;
1664
+ "rounded_seconds": number;
1665
+ "billable_seconds": number;
1666
+ "time_entry_count": number;
1667
+ "unpriced_billable_entry_count": number;
1668
+ "amounts"?: Array<TimeReportAmount>;
1669
+ "task_id": number;
1670
+ "task_name": string;
1671
+ };
1672
+ export type TimeReportTeammateRow = {
1673
+ "seconds": number;
1674
+ "rounded_seconds": number;
1675
+ "billable_seconds": number;
1676
+ "time_entry_count": number;
1677
+ "unpriced_billable_entry_count": number;
1678
+ "amounts"?: Array<TimeReportAmount>;
1679
+ "user_id": number;
1680
+ "user_name": string;
1681
+ "is_contractor": boolean;
1682
+ "capacity_seconds": number;
1683
+ "utilization_ppm": number | null;
1684
+ };
1685
+ export type TimeReport = {
1686
+ "from": string;
1687
+ "to": string;
1688
+ "totals": TimeReportTotals;
1689
+ "clients": Array<TimeReportClientRow>;
1690
+ "projects": Array<TimeReportProjectRow>;
1691
+ "tasks": Array<TimeReportTaskRow>;
1692
+ "teammates": Array<TimeReportTeammateRow>;
1693
+ };
1694
+ export type TimeReportEnvelope = {
1695
+ "data": TimeReport;
1696
+ "links": Links;
1697
+ };
1698
+ export type UninvoicedCurrencyTotal = {
1699
+ "currency": string;
1700
+ "rounded_seconds": number;
1701
+ "time_entry_count": number;
1702
+ "unpriced_time_entry_count": number;
1703
+ "expense_count": number;
1704
+ "time_cents"?: number;
1705
+ "expense_cents"?: number;
1706
+ "total_cents"?: number;
1707
+ };
1708
+ export type UninvoicedProjectRow = {
1709
+ "client_id": number;
1710
+ "client_name": string;
1711
+ "project_id": number;
1712
+ "project_name": string;
1713
+ "project_code": string;
1714
+ "totals": Array<UninvoicedCurrencyTotal>;
1715
+ };
1716
+ export type UninvoicedReport = {
1717
+ "from": string;
1718
+ "to": string;
1719
+ "client_id": number | null;
1720
+ "project_id": number | null;
1721
+ "totals": Array<UninvoicedCurrencyTotal>;
1722
+ "projects": Array<UninvoicedProjectRow>;
1723
+ };
1724
+ export type UninvoicedReportEnvelope = {
1725
+ "data": UninvoicedReport;
1726
+ "links": Links;
1727
+ };
1728
+ export type ContractorCostRow = {
1729
+ "user_id": number;
1730
+ "name": string;
1731
+ "payroll_email": string | null;
1732
+ "is_contractor": boolean;
1733
+ "currency": string;
1734
+ "rounded_seconds": number;
1735
+ "cost_cents": number | null;
1736
+ "entries_without_rate": number;
1737
+ };
1738
+ export type ContractorCostReport = {
1739
+ "from": string;
1740
+ "to": string;
1741
+ "rows": Array<ContractorCostRow>;
1742
+ };
1743
+ export type ContractorCostReportEnvelope = {
1744
+ "data": ContractorCostReport;
1745
+ "links": Links;
1746
+ };
1747
+ export type DetailedExpenseRow = {
1748
+ "expense_id": number;
1749
+ "spent_date": string;
1750
+ "client_id": number;
1751
+ "client_name": string;
1752
+ "project_id": number;
1753
+ "project_name": string;
1754
+ "project_code": string;
1755
+ "category_id": number;
1756
+ "category_name": string;
1757
+ "user_id": number;
1758
+ "user_name": string;
1759
+ "notes": string | null;
1760
+ "units": number | null;
1761
+ "billable": boolean;
1762
+ "reimbursable": boolean;
1763
+ "invoice_id": number | null;
1764
+ "currency": string;
1765
+ "total_cost_cents"?: number;
1766
+ };
1767
+ export type DetailedExpenseTotal = {
1768
+ "currency": string;
1769
+ "expense_count": number;
1770
+ "total_cost_cents"?: number;
1771
+ };
1772
+ export type DetailedExpenseReport = {
1773
+ "from": string;
1774
+ "to": string;
1775
+ "client_id": number | null;
1776
+ "project_id": number | null;
1777
+ "billable_only": boolean;
1778
+ "totals": Array<DetailedExpenseTotal>;
1779
+ "rows": Array<DetailedExpenseRow>;
1780
+ };
1781
+ export type DetailedExpenseReportEnvelope = {
1782
+ "data": DetailedExpenseReport;
1783
+ "links": Links;
1784
+ };
1785
+ export type ProfitabilityRow = {
1786
+ "project_id": number;
1787
+ "project_name": string;
1788
+ "project_code": string;
1789
+ "client_id": number;
1790
+ "client_name": string;
1791
+ "currency": string;
1792
+ "rounded_seconds": number;
1793
+ "revenue_cents": number | null;
1794
+ "cost_cents": number | null;
1795
+ "profit_cents": number | null;
1796
+ "entries_without_billable_rate": number;
1797
+ "entries_without_cost_rate": number;
1798
+ };
1799
+ export type ProfitabilityTotals = {
1800
+ "rounded_seconds": number;
1801
+ "revenue_cents": number | null;
1802
+ "cost_cents": number | null;
1803
+ "profit_cents": number | null;
1804
+ "entries_without_billable_rate": number;
1805
+ "entries_without_cost_rate": number;
1806
+ "projects_not_converted": number;
1807
+ };
1808
+ export type ProfitabilityReport = {
1809
+ "from": string;
1810
+ "to": string;
1811
+ "organization_currency": string;
1812
+ "rows": Array<ProfitabilityRow>;
1813
+ "totals": ProfitabilityTotals;
1814
+ "previous_from": string;
1815
+ "previous_to": string;
1816
+ "previous_totals": ProfitabilityTotals;
1817
+ };
1818
+ export type ProfitabilityReportEnvelope = {
1819
+ "data": ProfitabilityReport;
1820
+ "links": Links;
1821
+ };
1822
+ export type ClientRollupCurrency = {
1823
+ "currency": string;
1824
+ "expense_cents": number;
1825
+ "uninvoiced_time_cents"?: number;
1826
+ "uninvoiced_expense_cents"?: number;
1827
+ "uninvoiced_total_cents"?: number;
1828
+ "money_budget_cents"?: number;
1829
+ "cost_cents"?: number;
1830
+ };
1831
+ export type ClientRollupMetrics = {
1832
+ "time_entry_count": number;
1833
+ "expense_count": number;
1834
+ "rounded_seconds": number;
1835
+ "billable_seconds": number;
1836
+ "budgeted_seconds": number;
1837
+ "time_budget_seconds": number;
1838
+ "unpriced_billable_entry_count": number;
1839
+ "unpriced_cost_entry_count": number;
1840
+ "currencies": Array<ClientRollupCurrency>;
1841
+ };
1842
+ export type ClientRollupNode = {
1843
+ "client_id": number;
1844
+ "name": string;
1845
+ "parent_client_id": number | null;
1846
+ "depth": number;
1847
+ "direct": ClientRollupMetrics;
1848
+ "rollup": ClientRollupMetrics;
1849
+ };
1850
+ export type ClientRollupReport = {
1851
+ "root_client_id": number;
1852
+ "from": string;
1853
+ "to": string;
1854
+ "nodes": Array<ClientRollupNode>;
1855
+ };
1856
+ export type ClientRollupReportEnvelope = {
1857
+ "data": ClientRollupReport;
1858
+ "links": Links;
1859
+ };
1860
+ export type ProjectBudgetGrain = {
1861
+ "source": "project" | "task_assignment" | "user_assignment";
1862
+ "source_id": number;
1863
+ "unit": "seconds" | "cents";
1864
+ "calculation": "time" | "billable" | "cost";
1865
+ "unpriced_entry_count": number;
1866
+ "budget_seconds"?: number | null;
1867
+ "spent_seconds"?: number;
1868
+ "remaining_seconds"?: number | null;
1869
+ "budget_cents"?: number | null;
1870
+ "spent_cents"?: number;
1871
+ "remaining_cents"?: number | null;
1872
+ };
1873
+ export type ProjectBudgetReport = {
1874
+ "project_id": number;
1875
+ "budget_by": "project" | "project_cost" | "task" | "task_fees" | "person" | "none";
1876
+ "expenses_included": boolean;
1877
+ "from": string;
1878
+ "to": string;
1879
+ "grains": Array<ProjectBudgetGrain>;
1880
+ };
1881
+ export type ProjectBudgetReportEnvelope = {
1882
+ "data": ProjectBudgetReport;
1883
+ "links": Links;
1884
+ };
1885
+ export type ProjectBudgetSummary = {
1886
+ "project_id": number;
1887
+ "currency": string;
1888
+ "budget_by": "project" | "project_cost" | "task" | "task_fees" | "person" | "none";
1889
+ "unit": "seconds" | "cents" | null;
1890
+ "unpriced_entry_count": number;
1891
+ "budget_seconds"?: number | null;
1892
+ "spent_seconds"?: number;
1893
+ "remaining_seconds"?: number | null;
1894
+ "budget_cents"?: number | null;
1895
+ "spent_cents"?: number;
1896
+ "remaining_cents"?: number | null;
1897
+ "cost_cents"?: number;
1898
+ };
1899
+ export type ProjectBudgetSummaryListEnvelope = {
1900
+ "data": Array<ProjectBudgetSummary>;
1901
+ "links": Links;
1902
+ };
1903
+ export type ClientHierarchyNode = {
1904
+ "ancestor_id": number;
1905
+ "descendant_id": number;
1906
+ "depth": number;
1907
+ };
1908
+ export type ClientHierarchyListEnvelope = {
1909
+ "data": Array<ClientHierarchyNode>;
1910
+ "links": Links;
1911
+ };
1912
+ export type ModuleState = {
1913
+ "module": "approval" | "expenses" | "own_money";
1914
+ "enabled": boolean;
1915
+ };
1916
+ export type ModuleListEnvelope = {
1917
+ "data": Array<ModuleState>;
1918
+ "links": Links;
1919
+ };
1920
+ export type SsoDomain = {
1921
+ "id": number;
1922
+ "domain": string;
1923
+ "verified": boolean;
1924
+ "verified_at": string | null;
1925
+ "last_checked_at": string | null;
1926
+ "record_name": string;
1927
+ "record_type": "TXT";
1928
+ "record_value": string;
1929
+ "created_at": string;
1930
+ "updated_at": string;
1931
+ };
1932
+ export type SsoDomainCheck = (SsoDomain) & ({
1933
+ "dnssec_validated": boolean;
1934
+ });
1935
+ export type SsoDomainListEnvelope = {
1936
+ "data": Array<SsoDomain>;
1937
+ "links": Links;
1938
+ };
1939
+ export type SsoDomainEnvelope = {
1940
+ "data": SsoDomain;
1941
+ };
1942
+ export type SsoDomainCheckEnvelope = {
1943
+ "data": SsoDomainCheck;
1944
+ };
1945
+ export type BrandAsset = {
1946
+ "slot": "wordmark_light" | "wordmark_dark" | "favicon";
1947
+ "content_hash": string;
1948
+ "content_type": "image/png" | "image/jpeg" | "image/webp";
1949
+ "byte_size": number;
1950
+ "url": string;
1951
+ "updated_at": string;
1952
+ };
1953
+ export type BrandAssetListEnvelope = {
1954
+ "data": Array<BrandAsset>;
1955
+ "links": Links;
1956
+ };
1957
+ export type BrandMark = {
1958
+ "slot": "wordmark_light" | "wordmark_dark" | "favicon";
1959
+ "url": string;
1960
+ "content_type": "image/png" | "image/jpeg" | "image/webp";
1961
+ "updated_at": string;
1962
+ };
1963
+ export type Brand = {
1964
+ "organization_name": string;
1965
+ "assets": Array<BrandMark>;
1966
+ "palette"?: InstancePalette;
1967
+ };
1968
+ export type BrandEnvelope = {
1969
+ "data": Brand;
1970
+ "links": Links;
1971
+ };
1972
+ export type BrandAssetEnvelope = {
1973
+ "data": BrandAsset;
1974
+ };
1975
+ export type BrandAssetUploadInput = {
1976
+ "file": string;
1977
+ };
1978
+ export type InstancePalette = {
1979
+ [key: string]: string;
1980
+ };
1981
+ export type InstanceTheme = {
1982
+ "palette": InstancePalette;
1983
+ "updated_at": string;
1984
+ };
1985
+ export type InstanceThemeEnvelope = {
1986
+ "data": InstanceTheme | null;
1987
+ };
1988
+ export type InstanceThemeInput = {
1989
+ "palette": InstancePalette;
1990
+ };
1991
+ export type BillStatus = {
1992
+ "configured": boolean;
1993
+ "company_id": string | null;
1994
+ "environment": "sandbox" | "production";
1995
+ "can_send_from_bill": boolean;
1996
+ };
1997
+ export type BillStatusEnvelope = {
1998
+ "data": BillStatus;
1999
+ };
2000
+ export type BillClientDelivery = {
2001
+ "client_id": number;
2002
+ "deliver_via_bill": boolean;
2003
+ };
2004
+ export type BillClientDeliveryEnvelope = {
2005
+ "data": BillClientDelivery;
2006
+ };
2007
+ export type PayoutAccount = {
2008
+ "id": number;
2009
+ "user_id": number;
2010
+ "provider": "deel" | "wise";
2011
+ "external_id": string;
2012
+ "linked_by_user_id": number;
2013
+ "linked_at": string;
2014
+ "verified_at": string | null;
2015
+ };
2016
+ export type PayoutAccountListEnvelope = {
2017
+ "data": Array<PayoutAccount>;
2018
+ };
2019
+ export type PayoutAccountEnvelope = {
2020
+ "data": PayoutAccount;
2021
+ };
2022
+ export type PayoutAccountInput = {
2023
+ "provider": "deel" | "wise";
2024
+ "external_id": string;
2025
+ };
2026
+ export type BillClientDeliveryInput = {
2027
+ "deliver_via_bill": boolean;
2028
+ };
2029
+ export type SsoDomainInput = {
2030
+ "domain": string;
2031
+ };
2032
+ export type TwoFactorStatus = {
2033
+ "enrolled": boolean;
2034
+ "pending_confirmation": boolean;
2035
+ "recovery_codes_remaining": number;
2036
+ };
2037
+ export type TwoFactorStatusEnvelope = {
2038
+ "data": TwoFactorStatus;
2039
+ "links": Links;
2040
+ };
2041
+ export type TwoFactorEnrolment = {
2042
+ "secret": string;
2043
+ "otpauth_uri": string;
2044
+ "recovery_codes": Array<string>;
2045
+ };
2046
+ export type TwoFactorEnrolmentEnvelope = {
2047
+ "data": TwoFactorEnrolment;
2048
+ "links": Links;
2049
+ };
2050
+ export type TwoFactorCodeInput = {
2051
+ "code": string;
2052
+ };
2053
+ export type UserEmailInput = {
2054
+ "email": string;
2055
+ };
2056
+ export type UserEmailAcceptedEnvelope = {
2057
+ "data": {
2058
+ "status": "verification_sent";
2059
+ "email": string;
2060
+ };
2061
+ };
2062
+ export type ModulePatch = {
2063
+ "enabled": boolean;
2064
+ };
2065
+ export interface EzactoClientOptions {
2066
+ baseUrl: string;
2067
+ token?: string;
2068
+ fetch?: typeof globalThis.fetch;
2069
+ headers?: HeadersInit;
2070
+ }
2071
+ export declare class EzactoApiError extends Error {
2072
+ readonly status: number;
2073
+ readonly body: unknown;
2074
+ readonly requestId: string | null;
2075
+ constructor(status: number, body: unknown, requestId: string | null);
2076
+ }
2077
+ export declare class EzactoClient {
2078
+ private readonly baseUrl;
2079
+ private readonly token;
2080
+ private readonly fetchImplementation;
2081
+ private readonly defaultHeaders;
2082
+ constructor(options: EzactoClientOptions);
2083
+ private request;
2084
+ signup(args: {
2085
+ body: SignupInput;
2086
+ signal?: AbortSignal;
2087
+ headers?: HeadersInit;
2088
+ }): Promise<AuthAcceptedEnvelope>;
2089
+ verifyEmail(args: {
2090
+ body: AuthTokenInput;
2091
+ signal?: AbortSignal;
2092
+ headers?: HeadersInit;
2093
+ }): Promise<AuthPrincipalEnvelope>;
2094
+ signIn(args: {
2095
+ body: PasswordSignInInput;
2096
+ signal?: AbortSignal;
2097
+ headers?: HeadersInit;
2098
+ }): Promise<AuthPrincipalEnvelope>;
2099
+ requestPasswordReset(args: {
2100
+ body: EmailInput;
2101
+ signal?: AbortSignal;
2102
+ headers?: HeadersInit;
2103
+ }): Promise<AuthAcceptedEnvelope>;
2104
+ resetPassword(args: {
2105
+ body: PasswordResetInput;
2106
+ signal?: AbortSignal;
2107
+ headers?: HeadersInit;
2108
+ }): Promise<AuthPrincipalEnvelope>;
2109
+ listSessions(args?: {
2110
+ signal?: AbortSignal;
2111
+ headers?: HeadersInit;
2112
+ }): Promise<SessionPage>;
2113
+ listEmailLog(args?: {
2114
+ query?: {
2115
+ "status"?: "queued" | "sent" | "bounced" | "complained" | "failed";
2116
+ "per_page"?: number;
2117
+ };
2118
+ signal?: AbortSignal;
2119
+ headers?: HeadersInit;
2120
+ }): Promise<EmailLogPage>;
2121
+ getEmailHealth(args?: {
2122
+ signal?: AbortSignal;
2123
+ headers?: HeadersInit;
2124
+ }): Promise<EmailHealthEnvelope>;
2125
+ listEmailTemplateVariables(args?: {
2126
+ signal?: AbortSignal;
2127
+ headers?: HeadersInit;
2128
+ }): Promise<EmailTemplateVariableCatalog>;
2129
+ listEmailTemplates(args?: {
2130
+ signal?: AbortSignal;
2131
+ headers?: HeadersInit;
2132
+ }): Promise<EmailTemplatePage>;
2133
+ listEmailTemplateVersions(args: {
2134
+ "kind": string;
2135
+ signal?: AbortSignal;
2136
+ headers?: HeadersInit;
2137
+ }): Promise<EmailTemplatePage>;
2138
+ createEmailTemplateVersion(args: {
2139
+ "kind": string;
2140
+ "Idempotency-Key": string;
2141
+ body: EmailTemplateVersionInput;
2142
+ signal?: AbortSignal;
2143
+ headers?: HeadersInit;
2144
+ }): Promise<EmailTemplateEnvelope>;
2145
+ listSenderIdentities(args?: {
2146
+ signal?: AbortSignal;
2147
+ headers?: HeadersInit;
2148
+ }): Promise<SenderIdentityPage>;
2149
+ createSenderIdentity(args: {
2150
+ "Idempotency-Key": string;
2151
+ body: SenderIdentityInput;
2152
+ signal?: AbortSignal;
2153
+ headers?: HeadersInit;
2154
+ }): Promise<SenderIdentityEnvelope>;
2155
+ updateSenderIdentity(args: {
2156
+ "id": number;
2157
+ "Idempotency-Key": string;
2158
+ body: SenderIdentityPatch;
2159
+ signal?: AbortSignal;
2160
+ headers?: HeadersInit;
2161
+ }): Promise<SenderIdentityEnvelope>;
2162
+ setDefaultSenderIdentity(args: {
2163
+ "id": number;
2164
+ "Idempotency-Key": string;
2165
+ body: SenderIdentityVersionInput;
2166
+ signal?: AbortSignal;
2167
+ headers?: HeadersInit;
2168
+ }): Promise<SenderIdentityEnvelope>;
2169
+ archiveSenderIdentity(args: {
2170
+ "id": number;
2171
+ "Idempotency-Key": string;
2172
+ body: SenderIdentityVersionInput;
2173
+ signal?: AbortSignal;
2174
+ headers?: HeadersInit;
2175
+ }): Promise<SenderIdentityEnvelope>;
2176
+ refreshSenderIdentityEvidence(args: {
2177
+ "id": number;
2178
+ "Idempotency-Key": string;
2179
+ body: SenderEvidenceRefreshInput;
2180
+ signal?: AbortSignal;
2181
+ headers?: HeadersInit;
2182
+ }): Promise<SenderIdentityEnvelope>;
2183
+ testSendEmailTemplate(args: {
2184
+ "id": number;
2185
+ "Idempotency-Key": string;
2186
+ body: EmailTestSendInput;
2187
+ signal?: AbortSignal;
2188
+ headers?: HeadersInit;
2189
+ }): Promise<EmailTestSendEnvelope>;
2190
+ listActivityLog(args?: {
2191
+ query?: {
2192
+ "per_page"?: number;
2193
+ "from"?: string;
2194
+ "to"?: string;
2195
+ "event_type"?: string;
2196
+ "actor_id"?: number;
2197
+ };
2198
+ signal?: AbortSignal;
2199
+ headers?: HeadersInit;
2200
+ }): Promise<ActivityLogPage>;
2201
+ listOutboxDeliveries(args?: {
2202
+ query?: {
2203
+ "status"?: "pending" | "processing" | "delivered" | "failed";
2204
+ "per_page"?: number;
2205
+ };
2206
+ signal?: AbortSignal;
2207
+ headers?: HeadersInit;
2208
+ }): Promise<OutboxDeliveryPage>;
2209
+ retryOutboxDelivery(args: {
2210
+ "subscriberId": string;
2211
+ "eventId": string;
2212
+ signal?: AbortSignal;
2213
+ headers?: HeadersInit;
2214
+ }): Promise<OutboxDeliveryEnvelope>;
2215
+ revokeSession(args: {
2216
+ "sessionId": number;
2217
+ signal?: AbortSignal;
2218
+ headers?: HeadersInit;
2219
+ }): Promise<SessionEnvelope>;
2220
+ getApiRoot(args?: {
2221
+ signal?: AbortSignal;
2222
+ headers?: HeadersInit;
2223
+ }): Promise<ServiceEnvelope>;
2224
+ getWhoami(args?: {
2225
+ signal?: AbortSignal;
2226
+ headers?: HeadersInit;
2227
+ }): Promise<WhoamiEnvelope>;
2228
+ listApiTokens(args?: {
2229
+ signal?: AbortSignal;
2230
+ headers?: HeadersInit;
2231
+ }): Promise<ApiTokenListEnvelope>;
2232
+ createApiToken(args: {
2233
+ body: CreateApiTokenInput;
2234
+ signal?: AbortSignal;
2235
+ headers?: HeadersInit;
2236
+ }): Promise<IssuedApiTokenEnvelope>;
2237
+ revokeApiToken(args: {
2238
+ "tokenId": number;
2239
+ signal?: AbortSignal;
2240
+ headers?: HeadersInit;
2241
+ }): Promise<ApiTokenEnvelope>;
2242
+ listClients(args?: {
2243
+ query?: {
2244
+ "cursor"?: string;
2245
+ "per_page"?: number;
2246
+ "is_active"?: boolean;
2247
+ "updated_since"?: string;
2248
+ "parent_client_id"?: number;
2249
+ "bill_to_client_id"?: number;
2250
+ "q"?: string;
2251
+ };
2252
+ signal?: AbortSignal;
2253
+ headers?: HeadersInit;
2254
+ }): Promise<GeneralResourcePage>;
2255
+ createClient(args: {
2256
+ body: GeneralMutationInput;
2257
+ signal?: AbortSignal;
2258
+ headers?: HeadersInit;
2259
+ }): Promise<GeneralResourceEnvelope>;
2260
+ getClient(args: {
2261
+ "id": number;
2262
+ signal?: AbortSignal;
2263
+ headers?: HeadersInit;
2264
+ }): Promise<GeneralResourceEnvelope>;
2265
+ updateClient(args: {
2266
+ "id": number;
2267
+ body: GeneralMutationInput;
2268
+ signal?: AbortSignal;
2269
+ headers?: HeadersInit;
2270
+ }): Promise<GeneralResourceEnvelope>;
2271
+ deleteClient(args: {
2272
+ "id": number;
2273
+ signal?: AbortSignal;
2274
+ headers?: HeadersInit;
2275
+ }): Promise<void>;
2276
+ listContacts(args?: {
2277
+ query?: {
2278
+ "cursor"?: string;
2279
+ "per_page"?: number;
2280
+ "client_id"?: number;
2281
+ "updated_since"?: string;
2282
+ };
2283
+ signal?: AbortSignal;
2284
+ headers?: HeadersInit;
2285
+ }): Promise<GeneralResourcePage>;
2286
+ createContact(args: {
2287
+ body: GeneralMutationInput;
2288
+ signal?: AbortSignal;
2289
+ headers?: HeadersInit;
2290
+ }): Promise<GeneralResourceEnvelope>;
2291
+ getContact(args: {
2292
+ "id": number;
2293
+ signal?: AbortSignal;
2294
+ headers?: HeadersInit;
2295
+ }): Promise<GeneralResourceEnvelope>;
2296
+ updateContact(args: {
2297
+ "id": number;
2298
+ body: GeneralMutationInput;
2299
+ signal?: AbortSignal;
2300
+ headers?: HeadersInit;
2301
+ }): Promise<GeneralResourceEnvelope>;
2302
+ deleteContact(args: {
2303
+ "id": number;
2304
+ signal?: AbortSignal;
2305
+ headers?: HeadersInit;
2306
+ }): Promise<void>;
2307
+ listExpenseCategories(args?: {
2308
+ query?: {
2309
+ "cursor"?: string;
2310
+ "per_page"?: number;
2311
+ "is_active"?: boolean;
2312
+ "updated_since"?: string;
2313
+ };
2314
+ signal?: AbortSignal;
2315
+ headers?: HeadersInit;
2316
+ }): Promise<ExpenseCategoryPage>;
2317
+ createExpenseCategory(args: {
2318
+ body: ExpenseCategoryInput;
2319
+ signal?: AbortSignal;
2320
+ headers?: HeadersInit;
2321
+ }): Promise<ExpenseCategoryEnvelope>;
2322
+ getExpenseCategory(args: {
2323
+ "id": number;
2324
+ signal?: AbortSignal;
2325
+ headers?: HeadersInit;
2326
+ }): Promise<ExpenseCategoryEnvelope>;
2327
+ updateExpenseCategory(args: {
2328
+ "id": number;
2329
+ body: ExpenseCategoryPatch;
2330
+ signal?: AbortSignal;
2331
+ headers?: HeadersInit;
2332
+ }): Promise<ExpenseCategoryEnvelope>;
2333
+ deleteExpenseCategory(args: {
2334
+ "id": number;
2335
+ signal?: AbortSignal;
2336
+ headers?: HeadersInit;
2337
+ }): Promise<void>;
2338
+ listProjects(args?: {
2339
+ query?: {
2340
+ "cursor"?: string;
2341
+ "per_page"?: number;
2342
+ "client_id"?: number;
2343
+ "is_active"?: boolean;
2344
+ "updated_since"?: string;
2345
+ "q"?: string;
2346
+ };
2347
+ signal?: AbortSignal;
2348
+ headers?: HeadersInit;
2349
+ }): Promise<GeneralResourcePage>;
2350
+ createProject(args: {
2351
+ body: GeneralMutationInput;
2352
+ signal?: AbortSignal;
2353
+ headers?: HeadersInit;
2354
+ }): Promise<GeneralResourceEnvelope>;
2355
+ getProject(args: {
2356
+ "id": number;
2357
+ signal?: AbortSignal;
2358
+ headers?: HeadersInit;
2359
+ }): Promise<GeneralResourceEnvelope>;
2360
+ updateProject(args: {
2361
+ "id": number;
2362
+ body: GeneralMutationInput;
2363
+ signal?: AbortSignal;
2364
+ headers?: HeadersInit;
2365
+ }): Promise<GeneralResourceEnvelope>;
2366
+ deleteProject(args: {
2367
+ "id": number;
2368
+ signal?: AbortSignal;
2369
+ headers?: HeadersInit;
2370
+ }): Promise<void>;
2371
+ listTasks(args?: {
2372
+ query?: {
2373
+ "cursor"?: string;
2374
+ "per_page"?: number;
2375
+ "is_active"?: boolean;
2376
+ "updated_since"?: string;
2377
+ "q"?: string;
2378
+ };
2379
+ signal?: AbortSignal;
2380
+ headers?: HeadersInit;
2381
+ }): Promise<GeneralResourcePage>;
2382
+ createTask(args: {
2383
+ body: GeneralMutationInput;
2384
+ signal?: AbortSignal;
2385
+ headers?: HeadersInit;
2386
+ }): Promise<GeneralResourceEnvelope>;
2387
+ getTask(args: {
2388
+ "id": number;
2389
+ signal?: AbortSignal;
2390
+ headers?: HeadersInit;
2391
+ }): Promise<GeneralResourceEnvelope>;
2392
+ updateTask(args: {
2393
+ "id": number;
2394
+ body: GeneralMutationInput;
2395
+ signal?: AbortSignal;
2396
+ headers?: HeadersInit;
2397
+ }): Promise<GeneralResourceEnvelope>;
2398
+ deleteTask(args: {
2399
+ "id": number;
2400
+ signal?: AbortSignal;
2401
+ headers?: HeadersInit;
2402
+ }): Promise<void>;
2403
+ listTaskAssignments(args?: {
2404
+ query?: {
2405
+ "cursor"?: string;
2406
+ "per_page"?: number;
2407
+ "project_id"?: number;
2408
+ "task_id"?: number;
2409
+ "is_active"?: boolean;
2410
+ "updated_since"?: string;
2411
+ };
2412
+ signal?: AbortSignal;
2413
+ headers?: HeadersInit;
2414
+ }): Promise<GeneralResourcePage>;
2415
+ createTaskAssignment(args: {
2416
+ body: GeneralMutationInput;
2417
+ signal?: AbortSignal;
2418
+ headers?: HeadersInit;
2419
+ }): Promise<GeneralResourceEnvelope>;
2420
+ getTaskAssignment(args: {
2421
+ "id": number;
2422
+ signal?: AbortSignal;
2423
+ headers?: HeadersInit;
2424
+ }): Promise<GeneralResourceEnvelope>;
2425
+ updateTaskAssignment(args: {
2426
+ "id": number;
2427
+ body: GeneralMutationInput;
2428
+ signal?: AbortSignal;
2429
+ headers?: HeadersInit;
2430
+ }): Promise<GeneralResourceEnvelope>;
2431
+ deleteTaskAssignment(args: {
2432
+ "id": number;
2433
+ signal?: AbortSignal;
2434
+ headers?: HeadersInit;
2435
+ }): Promise<void>;
2436
+ listUserAssignments(args?: {
2437
+ query?: {
2438
+ "cursor"?: string;
2439
+ "per_page"?: number;
2440
+ "project_id"?: number;
2441
+ "user_id"?: number;
2442
+ "is_active"?: boolean;
2443
+ "updated_since"?: string;
2444
+ };
2445
+ signal?: AbortSignal;
2446
+ headers?: HeadersInit;
2447
+ }): Promise<GeneralResourcePage>;
2448
+ createUserAssignment(args: {
2449
+ body: GeneralMutationInput;
2450
+ signal?: AbortSignal;
2451
+ headers?: HeadersInit;
2452
+ }): Promise<GeneralResourceEnvelope>;
2453
+ getUserAssignment(args: {
2454
+ "id": number;
2455
+ signal?: AbortSignal;
2456
+ headers?: HeadersInit;
2457
+ }): Promise<GeneralResourceEnvelope>;
2458
+ updateUserAssignment(args: {
2459
+ "id": number;
2460
+ body: GeneralMutationInput;
2461
+ signal?: AbortSignal;
2462
+ headers?: HeadersInit;
2463
+ }): Promise<GeneralResourceEnvelope>;
2464
+ deleteUserAssignment(args: {
2465
+ "id": number;
2466
+ signal?: AbortSignal;
2467
+ headers?: HeadersInit;
2468
+ }): Promise<void>;
2469
+ listUsers(args?: {
2470
+ query?: {
2471
+ "cursor"?: string;
2472
+ "per_page"?: number;
2473
+ "is_active"?: boolean;
2474
+ "updated_since"?: string;
2475
+ "profile"?: "member" | "project_manager" | "people_admin" | "accounting" | "executive_manager" | "administrator";
2476
+ "is_contractor"?: boolean;
2477
+ };
2478
+ signal?: AbortSignal;
2479
+ headers?: HeadersInit;
2480
+ }): Promise<GeneralResourcePage>;
2481
+ createUser(args: {
2482
+ body: GeneralMutationInput;
2483
+ signal?: AbortSignal;
2484
+ headers?: HeadersInit;
2485
+ }): Promise<GeneralResourceEnvelope>;
2486
+ getUser(args: {
2487
+ "id": number;
2488
+ signal?: AbortSignal;
2489
+ headers?: HeadersInit;
2490
+ }): Promise<GeneralResourceEnvelope>;
2491
+ updateUser(args: {
2492
+ "id": number;
2493
+ body: GeneralMutationInput;
2494
+ signal?: AbortSignal;
2495
+ headers?: HeadersInit;
2496
+ }): Promise<GeneralResourceEnvelope>;
2497
+ deleteUser(args: {
2498
+ "id": number;
2499
+ signal?: AbortSignal;
2500
+ headers?: HeadersInit;
2501
+ }): Promise<void>;
2502
+ listRoles(args?: {
2503
+ query?: {
2504
+ "cursor"?: string;
2505
+ "per_page"?: number;
2506
+ };
2507
+ signal?: AbortSignal;
2508
+ headers?: HeadersInit;
2509
+ }): Promise<GeneralResourcePage>;
2510
+ createRole(args: {
2511
+ body: GeneralMutationInput;
2512
+ signal?: AbortSignal;
2513
+ headers?: HeadersInit;
2514
+ }): Promise<GeneralResourceEnvelope>;
2515
+ getRole(args: {
2516
+ "id": number;
2517
+ signal?: AbortSignal;
2518
+ headers?: HeadersInit;
2519
+ }): Promise<GeneralResourceEnvelope>;
2520
+ updateRole(args: {
2521
+ "id": number;
2522
+ body: GeneralMutationInput;
2523
+ signal?: AbortSignal;
2524
+ headers?: HeadersInit;
2525
+ }): Promise<GeneralResourceEnvelope>;
2526
+ deleteRole(args: {
2527
+ "id": number;
2528
+ signal?: AbortSignal;
2529
+ headers?: HeadersInit;
2530
+ }): Promise<void>;
2531
+ listBillableRates(args: {
2532
+ "userId": number;
2533
+ query?: {
2534
+ "cursor"?: string;
2535
+ "per_page"?: number;
2536
+ };
2537
+ signal?: AbortSignal;
2538
+ headers?: HeadersInit;
2539
+ }): Promise<UserRatePage>;
2540
+ appendBillableRate(args: {
2541
+ "userId": number;
2542
+ "Idempotency-Key": string;
2543
+ body: UserRateInput;
2544
+ signal?: AbortSignal;
2545
+ headers?: HeadersInit;
2546
+ }): Promise<UserRateEnvelope>;
2547
+ getBillableRate(args: {
2548
+ "userId": number;
2549
+ "id": number;
2550
+ signal?: AbortSignal;
2551
+ headers?: HeadersInit;
2552
+ }): Promise<UserRateEnvelope>;
2553
+ listCostRates(args: {
2554
+ "userId": number;
2555
+ query?: {
2556
+ "cursor"?: string;
2557
+ "per_page"?: number;
2558
+ };
2559
+ signal?: AbortSignal;
2560
+ headers?: HeadersInit;
2561
+ }): Promise<UserRatePage>;
2562
+ appendCostRate(args: {
2563
+ "userId": number;
2564
+ "Idempotency-Key": string;
2565
+ body: UserRateInput;
2566
+ signal?: AbortSignal;
2567
+ headers?: HeadersInit;
2568
+ }): Promise<UserRateEnvelope>;
2569
+ getCostRate(args: {
2570
+ "userId": number;
2571
+ "id": number;
2572
+ signal?: AbortSignal;
2573
+ headers?: HeadersInit;
2574
+ }): Promise<UserRateEnvelope>;
2575
+ getTimeEntrySettings(args?: {
2576
+ signal?: AbortSignal;
2577
+ headers?: HeadersInit;
2578
+ }): Promise<TimeEntrySettingsEnvelope>;
2579
+ getTimeEntryNoteSettings(args?: {
2580
+ signal?: AbortSignal;
2581
+ headers?: HeadersInit;
2582
+ }): Promise<TimeEntryNoteSettingsEnvelope>;
2583
+ updateTimeEntryNoteSettings(args: {
2584
+ body: TimeEntryNoteSettingsPatch;
2585
+ signal?: AbortSignal;
2586
+ headers?: HeadersInit;
2587
+ }): Promise<TimeEntryNoteSettingsEnvelope>;
2588
+ listTimeEntryOptions(args?: {
2589
+ signal?: AbortSignal;
2590
+ headers?: HeadersInit;
2591
+ }): Promise<TimeEntryOptionListEnvelope>;
2592
+ listTimeEntries(args?: {
2593
+ query?: {
2594
+ "cursor"?: string;
2595
+ "per_page"?: number;
2596
+ "user_id"?: number;
2597
+ "client_id"?: number;
2598
+ "project_id"?: number;
2599
+ "spent_date"?: string;
2600
+ "from"?: string;
2601
+ "to"?: string;
2602
+ "approval_status"?: "unsubmitted" | "submitted" | "approved";
2603
+ "invoice_id"?: number;
2604
+ "is_billed"?: boolean;
2605
+ "billable"?: boolean;
2606
+ "updated_since"?: string;
2607
+ "task_id"?: number;
2608
+ "is_running"?: boolean;
2609
+ "budgeted"?: boolean;
2610
+ "external_reference_id"?: string;
2611
+ };
2612
+ signal?: AbortSignal;
2613
+ headers?: HeadersInit;
2614
+ }): Promise<TimeEntryPage>;
2615
+ createTimeEntry(args: {
2616
+ body: TimeEntryInput;
2617
+ signal?: AbortSignal;
2618
+ headers?: HeadersInit;
2619
+ }): Promise<TimeEntryEnvelope>;
2620
+ getTimeEntry(args: {
2621
+ "id": number;
2622
+ signal?: AbortSignal;
2623
+ headers?: HeadersInit;
2624
+ }): Promise<TimeEntryEnvelope>;
2625
+ updateTimeEntry(args: {
2626
+ "id": number;
2627
+ body: TimeEntryPatch;
2628
+ signal?: AbortSignal;
2629
+ headers?: HeadersInit;
2630
+ }): Promise<TimeEntryEnvelope>;
2631
+ deleteTimeEntry(args: {
2632
+ "id": number;
2633
+ signal?: AbortSignal;
2634
+ headers?: HeadersInit;
2635
+ }): Promise<TimeEntryEnvelope>;
2636
+ stopTimeEntry(args: {
2637
+ "id": number;
2638
+ signal?: AbortSignal;
2639
+ headers?: HeadersInit;
2640
+ }): Promise<TimeEntryEnvelope>;
2641
+ restartTimeEntry(args: {
2642
+ "id": number;
2643
+ signal?: AbortSignal;
2644
+ headers?: HeadersInit;
2645
+ }): Promise<TimeEntryEnvelope>;
2646
+ listTimesheetSubmissions(args?: {
2647
+ query?: {
2648
+ "cursor"?: string;
2649
+ "per_page"?: number;
2650
+ "period_start"?: string;
2651
+ "period_end"?: string;
2652
+ };
2653
+ signal?: AbortSignal;
2654
+ headers?: HeadersInit;
2655
+ }): Promise<TimesheetSubmissionPage>;
2656
+ submitTimesheet(args: {
2657
+ body: TimesheetSubmissionInput;
2658
+ signal?: AbortSignal;
2659
+ headers?: HeadersInit;
2660
+ }): Promise<TimesheetSubmissionEnvelope>;
2661
+ listPendingTimesheetSubmissions(args?: {
2662
+ query?: {
2663
+ "cursor"?: string;
2664
+ "per_page"?: number;
2665
+ "period_start"?: string;
2666
+ "period_end"?: string;
2667
+ "user_id"?: number;
2668
+ "client_id"?: number;
2669
+ "project_id"?: number;
2670
+ };
2671
+ signal?: AbortSignal;
2672
+ headers?: HeadersInit;
2673
+ }): Promise<TimesheetSubmissionPage>;
2674
+ listApprovedTimesheetSubmissions(args?: {
2675
+ query?: {
2676
+ "cursor"?: string;
2677
+ "per_page"?: number;
2678
+ "period_start"?: string;
2679
+ "period_end"?: string;
2680
+ "user_id"?: number;
2681
+ "client_id"?: number;
2682
+ "project_id"?: number;
2683
+ };
2684
+ signal?: AbortSignal;
2685
+ headers?: HeadersInit;
2686
+ }): Promise<TimesheetSubmissionPage>;
2687
+ getTimesheetSubmission(args: {
2688
+ "id": number;
2689
+ signal?: AbortSignal;
2690
+ headers?: HeadersInit;
2691
+ }): Promise<TimesheetSubmissionDetailEnvelope>;
2692
+ bulkApproveTimesheetSubmissions(args: {
2693
+ "Idempotency-Key": string;
2694
+ body: TimesheetBulkApprovalInput;
2695
+ signal?: AbortSignal;
2696
+ headers?: HeadersInit;
2697
+ }): Promise<TimesheetBulkApprovalResult>;
2698
+ approveTimesheetSubmission(args: {
2699
+ "id": number;
2700
+ signal?: AbortSignal;
2701
+ headers?: HeadersInit;
2702
+ }): Promise<TimesheetSubmissionEnvelope>;
2703
+ rejectTimesheetSubmission(args: {
2704
+ "id": number;
2705
+ body: TimesheetRejectionInput;
2706
+ signal?: AbortSignal;
2707
+ headers?: HeadersInit;
2708
+ }): Promise<TimesheetSubmissionEnvelope>;
2709
+ unsubmitTimesheetSubmission(args: {
2710
+ "id": number;
2711
+ signal?: AbortSignal;
2712
+ headers?: HeadersInit;
2713
+ }): Promise<TimesheetSubmissionEnvelope>;
2714
+ withdrawTimesheetSubmission(args: {
2715
+ "id": number;
2716
+ body: TimesheetWithdrawalInput;
2717
+ signal?: AbortSignal;
2718
+ headers?: HeadersInit;
2719
+ }): Promise<TimesheetSubmissionEnvelope>;
2720
+ getTimesheetLockPolicy(args?: {
2721
+ signal?: AbortSignal;
2722
+ headers?: HeadersInit;
2723
+ }): Promise<TimesheetLockPolicyEnvelope>;
2724
+ updateTimesheetLockPolicy(args: {
2725
+ body: TimesheetLockPolicyPatch;
2726
+ signal?: AbortSignal;
2727
+ headers?: HeadersInit;
2728
+ }): Promise<TimesheetLockPolicyEnvelope>;
2729
+ listTimesheetLocks(args?: {
2730
+ query?: {
2731
+ "cursor"?: string;
2732
+ "per_page"?: number;
2733
+ "active"?: boolean;
2734
+ "kind"?: "manual" | "auto";
2735
+ };
2736
+ signal?: AbortSignal;
2737
+ headers?: HeadersInit;
2738
+ }): Promise<TimesheetLockWindowPage>;
2739
+ getTimesheetLock(args: {
2740
+ "id": number;
2741
+ signal?: AbortSignal;
2742
+ headers?: HeadersInit;
2743
+ }): Promise<TimesheetLockWindowEnvelope>;
2744
+ createTimesheetManualLock(args: {
2745
+ "Idempotency-Key": string;
2746
+ body: TimesheetManualLockInput;
2747
+ signal?: AbortSignal;
2748
+ headers?: HeadersInit;
2749
+ }): Promise<TimesheetLockWindowEnvelope>;
2750
+ unlockTimesheetLock(args: {
2751
+ "id": number;
2752
+ body: TimesheetUnlockInput;
2753
+ signal?: AbortSignal;
2754
+ headers?: HeadersInit;
2755
+ }): Promise<TimesheetLockWindowEnvelope>;
2756
+ listExpenses(args?: {
2757
+ query?: {
2758
+ "cursor"?: string;
2759
+ "per_page"?: number;
2760
+ "user_id"?: number;
2761
+ "client_id"?: number;
2762
+ "project_id"?: number;
2763
+ "spent_date"?: string;
2764
+ "from"?: string;
2765
+ "to"?: string;
2766
+ "approval_status"?: "unsubmitted" | "submitted" | "approved";
2767
+ "invoice_id"?: number;
2768
+ "is_billed"?: boolean;
2769
+ "billable"?: boolean;
2770
+ "updated_since"?: string;
2771
+ "expense_category_id"?: number;
2772
+ "reimbursable"?: boolean;
2773
+ "reimbursement_status"?: "none" | "pending" | "approved" | "paid";
2774
+ };
2775
+ signal?: AbortSignal;
2776
+ headers?: HeadersInit;
2777
+ }): Promise<ExpensePage>;
2778
+ createExpense(args: {
2779
+ body: ExpenseInput;
2780
+ signal?: AbortSignal;
2781
+ headers?: HeadersInit;
2782
+ }): Promise<ExpenseEnvelope>;
2783
+ getExpense(args: {
2784
+ "id": number;
2785
+ signal?: AbortSignal;
2786
+ headers?: HeadersInit;
2787
+ }): Promise<ExpenseEnvelope>;
2788
+ updateExpense(args: {
2789
+ "id": number;
2790
+ body: ExpensePatch;
2791
+ signal?: AbortSignal;
2792
+ headers?: HeadersInit;
2793
+ }): Promise<ExpenseEnvelope>;
2794
+ deleteExpense(args: {
2795
+ "id": number;
2796
+ signal?: AbortSignal;
2797
+ headers?: HeadersInit;
2798
+ }): Promise<ExpenseEnvelope>;
2799
+ listInvoices(args?: {
2800
+ query?: {
2801
+ "cursor"?: string;
2802
+ "per_page"?: number;
2803
+ "state"?: string;
2804
+ };
2805
+ signal?: AbortSignal;
2806
+ headers?: HeadersInit;
2807
+ }): Promise<InvoicePage>;
2808
+ getInvoice(args: {
2809
+ "id": number;
2810
+ signal?: AbortSignal;
2811
+ headers?: HeadersInit;
2812
+ }): Promise<InvoiceEnvelope>;
2813
+ listEstimates(args?: {
2814
+ query?: {
2815
+ "cursor"?: string;
2816
+ "per_page"?: number;
2817
+ };
2818
+ signal?: AbortSignal;
2819
+ headers?: HeadersInit;
2820
+ }): Promise<EstimatePage>;
2821
+ getEstimate(args: {
2822
+ "id": number;
2823
+ signal?: AbortSignal;
2824
+ headers?: HeadersInit;
2825
+ }): Promise<EstimateEnvelope>;
2826
+ listEstimateMessages(args: {
2827
+ "id": number;
2828
+ signal?: AbortSignal;
2829
+ headers?: HeadersInit;
2830
+ }): Promise<EstimateMessageListEnvelope>;
2831
+ createEstimateMessage(args: {
2832
+ "id": number;
2833
+ "Idempotency-Key": string;
2834
+ body: EstimateMessageInput;
2835
+ signal?: AbortSignal;
2836
+ headers?: HeadersInit;
2837
+ }): Promise<EstimateMessageCommandEnvelope>;
2838
+ convertEstimate(args: {
2839
+ "id": number;
2840
+ "Idempotency-Key": string;
2841
+ body: EstimateConversionInput;
2842
+ signal?: AbortSignal;
2843
+ headers?: HeadersInit;
2844
+ }): Promise<EstimateConversionEnvelope>;
2845
+ generateInvoice(args: {
2846
+ "Idempotency-Key": string;
2847
+ body: InvoiceGenerationInput;
2848
+ signal?: AbortSignal;
2849
+ headers?: HeadersInit;
2850
+ }): Promise<InvoiceEnvelope>;
2851
+ updateInvoice(args: {
2852
+ "id": number;
2853
+ "Idempotency-Key": string;
2854
+ body: InvoiceEditInput;
2855
+ signal?: AbortSignal;
2856
+ headers?: HeadersInit;
2857
+ }): Promise<InvoiceCommandEnvelope>;
2858
+ createInvoiceLine(args: {
2859
+ "id": number;
2860
+ "Idempotency-Key": string;
2861
+ body: InvoiceLineInput;
2862
+ signal?: AbortSignal;
2863
+ headers?: HeadersInit;
2864
+ }): Promise<InvoiceCommandEnvelope>;
2865
+ updateInvoiceLine(args: {
2866
+ "id": number;
2867
+ "lineId": number;
2868
+ "Idempotency-Key": string;
2869
+ body: InvoiceLineUpdateInput;
2870
+ signal?: AbortSignal;
2871
+ headers?: HeadersInit;
2872
+ }): Promise<InvoiceCommandEnvelope>;
2873
+ deleteInvoiceLine(args: {
2874
+ "id": number;
2875
+ "lineId": number;
2876
+ "Idempotency-Key": string;
2877
+ body: VersionedRowDeleteInput;
2878
+ signal?: AbortSignal;
2879
+ headers?: HeadersInit;
2880
+ }): Promise<InvoiceCommandEnvelope>;
2881
+ listInvoiceMessages(args: {
2882
+ "id": number;
2883
+ signal?: AbortSignal;
2884
+ headers?: HeadersInit;
2885
+ }): Promise<InvoiceMessageListEnvelope>;
2886
+ createInvoiceMessage(args: {
2887
+ "id": number;
2888
+ "Idempotency-Key": string;
2889
+ body: InvoiceMessageInput;
2890
+ signal?: AbortSignal;
2891
+ headers?: HeadersInit;
2892
+ }): Promise<InvoiceCommandEnvelope>;
2893
+ transitionInvoice(args: {
2894
+ "id": number;
2895
+ "Idempotency-Key": string;
2896
+ body: InvoiceTransitionInput;
2897
+ signal?: AbortSignal;
2898
+ headers?: HeadersInit;
2899
+ }): Promise<InvoiceCommandEnvelope>;
2900
+ deliverInvoiceEmail(args: {
2901
+ "id": number;
2902
+ "Idempotency-Key": string;
2903
+ body: InvoiceEmailDeliveryInput;
2904
+ signal?: AbortSignal;
2905
+ headers?: HeadersInit;
2906
+ }): Promise<InvoiceCommandEnvelope>;
2907
+ listInvoicePayments(args: {
2908
+ "id": number;
2909
+ signal?: AbortSignal;
2910
+ headers?: HeadersInit;
2911
+ }): Promise<InvoicePaymentListEnvelope>;
2912
+ recordInvoicePayment(args: {
2913
+ "id": number;
2914
+ "Idempotency-Key": string;
2915
+ body: InvoicePaymentInput;
2916
+ signal?: AbortSignal;
2917
+ headers?: HeadersInit;
2918
+ }): Promise<InvoiceCommandEnvelope>;
2919
+ updateInvoicePayment(args: {
2920
+ "id": number;
2921
+ "paymentId": number;
2922
+ "Idempotency-Key": string;
2923
+ body: InvoicePaymentUpdateInput;
2924
+ signal?: AbortSignal;
2925
+ headers?: HeadersInit;
2926
+ }): Promise<InvoiceCommandEnvelope>;
2927
+ deleteInvoicePayment(args: {
2928
+ "id": number;
2929
+ "paymentId": number;
2930
+ "Idempotency-Key": string;
2931
+ body: VersionedRowDeleteInput;
2932
+ signal?: AbortSignal;
2933
+ headers?: HeadersInit;
2934
+ }): Promise<InvoiceCommandEnvelope>;
2935
+ listRetainers(args?: {
2936
+ query?: {
2937
+ "cursor"?: string;
2938
+ "per_page"?: number;
2939
+ };
2940
+ signal?: AbortSignal;
2941
+ headers?: HeadersInit;
2942
+ }): Promise<RetainerPage>;
2943
+ createRetainer(args: {
2944
+ "Idempotency-Key": string;
2945
+ body: RetainerInput;
2946
+ signal?: AbortSignal;
2947
+ headers?: HeadersInit;
2948
+ }): Promise<RetainerEnvelope>;
2949
+ getRetainer(args: {
2950
+ "id": number;
2951
+ signal?: AbortSignal;
2952
+ headers?: HeadersInit;
2953
+ }): Promise<RetainerEnvelope>;
2954
+ updateRetainer(args: {
2955
+ "id": number;
2956
+ body: RetainerPatch;
2957
+ signal?: AbortSignal;
2958
+ headers?: HeadersInit;
2959
+ }): Promise<RetainerEnvelope>;
2960
+ listRetainerLedger(args: {
2961
+ "id": number;
2962
+ signal?: AbortSignal;
2963
+ headers?: HeadersInit;
2964
+ }): Promise<RetainerLedgerListEnvelope>;
2965
+ appendRetainerLedger(args: {
2966
+ "id": number;
2967
+ "Idempotency-Key": string;
2968
+ body: RetainerLedgerInput;
2969
+ signal?: AbortSignal;
2970
+ headers?: HeadersInit;
2971
+ }): Promise<RetainerLedgerMutationEnvelope>;
2972
+ drawDownRetainer(args: {
2973
+ "id": number;
2974
+ "Idempotency-Key": string;
2975
+ body: RetainerDrawdownInput;
2976
+ signal?: AbortSignal;
2977
+ headers?: HeadersInit;
2978
+ }): Promise<RetainerLedgerMutationEnvelope>;
2979
+ listRecurringInvoices(args?: {
2980
+ query?: {
2981
+ "cursor"?: string;
2982
+ "per_page"?: number;
2983
+ };
2984
+ signal?: AbortSignal;
2985
+ headers?: HeadersInit;
2986
+ }): Promise<RecurringInvoicePage>;
2987
+ createRecurringInvoice(args: {
2988
+ "Idempotency-Key": string;
2989
+ body: RecurringInvoiceInput;
2990
+ signal?: AbortSignal;
2991
+ headers?: HeadersInit;
2992
+ }): Promise<RecurringInvoiceEnvelope>;
2993
+ getRecurringInvoice(args: {
2994
+ "id": number;
2995
+ signal?: AbortSignal;
2996
+ headers?: HeadersInit;
2997
+ }): Promise<RecurringInvoiceEnvelope>;
2998
+ updateRecurringInvoice(args: {
2999
+ "id": number;
3000
+ body: RecurringInvoiceInput;
3001
+ signal?: AbortSignal;
3002
+ headers?: HeadersInit;
3003
+ }): Promise<RecurringInvoiceEnvelope>;
3004
+ deleteRecurringInvoice(args: {
3005
+ "id": number;
3006
+ signal?: AbortSignal;
3007
+ headers?: HeadersInit;
3008
+ }): Promise<void>;
3009
+ generateRecurringInvoice(args: {
3010
+ "id": number;
3011
+ "Idempotency-Key": string;
3012
+ signal?: AbortSignal;
3013
+ headers?: HeadersInit;
3014
+ }): Promise<RecurringGenerationEnvelope>;
3015
+ listInvoiceAttachments(args: {
3016
+ "invoiceId": number;
3017
+ signal?: AbortSignal;
3018
+ headers?: HeadersInit;
3019
+ }): Promise<AttachmentListEnvelope>;
3020
+ createInvoiceAttachment(args: {
3021
+ "invoiceId": number;
3022
+ "Idempotency-Key": string;
3023
+ body: FormData;
3024
+ signal?: AbortSignal;
3025
+ headers?: HeadersInit;
3026
+ }): Promise<AttachmentEnvelope>;
3027
+ getInvoiceAttachment(args: {
3028
+ "invoiceId": number;
3029
+ "attachmentId": number;
3030
+ signal?: AbortSignal;
3031
+ headers?: HeadersInit;
3032
+ }): Promise<AttachmentEnvelope>;
3033
+ downloadInvoiceAttachment(args: {
3034
+ "invoiceId": number;
3035
+ "attachmentId": number;
3036
+ signal?: AbortSignal;
3037
+ headers?: HeadersInit;
3038
+ }): Promise<ArrayBuffer>;
3039
+ listRecurringInvoiceAttachments(args: {
3040
+ "recurringInvoiceId": number;
3041
+ signal?: AbortSignal;
3042
+ headers?: HeadersInit;
3043
+ }): Promise<AttachmentListEnvelope>;
3044
+ createRecurringInvoiceAttachment(args: {
3045
+ "recurringInvoiceId": number;
3046
+ "Idempotency-Key": string;
3047
+ body: FormData;
3048
+ signal?: AbortSignal;
3049
+ headers?: HeadersInit;
3050
+ }): Promise<AttachmentEnvelope>;
3051
+ getRecurringInvoiceAttachment(args: {
3052
+ "recurringInvoiceId": number;
3053
+ "attachmentId": number;
3054
+ signal?: AbortSignal;
3055
+ headers?: HeadersInit;
3056
+ }): Promise<AttachmentEnvelope>;
3057
+ downloadRecurringInvoiceAttachment(args: {
3058
+ "recurringInvoiceId": number;
3059
+ "attachmentId": number;
3060
+ signal?: AbortSignal;
3061
+ headers?: HeadersInit;
3062
+ }): Promise<ArrayBuffer>;
3063
+ listEstimateAttachments(args: {
3064
+ "estimateId": number;
3065
+ signal?: AbortSignal;
3066
+ headers?: HeadersInit;
3067
+ }): Promise<AttachmentListEnvelope>;
3068
+ createEstimateAttachment(args: {
3069
+ "estimateId": number;
3070
+ "Idempotency-Key": string;
3071
+ body: FormData;
3072
+ signal?: AbortSignal;
3073
+ headers?: HeadersInit;
3074
+ }): Promise<AttachmentEnvelope>;
3075
+ getEstimateAttachment(args: {
3076
+ "estimateId": number;
3077
+ "attachmentId": number;
3078
+ signal?: AbortSignal;
3079
+ headers?: HeadersInit;
3080
+ }): Promise<AttachmentEnvelope>;
3081
+ downloadEstimateAttachment(args: {
3082
+ "estimateId": number;
3083
+ "attachmentId": number;
3084
+ signal?: AbortSignal;
3085
+ headers?: HeadersInit;
3086
+ }): Promise<ArrayBuffer>;
3087
+ listExpenseAttachments(args: {
3088
+ "expenseId": number;
3089
+ signal?: AbortSignal;
3090
+ headers?: HeadersInit;
3091
+ }): Promise<AttachmentListEnvelope>;
3092
+ createExpenseAttachment(args: {
3093
+ "expenseId": number;
3094
+ "Idempotency-Key": string;
3095
+ body: FormData;
3096
+ signal?: AbortSignal;
3097
+ headers?: HeadersInit;
3098
+ }): Promise<AttachmentEnvelope>;
3099
+ getExpenseAttachment(args: {
3100
+ "expenseId": number;
3101
+ "attachmentId": number;
3102
+ signal?: AbortSignal;
3103
+ headers?: HeadersInit;
3104
+ }): Promise<AttachmentEnvelope>;
3105
+ downloadExpenseAttachment(args: {
3106
+ "expenseId": number;
3107
+ "attachmentId": number;
3108
+ signal?: AbortSignal;
3109
+ headers?: HeadersInit;
3110
+ }): Promise<ArrayBuffer>;
3111
+ listProjectAttachments(args: {
3112
+ "projectId": number;
3113
+ signal?: AbortSignal;
3114
+ headers?: HeadersInit;
3115
+ }): Promise<AttachmentListEnvelope>;
3116
+ createProjectAttachment(args: {
3117
+ "projectId": number;
3118
+ "Idempotency-Key": string;
3119
+ body: FormData;
3120
+ signal?: AbortSignal;
3121
+ headers?: HeadersInit;
3122
+ }): Promise<AttachmentEnvelope>;
3123
+ getProjectAttachment(args: {
3124
+ "projectId": number;
3125
+ "attachmentId": number;
3126
+ signal?: AbortSignal;
3127
+ headers?: HeadersInit;
3128
+ }): Promise<AttachmentEnvelope>;
3129
+ downloadProjectAttachment(args: {
3130
+ "projectId": number;
3131
+ "attachmentId": number;
3132
+ signal?: AbortSignal;
3133
+ headers?: HeadersInit;
3134
+ }): Promise<ArrayBuffer>;
3135
+ getMyHoursReport(args: {
3136
+ query: {
3137
+ "from": string;
3138
+ "to": string;
3139
+ "project_id"?: number;
3140
+ };
3141
+ signal?: AbortSignal;
3142
+ headers?: HeadersInit;
3143
+ }): Promise<MyHoursReportEnvelope>;
3144
+ getTimeReport(args: {
3145
+ query: {
3146
+ "from": string;
3147
+ "to": string;
3148
+ };
3149
+ signal?: AbortSignal;
3150
+ headers?: HeadersInit;
3151
+ }): Promise<TimeReportEnvelope>;
3152
+ getContractorCostReport(args: {
3153
+ query: {
3154
+ "from": string;
3155
+ "to": string;
3156
+ };
3157
+ signal?: AbortSignal;
3158
+ headers?: HeadersInit;
3159
+ }): Promise<ContractorCostReportEnvelope>;
3160
+ getProfitabilityReport(args: {
3161
+ query: {
3162
+ "from": string;
3163
+ "to": string;
3164
+ };
3165
+ signal?: AbortSignal;
3166
+ headers?: HeadersInit;
3167
+ }): Promise<ProfitabilityReportEnvelope>;
3168
+ getDetailedExpenseReport(args: {
3169
+ query: {
3170
+ "from": string;
3171
+ "to": string;
3172
+ "client_id"?: number;
3173
+ "project_id"?: number;
3174
+ "billable_only"?: boolean;
3175
+ };
3176
+ signal?: AbortSignal;
3177
+ headers?: HeadersInit;
3178
+ }): Promise<DetailedExpenseReportEnvelope>;
3179
+ getUninvoicedReport(args: {
3180
+ query: {
3181
+ "from": string;
3182
+ "to": string;
3183
+ "client_id"?: number;
3184
+ "project_id"?: number;
3185
+ };
3186
+ signal?: AbortSignal;
3187
+ headers?: HeadersInit;
3188
+ }): Promise<UninvoicedReportEnvelope>;
3189
+ getDetailedTimeReport(args: {
3190
+ query: {
3191
+ "from": string;
3192
+ "to": string;
3193
+ "client_id"?: number;
3194
+ "project_id"?: number;
3195
+ "hours"?: "all" | "billable" | "non_billable" | "uninvoiced";
3196
+ "grain"?: "day" | "entry";
3197
+ "active_projects_only"?: boolean;
3198
+ };
3199
+ signal?: AbortSignal;
3200
+ headers?: HeadersInit;
3201
+ }): Promise<DetailedTimeReportEnvelope>;
3202
+ getClientRollupReport(args: {
3203
+ "clientId": number;
3204
+ query: {
3205
+ "from": string;
3206
+ "to": string;
3207
+ };
3208
+ signal?: AbortSignal;
3209
+ headers?: HeadersInit;
3210
+ }): Promise<ClientRollupReportEnvelope>;
3211
+ listProjectBudgetSummaries(args: {
3212
+ query: {
3213
+ "from": string;
3214
+ "to": string;
3215
+ };
3216
+ signal?: AbortSignal;
3217
+ headers?: HeadersInit;
3218
+ }): Promise<ProjectBudgetSummaryListEnvelope>;
3219
+ getProjectBudgetReport(args: {
3220
+ "projectId": number;
3221
+ query: {
3222
+ "from": string;
3223
+ "to": string;
3224
+ };
3225
+ signal?: AbortSignal;
3226
+ headers?: HeadersInit;
3227
+ }): Promise<ProjectBudgetReportEnvelope>;
3228
+ listModules(args?: {
3229
+ signal?: AbortSignal;
3230
+ headers?: HeadersInit;
3231
+ }): Promise<ModuleListEnvelope>;
3232
+ updateModule(args: {
3233
+ "module": string;
3234
+ body: ModulePatch;
3235
+ signal?: AbortSignal;
3236
+ headers?: HeadersInit;
3237
+ }): Promise<ModuleListEnvelope>;
3238
+ getBackupStatus(args?: {
3239
+ signal?: AbortSignal;
3240
+ headers?: HeadersInit;
3241
+ }): Promise<BackupStatusEnvelope>;
3242
+ getQuickBooksConnection(args?: {
3243
+ signal?: AbortSignal;
3244
+ headers?: HeadersInit;
3245
+ }): Promise<QuickBooksStatusEnvelope>;
3246
+ startQuickBooksAuthorization(args?: {
3247
+ signal?: AbortSignal;
3248
+ headers?: HeadersInit;
3249
+ }): Promise<QuickBooksAuthorizeEnvelope>;
3250
+ updateQuickBooksSettings(args: {
3251
+ body: QuickBooksSettingsInput;
3252
+ signal?: AbortSignal;
3253
+ headers?: HeadersInit;
3254
+ }): Promise<QuickBooksConnectionEnvelope>;
3255
+ disconnectQuickBooks(args?: {
3256
+ signal?: AbortSignal;
3257
+ headers?: HeadersInit;
3258
+ }): Promise<void>;
3259
+ listSsoProvisioningDomains(args?: {
3260
+ signal?: AbortSignal;
3261
+ headers?: HeadersInit;
3262
+ }): Promise<SsoDomainListEnvelope>;
3263
+ addSsoProvisioningDomain(args: {
3264
+ body: SsoDomainInput;
3265
+ signal?: AbortSignal;
3266
+ headers?: HeadersInit;
3267
+ }): Promise<SsoDomainEnvelope>;
3268
+ removeSsoProvisioningDomain(args: {
3269
+ "id": number;
3270
+ signal?: AbortSignal;
3271
+ headers?: HeadersInit;
3272
+ }): Promise<void>;
3273
+ verifySsoProvisioningDomain(args: {
3274
+ "id": number;
3275
+ signal?: AbortSignal;
3276
+ headers?: HeadersInit;
3277
+ }): Promise<SsoDomainCheckEnvelope>;
3278
+ getBrand(args?: {
3279
+ signal?: AbortSignal;
3280
+ headers?: HeadersInit;
3281
+ }): Promise<BrandEnvelope>;
3282
+ listBrandAssets(args?: {
3283
+ signal?: AbortSignal;
3284
+ headers?: HeadersInit;
3285
+ }): Promise<BrandAssetListEnvelope>;
3286
+ removeBrandAsset(args: {
3287
+ "slot": string;
3288
+ signal?: AbortSignal;
3289
+ headers?: HeadersInit;
3290
+ }): Promise<void>;
3291
+ getInstanceTheme(args?: {
3292
+ signal?: AbortSignal;
3293
+ headers?: HeadersInit;
3294
+ }): Promise<InstanceThemeEnvelope>;
3295
+ setInstanceTheme(args: {
3296
+ body: InstanceThemeInput;
3297
+ signal?: AbortSignal;
3298
+ headers?: HeadersInit;
3299
+ }): Promise<InstanceThemeEnvelope>;
3300
+ clearInstanceTheme(args?: {
3301
+ signal?: AbortSignal;
3302
+ headers?: HeadersInit;
3303
+ }): Promise<void>;
3304
+ listPayoutAccounts(args: {
3305
+ "id": number;
3306
+ signal?: AbortSignal;
3307
+ headers?: HeadersInit;
3308
+ }): Promise<PayoutAccountListEnvelope>;
3309
+ linkPayoutAccount(args: {
3310
+ "id": number;
3311
+ body: PayoutAccountInput;
3312
+ signal?: AbortSignal;
3313
+ headers?: HeadersInit;
3314
+ }): Promise<PayoutAccountEnvelope>;
3315
+ detachPayoutAccount(args: {
3316
+ "id": number;
3317
+ signal?: AbortSignal;
3318
+ headers?: HeadersInit;
3319
+ }): Promise<void>;
3320
+ getBillStatus(args?: {
3321
+ signal?: AbortSignal;
3322
+ headers?: HeadersInit;
3323
+ }): Promise<BillStatusEnvelope>;
3324
+ getBillClientDelivery(args: {
3325
+ "id": number;
3326
+ signal?: AbortSignal;
3327
+ headers?: HeadersInit;
3328
+ }): Promise<BillClientDeliveryEnvelope>;
3329
+ setBillClientDelivery(args: {
3330
+ "id": number;
3331
+ body: BillClientDeliveryInput;
3332
+ signal?: AbortSignal;
3333
+ headers?: HeadersInit;
3334
+ }): Promise<BillClientDeliveryEnvelope>;
3335
+ getTwoFactorStatus(args?: {
3336
+ signal?: AbortSignal;
3337
+ headers?: HeadersInit;
3338
+ }): Promise<TwoFactorStatusEnvelope>;
3339
+ beginTwoFactorEnrolment(args?: {
3340
+ signal?: AbortSignal;
3341
+ headers?: HeadersInit;
3342
+ }): Promise<TwoFactorEnrolmentEnvelope>;
3343
+ confirmTwoFactorEnrolment(args: {
3344
+ body: TwoFactorCodeInput;
3345
+ signal?: AbortSignal;
3346
+ headers?: HeadersInit;
3347
+ }): Promise<TwoFactorStatusEnvelope>;
3348
+ disableTwoFactor(args: {
3349
+ body: TwoFactorCodeInput;
3350
+ signal?: AbortSignal;
3351
+ headers?: HeadersInit;
3352
+ }): Promise<TwoFactorStatusEnvelope>;
3353
+ addUserEmail(args: {
3354
+ "id": number;
3355
+ body: UserEmailInput;
3356
+ signal?: AbortSignal;
3357
+ headers?: HeadersInit;
3358
+ }): Promise<UserEmailAcceptedEnvelope>;
3359
+ getTeamStatus(args?: {
3360
+ signal?: AbortSignal;
3361
+ headers?: HeadersInit;
3362
+ }): Promise<TeamStatusEnvelope>;
3363
+ listTeamPeople(args: {
3364
+ query: {
3365
+ "cursor"?: string;
3366
+ "per_page"?: number;
3367
+ "from": string;
3368
+ "to": string;
3369
+ "is_active"?: boolean;
3370
+ };
3371
+ signal?: AbortSignal;
3372
+ headers?: HeadersInit;
3373
+ }): Promise<TeamPersonSummaryPage>;
3374
+ getTeamPerson(args: {
3375
+ "id": number;
3376
+ signal?: AbortSignal;
3377
+ headers?: HeadersInit;
3378
+ }): Promise<TeamPersonEnvelope>;
3379
+ getTeamCatalog(args?: {
3380
+ signal?: AbortSignal;
3381
+ headers?: HeadersInit;
3382
+ }): Promise<TeamCatalogEnvelope>;
3383
+ updateTeamPerson(args: {
3384
+ "id": number;
3385
+ "Idempotency-Key": string;
3386
+ body: TeamPersonPatch;
3387
+ signal?: AbortSignal;
3388
+ headers?: HeadersInit;
3389
+ }): Promise<TeamCommandReceiptEnvelope>;
3390
+ replaceTeamPersonProjectAssignments(args: {
3391
+ "id": number;
3392
+ "Idempotency-Key": string;
3393
+ body: TeamAssignmentReplaceInput;
3394
+ signal?: AbortSignal;
3395
+ headers?: HeadersInit;
3396
+ }): Promise<TeamCommandReceiptEnvelope>;
3397
+ updateTeamPersonNotifications(args: {
3398
+ "id": number;
3399
+ "Idempotency-Key": string;
3400
+ body: TeamNotificationInput;
3401
+ signal?: AbortSignal;
3402
+ headers?: HeadersInit;
3403
+ }): Promise<TeamCommandReceiptEnvelope>;
3404
+ appendTeamPersonRate(args: {
3405
+ "id": number;
3406
+ "Idempotency-Key": string;
3407
+ body: TeamRateInput;
3408
+ signal?: AbortSignal;
3409
+ headers?: HeadersInit;
3410
+ }): Promise<TeamCommandReceiptEnvelope>;
3411
+ listClientAncestors(args: {
3412
+ "id": number;
3413
+ signal?: AbortSignal;
3414
+ headers?: HeadersInit;
3415
+ }): Promise<ClientHierarchyListEnvelope>;
3416
+ listClientDescendants(args: {
3417
+ "id": number;
3418
+ signal?: AbortSignal;
3419
+ headers?: HeadersInit;
3420
+ }): Promise<ClientHierarchyListEnvelope>;
3421
+ }