@homespot-sdk/core 0.0.224 → 0.0.226

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/property/index.d.ts +1 -1
  2. package/dist/property/index.d.ts.map +1 -1
  3. package/dist/property/schemas.gen.d.ts +44 -58
  4. package/dist/property/schemas.gen.d.ts.map +1 -1
  5. package/dist/property/schemas.gen.js +246 -121
  6. package/dist/property/schemas.gen.js.map +1 -1
  7. package/dist/property/types.gen.d.ts +29 -38
  8. package/dist/property/types.gen.d.ts.map +1 -1
  9. package/dist/property/zod.gen.d.ts +448 -538
  10. package/dist/property/zod.gen.d.ts.map +1 -1
  11. package/dist/property/zod.gen.js +440 -243
  12. package/dist/property/zod.gen.js.map +1 -1
  13. package/dist/registration/index.d.ts +1 -1
  14. package/dist/registration/index.d.ts.map +1 -1
  15. package/dist/registration/schemas.gen.d.ts +28 -43
  16. package/dist/registration/schemas.gen.d.ts.map +1 -1
  17. package/dist/registration/schemas.gen.js +148 -82
  18. package/dist/registration/schemas.gen.js.map +1 -1
  19. package/dist/registration/types.gen.d.ts +20 -27
  20. package/dist/registration/types.gen.d.ts.map +1 -1
  21. package/dist/registration/zod.gen.d.ts +106 -175
  22. package/dist/registration/zod.gen.d.ts.map +1 -1
  23. package/dist/registration/zod.gen.js +204 -144
  24. package/dist/registration/zod.gen.js.map +1 -1
  25. package/dist/rem/index.d.ts +1 -1
  26. package/dist/rem/index.d.ts.map +1 -1
  27. package/dist/rem/schemas.gen.d.ts +171 -209
  28. package/dist/rem/schemas.gen.d.ts.map +1 -1
  29. package/dist/rem/schemas.gen.js +473 -290
  30. package/dist/rem/schemas.gen.js.map +1 -1
  31. package/dist/rem/types.gen.d.ts +109 -140
  32. package/dist/rem/types.gen.d.ts.map +1 -1
  33. package/dist/rem/zod.gen.d.ts +1353 -1563
  34. package/dist/rem/zod.gen.d.ts.map +1 -1
  35. package/dist/rem/zod.gen.js +1076 -813
  36. package/dist/rem/zod.gen.js.map +1 -1
  37. package/package.json +1 -1
@@ -8,7 +8,7 @@ export type ThemeRequest = {
8
8
  primaryColor: number;
9
9
  };
10
10
  export type SocialMediaRequest = {
11
- type: TypeEnum;
11
+ type: 'FACEBOOK' | 'YOUTUBE' | 'INSTAGRAM' | 'TIKTOK' | 'LINKEDIN';
12
12
  url?: string;
13
13
  };
14
14
  export type SocialMediasRequest = {
@@ -18,7 +18,7 @@ export type MultiLangTextRequest = {
18
18
  data: Array<TextRequest>;
19
19
  };
20
20
  export type TextRequest = {
21
- language: LanguageEnum;
21
+ language: 'ka' | 'en' | 'ru';
22
22
  text?: string;
23
23
  };
24
24
  export type WhitelabelSectionRequest = {
@@ -53,7 +53,7 @@ export type UpdateEmailRequest = {
53
53
  export type RolesRequest = {
54
54
  name: string;
55
55
  description: string;
56
- permissions: Array<SchemaEnum3>;
56
+ permissions: Array<'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL'>;
57
57
  };
58
58
  export type AssignRoleRequest = {
59
59
  roleId: number;
@@ -73,12 +73,12 @@ export type NoteRequest = {
73
73
  note?: string;
74
74
  };
75
75
  export type RecordLostLeadRequest = {
76
- reason: ReasonEnum;
76
+ reason: 'NOT_WORKING_WITH_AGENTS' | 'NOT_RESPONDING' | 'ALREADY_SOLD' | 'COULD_NOT_NEGOTIATE_PRICE' | 'CHOSE_ANOTHER_AGENCY' | 'CHANGED_PLANS' | 'OUT_OF_BUDGET' | 'SPAM' | 'OTHER';
77
77
  };
78
78
  export type IntentRequest = {
79
- clientType: ClientTypeEnum;
80
- listingType: SchemaEnum7;
81
- propertyType: SchemaEnum6;
79
+ clientType: 'LISTING' | 'SEEKING';
80
+ listingType: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
81
+ propertyType: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
82
82
  price?: PriceRangeRequest;
83
83
  targetLocation?: LocationRefRequest;
84
84
  area?: number;
@@ -97,7 +97,7 @@ export type PriceRangeRequest = {
97
97
  export type ContactInfoRequest = {
98
98
  firstName?: string;
99
99
  lastName?: string;
100
- gender?: GenderEnum;
100
+ gender?: 'MALE' | 'FEMALE' | 'UNKNOWN';
101
101
  email?: string;
102
102
  phone: string;
103
103
  };
@@ -108,15 +108,15 @@ export type RenameClientRecommendationsRequest = {
108
108
  name?: string;
109
109
  };
110
110
  export type AgreementRequest = {
111
- type: SchemaEnum5;
111
+ type: 'EXCLUSIVE' | 'NON_EXCLUSIVE';
112
112
  expiresAt?: Date;
113
113
  };
114
114
  export type ReprioritizeClientRequest = {
115
- priority?: PriorityEnum;
115
+ priority?: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
116
116
  };
117
117
  export type CaptureInterestRequest = {
118
- propertyTypes: Array<SchemaEnum6>;
119
- listingType: SchemaEnum7;
118
+ propertyTypes: Array<'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE'>;
119
+ listingType: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
120
120
  priceMin?: number;
121
121
  priceMax?: number;
122
122
  bedroomsMin?: number;
@@ -130,8 +130,8 @@ export type CaptureInterestRequest = {
130
130
  location?: LocationRefRequest;
131
131
  };
132
132
  export type UpdateContactPreferencesRequest = {
133
- contactMethods: Array<ItemsEnum>;
134
- favoriteContactMethod?: ItemsEnum;
133
+ contactMethods: Array<'WHATSAPP' | 'VIBER' | 'PHONE_CALL'>;
134
+ favoriteContactMethod?: 'WHATSAPP' | 'VIBER' | 'PHONE_CALL';
135
135
  };
136
136
  export type AddressRequest = {
137
137
  country: string;
@@ -150,7 +150,7 @@ export type CreateAgencyRequest = {
150
150
  };
151
151
  export type PhotoRequest = {
152
152
  photo: string;
153
- type: TypeEnum2;
153
+ type: 'JPEG' | 'JPG' | 'PNG' | 'WEBP';
154
154
  width: number;
155
155
  height?: number;
156
156
  };
@@ -181,11 +181,11 @@ export type CaptureLeadRequest = {
181
181
  note?: string;
182
182
  };
183
183
  export type RateRecommendationItemRequest = {
184
- decision: SchemaEnum;
184
+ decision: 'MAYBE' | 'DISLIKE' | 'LIKE' | 'VISIT';
185
185
  note?: string;
186
186
  };
187
187
  export type AttendeeRequest = {
188
- role: RoleEnum;
188
+ role: 'ORGANIZER' | 'AGENT' | 'OWNER' | 'CLIENT';
189
189
  memberId?: string;
190
190
  clientId?: number;
191
191
  email?: string;
@@ -199,7 +199,7 @@ export type CreateMeetingRequest = {
199
199
  title: string;
200
200
  description?: string;
201
201
  location?: string;
202
- inviteStrategy: InviteStrategyEnum;
202
+ inviteStrategy: 'NONE' | 'AGENT_ONLY' | 'ALL_PARTICIPANTS';
203
203
  setReminders?: boolean;
204
204
  };
205
205
  export type MeetingResponse = {
@@ -227,15 +227,15 @@ export type AuthRequest = {
227
227
  };
228
228
  export type AgencyPrincipalDto = {
229
229
  memberId?: string;
230
- permissions?: Array<SchemaEnum3>;
230
+ permissions?: Array<'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL'>;
231
231
  isActive?: boolean;
232
232
  isOwner?: boolean;
233
233
  };
234
234
  export type OnboardClientRequest = {
235
235
  contactInfo: ContactInfoRequest;
236
- contactMethods: Array<ItemsEnum>;
237
- favoriteContactMethod?: ItemsEnum;
238
- priority?: PriorityEnum;
236
+ contactMethods: Array<'WHATSAPP' | 'VIBER' | 'PHONE_CALL'>;
237
+ favoriteContactMethod?: 'WHATSAPP' | 'VIBER' | 'PHONE_CALL';
238
+ priority?: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
239
239
  convertedFromLeadId?: number;
240
240
  };
241
241
  export type AddressRef = {
@@ -253,7 +253,7 @@ export type ClientOnboardedResponse = {
253
253
  export type ContactSummary = {
254
254
  firstName?: string;
255
255
  lastName?: string;
256
- gender?: GenderEnum;
256
+ gender?: 'MALE' | 'FEMALE' | 'UNKNOWN';
257
257
  email?: string;
258
258
  phone?: string;
259
259
  };
@@ -263,7 +263,7 @@ export type Coordinates = {
263
263
  };
264
264
  export type ImportedPropertyDraft = {
265
265
  contact?: ContactSummary;
266
- listingType?: SchemaEnum7;
266
+ listingType?: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
267
267
  askingPrice?: number;
268
268
  propertyCreationRequest?: PropertyCreationRequest;
269
269
  photosForUpload?: Array<PresignedResult>;
@@ -284,7 +284,7 @@ export type PresignedResult = {
284
284
  export type PropertyCreationRequest = {
285
285
  draftId: string;
286
286
  clientId?: number;
287
- propertyType: SchemaEnum6;
287
+ propertyType: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
288
288
  address: AddressRef;
289
289
  photoUrls: Array<PhotoInternalRequest>;
290
290
  spaces: {
@@ -311,18 +311,18 @@ export type RecommendListingRequest = {
311
311
  externalListingId: string;
312
312
  };
313
313
  export type ExternalListingPublishRequest = {
314
- platform: SchemaEnum8;
314
+ platform: 'SS' | 'MY_HOME';
315
315
  listingId: number;
316
316
  };
317
317
  export type ExternalListingBoostRequest = {
318
- platform: SchemaEnum8;
318
+ platform: 'SS' | 'MY_HOME';
319
319
  listingId: number;
320
- tier: SchemaEnum9;
320
+ tier: 'VIP' | 'VIP_PLUS' | 'SUPER_VIP';
321
321
  numberOfDays: number;
322
322
  };
323
323
  export type AddDealRequest = {
324
324
  listingId: number;
325
- commissionType: CommissionTypeEnum;
325
+ commissionType: 'FIXED_SALE' | 'FIXED_RENT' | 'PERCENTAGE' | 'MONTHS_OF_RENT';
326
326
  rate?: number;
327
327
  amount?: number;
328
328
  factor?: number;
@@ -341,8 +341,8 @@ export type OrganizationSummaryViewResponse = {
341
341
  roleId?: number;
342
342
  memberId: string;
343
343
  roleName: string;
344
- permissions: Array<SchemaEnum3>;
345
- status: SchemaEnum2;
344
+ permissions: Array<'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL'>;
345
+ status: 'NEW' | 'ACTIVE' | 'PAYMENT_FAILED' | 'INACTIVE';
346
346
  };
347
347
  export type UserContextViewResponse = {
348
348
  user: UserSummaryViewResponse;
@@ -369,7 +369,7 @@ export type RoleResponse = {
369
369
  isSystem?: boolean;
370
370
  isOwner?: boolean;
371
371
  description: string;
372
- permissions: Array<SchemaEnum3>;
372
+ permissions: Array<'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL'>;
373
373
  };
374
374
  export type AddressResponse = {
375
375
  regionId: number;
@@ -388,21 +388,21 @@ export type RecommendationResponse = {
388
388
  recommendationsId: string;
389
389
  title: string;
390
390
  createdAt: Date;
391
- status: StatusEnum;
391
+ status: 'DRAFT' | 'AWAITING_CLIENT_REVIEW' | 'CLOSED';
392
392
  recommendations: PagedModelRecommendationsCardView;
393
393
  };
394
394
  export type RecommendationsCardView = {
395
395
  recommendationItemId: number;
396
- decision?: SchemaEnum;
396
+ decision?: 'MAYBE' | 'DISLIKE' | 'LIKE' | 'VISIT';
397
397
  clientNote?: string;
398
398
  ownerClientId: number;
399
399
  listingId: number;
400
400
  externalListingId: string;
401
- listingType: SchemaEnum7;
401
+ listingType: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
402
402
  price: number;
403
403
  propertyId: number;
404
404
  externalPropertyId: string;
405
- type: SchemaEnum6;
405
+ type: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
406
406
  coverPhoto?: string;
407
407
  photoCount?: number;
408
408
  totalArea: number;
@@ -414,21 +414,21 @@ export type RecommendationDecisionResponse = {
414
414
  itemId: number;
415
415
  externalPropertyId: string;
416
416
  externalListingId: string;
417
- decision: SchemaEnum;
417
+ decision: 'MAYBE' | 'DISLIKE' | 'LIKE' | 'VISIT';
418
418
  };
419
419
  export type GroupedPermissionsResponse = {
420
- group: GroupEnum;
420
+ group: 'AGENCY' | 'INVITATION' | 'ROLE' | 'MEMBER' | 'LEAD' | 'CLIENT' | 'PROPERTY';
421
421
  permissions: Array<PermissionResponse>;
422
422
  };
423
423
  export type PermissionResponse = {
424
- permission: SchemaEnum3;
425
- implied: Array<SchemaEnum3>;
424
+ permission: 'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL';
425
+ implied: Array<'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL'>;
426
426
  };
427
427
  export type InvitationDetailsResponse = {
428
428
  invitationId: string;
429
429
  agencyId: string;
430
430
  email: string;
431
- status: StatusEnum2;
431
+ status: 'PENDING' | 'ACCEPTED' | 'CANCELLED' | 'EXPIRED';
432
432
  };
433
433
  export type AgencySummaryResponse = {
434
434
  id: string;
@@ -439,7 +439,7 @@ export type AgencySummaryResponse = {
439
439
  subdomain: string;
440
440
  phone: string;
441
441
  establishedYear?: number;
442
- status: SchemaEnum2;
442
+ status: 'NEW' | 'ACTIVE' | 'PAYMENT_FAILED' | 'INACTIVE';
443
443
  logo?: string;
444
444
  theme?: number;
445
445
  };
@@ -458,7 +458,7 @@ export type AgencyStatsResponse = {
458
458
  operatingSince: number;
459
459
  };
460
460
  export type LangTextResponse = {
461
- language: LanguageEnum;
461
+ language: 'ka' | 'en' | 'ru';
462
462
  text: string;
463
463
  };
464
464
  export type MemberResponse = {
@@ -480,7 +480,7 @@ export type SegmentResponse = {
480
480
  };
481
481
  export type SocialLinkResponse = {
482
482
  url: string;
483
- type: TypeEnum;
483
+ type: 'FACEBOOK' | 'YOUTUBE' | 'INSTAGRAM' | 'TIKTOK' | 'LINKEDIN';
484
484
  };
485
485
  export type WhitelabelResponse = {
486
486
  theme: number;
@@ -509,25 +509,25 @@ export type MemberViewResponse = {
509
509
  roleName: string;
510
510
  joinedAt: Date;
511
511
  };
512
- export type ClientId = {
513
- value?: number;
514
- };
515
512
  export type ListingGridView = {
516
- id?: PropertyId;
517
- clientId?: ClientId;
518
- propertyType?: SchemaEnum6;
513
+ externalPropertyId?: string;
514
+ externalListingId?: string;
515
+ propertyId?: number;
516
+ listingId?: number;
517
+ clientId?: number;
518
+ propertyType?: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
519
519
  regionId?: number;
520
520
  districtId?: number;
521
521
  subdistrictId?: number;
522
522
  streetId?: number;
523
523
  cover?: string;
524
- agreementType?: SchemaEnum5;
524
+ agreementType?: 'EXCLUSIVE' | 'NON_EXCLUSIVE';
525
525
  agreementExpiresAt?: Date;
526
- propertyState?: SchemaEnum4;
526
+ propertyState?: 'IN_REGISTRATION' | 'UNLISTED' | 'LISTED_INTERNALLY' | 'LISTED' | 'CLOSED';
527
527
  createdAt?: Date;
528
- listingType?: SchemaEnum7;
528
+ listingType?: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
529
529
  price?: number;
530
- commissionType?: CommissionTypeEnum;
530
+ commissionType?: 'FIXED_SALE' | 'FIXED_RENT' | 'PERCENTAGE' | 'MONTHS_OF_RENT';
531
531
  commission?: number;
532
532
  platforms?: Array<PlatformView>;
533
533
  };
@@ -536,14 +536,11 @@ export type PagedModelListingGridView = {
536
536
  page?: PageMetadata;
537
537
  };
538
538
  export type PlatformView = {
539
- platform?: SchemaEnum8;
539
+ platform?: 'SS' | 'MY_HOME';
540
540
  expiresAt?: Date;
541
- tier?: SchemaEnum9;
541
+ tier?: 'VIP' | 'VIP_PLUS' | 'SUPER_VIP';
542
542
  boostExpiresAt?: Date;
543
543
  };
544
- export type PropertyId = {
545
- value?: number;
546
- };
547
544
  export type GroupCount = {
548
545
  groupKey?: string;
549
546
  label?: string;
@@ -551,9 +548,9 @@ export type GroupCount = {
551
548
  };
552
549
  export type IntentResponse = {
553
550
  id: number;
554
- clientType: ClientTypeEnum;
555
- listingType: SchemaEnum7;
556
- propertyType: SchemaEnum6;
551
+ clientType: 'LISTING' | 'SEEKING';
552
+ listingType: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
553
+ propertyType: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
557
554
  priceMin?: number;
558
555
  priceMax?: number;
559
556
  regionId?: number;
@@ -569,13 +566,13 @@ export type LeadGridResponse = {
569
566
  assignedTo?: string;
570
567
  assignedToName?: string;
571
568
  assignedToPhoto?: string;
572
- status: SchemaEnum11;
569
+ status: 'NEW' | 'ON_HOLD' | 'LOST' | 'CONVERTED';
573
570
  contactFullName?: string;
574
- contactGender?: GenderEnum;
571
+ contactGender?: 'MALE' | 'FEMALE' | 'UNKNOWN';
575
572
  contactPhoneNumber: string;
576
573
  contactEmail?: string;
577
574
  note?: string;
578
- sourceType?: SchemaEnum12;
575
+ sourceType?: 'MY_HOME' | 'SS' | 'HOME_SPOT' | 'UNKNOWN';
579
576
  sourceLink?: string;
580
577
  isSearching: boolean;
581
578
  isListing: boolean;
@@ -588,7 +585,7 @@ export type PagedModelLeadGridResponse = {
588
585
  export type InvitationViewResponse = {
589
586
  invitationId: string;
590
587
  email: string;
591
- status: StatusEnum2;
588
+ status: 'PENDING' | 'ACCEPTED' | 'CANCELLED' | 'EXPIRED';
592
589
  createdAt: Date;
593
590
  expiresAt: Date;
594
591
  acceptedAt?: Date;
@@ -607,27 +604,27 @@ export type ClientGridResponse = {
607
604
  assignedToPhoto?: string;
608
605
  contactFullName?: string;
609
606
  contactPhoneNumber: string;
610
- contactGender?: GenderEnum;
607
+ contactGender?: 'MALE' | 'FEMALE' | 'UNKNOWN';
611
608
  contactEmail?: string;
612
- sourceType?: SchemaEnum12;
609
+ sourceType?: 'MY_HOME' | 'SS' | 'HOME_SPOT' | 'UNKNOWN';
613
610
  sourceLink?: string;
614
611
  isSearching: boolean;
615
612
  isListing: boolean;
616
- contactMethods: Array<ItemsEnum>;
617
- favoriteContactMethod?: ItemsEnum;
618
- priority?: PriorityEnum;
613
+ contactMethods: Array<'WHATSAPP' | 'VIBER' | 'PHONE_CALL'>;
614
+ favoriteContactMethod?: 'WHATSAPP' | 'VIBER' | 'PHONE_CALL';
615
+ priority?: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
619
616
  };
620
617
  export type PagedModelClientGridResponse = {
621
618
  content?: Array<ClientGridResponse>;
622
619
  page?: PageMetadata;
623
620
  };
624
621
  export type ActiveBoostResponse = {
625
- tier: SchemaEnum9;
622
+ tier: 'VIP' | 'VIP_PLUS' | 'SUPER_VIP';
626
623
  activatedAt: Date;
627
624
  expiresAt: Date;
628
625
  };
629
626
  export type AgreementResponse = {
630
- agreement: SchemaEnum5;
627
+ agreement: 'EXCLUSIVE' | 'NON_EXCLUSIVE';
631
628
  expiryDate?: Date;
632
629
  };
633
630
  export type AssignedMember = {
@@ -647,7 +644,7 @@ export type Client360Response = {
647
644
  communicationPreference?: CommunicationPreferenceResponse;
648
645
  isSearching: boolean;
649
646
  isListing: boolean;
650
- priority?: PriorityEnum;
647
+ priority?: 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
651
648
  createdAt: Date;
652
649
  updatedAt: Date;
653
650
  interests: Array<ClientInterestResponse>;
@@ -655,8 +652,8 @@ export type Client360Response = {
655
652
  };
656
653
  export type ClientInterestResponse = {
657
654
  id: number;
658
- propertyTypes: Array<SchemaEnum6>;
659
- listingType: SchemaEnum7;
655
+ propertyTypes: Array<'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE'>;
656
+ listingType: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
660
657
  priceMin?: number;
661
658
  priceMax?: number;
662
659
  bedroomsMin?: number;
@@ -673,7 +670,7 @@ export type ClientInterestResponse = {
673
670
  export type ClientListingsResponse = {
674
671
  publicId: number;
675
672
  listingId: string;
676
- listingType: SchemaEnum7;
673
+ listingType: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
677
674
  price: number;
678
675
  deal?: DealResponse;
679
676
  platformListings: Array<PlatformListingResponse>;
@@ -681,8 +678,8 @@ export type ClientListingsResponse = {
681
678
  export type ClientPropertyResponse = {
682
679
  publicId: number;
683
680
  propertyId: string;
684
- type: SchemaEnum6;
685
- state: SchemaEnum4;
681
+ type: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
682
+ state: 'IN_REGISTRATION' | 'UNLISTED' | 'LISTED_INTERNALLY' | 'LISTED' | 'CLOSED';
686
683
  details?: PropertyDetailsResponse;
687
684
  agreement: AgreementResponse;
688
685
  listings: Array<ClientListingsResponse>;
@@ -692,18 +689,18 @@ export type ColoredListingResponse = {
692
689
  expiresAt: Date;
693
690
  };
694
691
  export type CommunicationPreferenceResponse = {
695
- preferredContactMethod?: ItemsEnum;
696
- contactMethods: Array<ItemsEnum>;
692
+ preferredContactMethod?: 'WHATSAPP' | 'VIBER' | 'PHONE_CALL';
693
+ contactMethods: Array<'WHATSAPP' | 'VIBER' | 'PHONE_CALL'>;
697
694
  };
698
695
  export type ContactInfoResponse = {
699
696
  firstName?: string;
700
697
  lastName?: string;
701
- gender: GenderEnum;
698
+ gender: 'MALE' | 'FEMALE' | 'UNKNOWN';
702
699
  phoneNumber: string;
703
700
  email?: string;
704
701
  };
705
702
  export type DealResponse = {
706
- type: CommissionTypeEnum;
703
+ type: 'FIXED_SALE' | 'FIXED_RENT' | 'PERCENTAGE' | 'MONTHS_OF_RENT';
707
704
  rate?: number;
708
705
  fixedAmount?: number;
709
706
  months?: number;
@@ -711,7 +708,7 @@ export type DealResponse = {
711
708
  };
712
709
  export type PlatformListingResponse = {
713
710
  platformId: number;
714
- platformType: SchemaEnum8;
711
+ platformType: 'SS' | 'MY_HOME';
715
712
  uploadDate: Date;
716
713
  expiryDate: Date;
717
714
  renewedDate?: Date;
@@ -728,7 +725,7 @@ export type PropertyDetailsResponse = {
728
725
  address: AddressResponse;
729
726
  };
730
727
  export type SourceResponse = {
731
- sourceType: SchemaEnum12;
728
+ sourceType: 'MY_HOME' | 'SS' | 'HOME_SPOT' | 'UNKNOWN';
732
729
  sourceLink?: string;
733
730
  };
734
731
  export type AddressViewResponse = {
@@ -747,36 +744,8 @@ export type AgencyProfileResponse = {
747
744
  address: AddressViewResponse;
748
745
  };
749
746
  export type WhitelabelActiveResponse = {
750
- status?: StatusEnum3;
751
- };
752
- export type SchemaEnum = 'MAYBE' | 'DISLIKE' | 'LIKE' | 'VISIT';
753
- export type SchemaEnum2 = 'NEW' | 'ACTIVE' | 'PAYMENT_FAILED' | 'INACTIVE';
754
- export type SchemaEnum3 = 'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL';
755
- export type SchemaEnum4 = 'IN_REGISTRATION' | 'UNLISTED' | 'LISTED_INTERNALLY' | 'LISTED' | 'CLOSED';
756
- export type SchemaEnum5 = 'EXCLUSIVE' | 'NON_EXCLUSIVE';
757
- export type SchemaEnum6 = 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
758
- export type SchemaEnum7 = 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
759
- export type SchemaEnum8 = 'SS' | 'MY_HOME';
760
- export type SchemaEnum9 = 'VIP' | 'VIP_PLUS' | 'SUPER_VIP';
761
- export type SchemaEnum10 = 'STATE' | 'PROPERTY_TYPE' | 'LISTING_TYPE' | 'REGION' | 'PLATFORM' | 'BOOST_TIER' | 'CREATED_AT_DAY' | 'CREATED_AT_WEEK' | 'CREATED_AT_MONTH';
762
- export type SchemaEnum11 = 'NEW' | 'ON_HOLD' | 'LOST' | 'CONVERTED';
763
- export type SchemaEnum12 = 'MY_HOME' | 'SS' | 'HOME_SPOT' | 'UNKNOWN';
764
- export type SchemaEnum13 = 'ASSIGNED_TO' | 'STATUS' | 'SOURCE_TYPE' | 'CREATED_AT_DAY' | 'CREATED_AT_WEEK' | 'CREATED_AT_MONTH';
765
- export type TypeEnum = 'FACEBOOK' | 'YOUTUBE' | 'INSTAGRAM' | 'TIKTOK' | 'LINKEDIN';
766
- export type LanguageEnum = 'ka' | 'en' | 'ru';
767
- export type ReasonEnum = 'NOT_WORKING_WITH_AGENTS' | 'NOT_RESPONDING' | 'ALREADY_SOLD' | 'COULD_NOT_NEGOTIATE_PRICE' | 'CHOSE_ANOTHER_AGENCY' | 'CHANGED_PLANS' | 'OUT_OF_BUDGET' | 'SPAM' | 'OTHER';
768
- export type ClientTypeEnum = 'LISTING' | 'SEEKING';
769
- export type GenderEnum = 'MALE' | 'FEMALE' | 'UNKNOWN';
770
- export type PriorityEnum = 'CRITICAL' | 'HIGH' | 'MEDIUM' | 'LOW';
771
- export type ItemsEnum = 'WHATSAPP' | 'VIBER' | 'PHONE_CALL';
772
- export type TypeEnum2 = 'JPEG' | 'JPG' | 'PNG' | 'WEBP';
773
- export type RoleEnum = 'ORGANIZER' | 'AGENT' | 'OWNER' | 'CLIENT';
774
- export type InviteStrategyEnum = 'NONE' | 'AGENT_ONLY' | 'ALL_PARTICIPANTS';
775
- export type CommissionTypeEnum = 'FIXED_SALE' | 'FIXED_RENT' | 'PERCENTAGE' | 'MONTHS_OF_RENT';
776
- export type StatusEnum = 'DRAFT' | 'AWAITING_CLIENT_REVIEW' | 'CLOSED';
777
- export type GroupEnum = 'AGENCY' | 'INVITATION' | 'ROLE' | 'MEMBER' | 'LEAD' | 'CLIENT' | 'PROPERTY';
778
- export type StatusEnum2 = 'PENDING' | 'ACCEPTED' | 'CANCELLED' | 'EXPIRED';
779
- export type StatusEnum3 = 'ACTIVE' | 'INACTIVE' | 'NOT_FOUND';
747
+ status?: 'ACTIVE' | 'INACTIVE' | 'NOT_FOUND';
748
+ };
780
749
  export type PutWhitelabelWebsiteData = {
781
750
  body: WebsiteRequest;
782
751
  path?: never;
@@ -1912,7 +1881,7 @@ export type GetPublicRecomendationsByRecommendationsIdItemsData = {
1912
1881
  recommendationsId: string;
1913
1882
  };
1914
1883
  query?: {
1915
- decision?: SchemaEnum;
1884
+ decision?: 'MAYBE' | 'DISLIKE' | 'LIKE' | 'VISIT';
1916
1885
  /**
1917
1886
  * Zero-based page index (0..N)
1918
1887
  */
@@ -1999,7 +1968,7 @@ export type GetPublicAgencyData = {
1999
1968
  body?: never;
2000
1969
  path?: never;
2001
1970
  query?: {
2002
- status?: SchemaEnum2;
1971
+ status?: 'NEW' | 'ACTIVE' | 'PAYMENT_FAILED' | 'INACTIVE';
2003
1972
  /**
2004
1973
  * Zero-based page index (0..N)
2005
1974
  */
@@ -2072,7 +2041,7 @@ export type GetMemberData = {
2072
2041
  path?: never;
2073
2042
  query?: {
2074
2043
  roleId?: number;
2075
- permission?: SchemaEnum3;
2044
+ permission?: 'AGENCY_WRITE' | 'INVITATION_READ' | 'INVITATION_WRITE' | 'ROLE_READ' | 'ROLE_WRITE' | 'MEMBER_READ' | 'MEMBER_WRITE' | 'LEAD_READ' | 'LEAD_WRITE' | 'LEAD_READ_ALL' | 'LEAD_WRITE_ALL' | 'CLIENT_READ' | 'CLIENT_WRITE' | 'CLIENT_READ_ALL' | 'CLIENT_WRITE_ALL' | 'PROPERTY_READ_ALL';
2076
2045
  /**
2077
2046
  * Sorting criteria in the format: property,(asc|desc). Default sort order is ascending. Multiple sort criteria are supported.
2078
2047
  */
@@ -2091,12 +2060,12 @@ export type GetListingData = {
2091
2060
  body?: never;
2092
2061
  path?: never;
2093
2062
  query?: {
2094
- state?: SchemaEnum4;
2095
- agreementType?: SchemaEnum5;
2063
+ state?: 'IN_REGISTRATION' | 'UNLISTED' | 'LISTED_INTERNALLY' | 'LISTED' | 'CLOSED';
2064
+ agreementType?: 'EXCLUSIVE' | 'NON_EXCLUSIVE';
2096
2065
  agreementExpiresFrom?: Date;
2097
2066
  agreementExpiresTo?: Date;
2098
- propertyType?: SchemaEnum6;
2099
- listingType?: SchemaEnum7;
2067
+ propertyType?: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
2068
+ listingType?: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
2100
2069
  clientId?: number;
2101
2070
  regionId?: number;
2102
2071
  districtId?: number;
@@ -2106,10 +2075,10 @@ export type GetListingData = {
2106
2075
  priceMax?: number;
2107
2076
  createdFrom?: Date;
2108
2077
  createdTo?: Date;
2109
- platform?: SchemaEnum8;
2078
+ platform?: 'SS' | 'MY_HOME';
2110
2079
  platformExpiresFrom?: Date;
2111
2080
  platformExpiresTo?: Date;
2112
- boostTier?: SchemaEnum9;
2081
+ boostTier?: 'VIP' | 'VIP_PLUS' | 'SUPER_VIP';
2113
2082
  hasBoosted?: boolean;
2114
2083
  boostExpiresFrom?: Date;
2115
2084
  boostExpiresTo?: Date;
@@ -2154,13 +2123,13 @@ export type GetListingGroupsData = {
2154
2123
  body?: never;
2155
2124
  path?: never;
2156
2125
  query: {
2157
- groupBy: SchemaEnum10;
2158
- state?: SchemaEnum4;
2159
- agreementType?: SchemaEnum5;
2126
+ groupBy: 'STATE' | 'PROPERTY_TYPE' | 'LISTING_TYPE' | 'REGION' | 'PLATFORM' | 'BOOST_TIER' | 'CREATED_AT_DAY' | 'CREATED_AT_WEEK' | 'CREATED_AT_MONTH';
2127
+ state?: 'IN_REGISTRATION' | 'UNLISTED' | 'LISTED_INTERNALLY' | 'LISTED' | 'CLOSED';
2128
+ agreementType?: 'EXCLUSIVE' | 'NON_EXCLUSIVE';
2160
2129
  agreementExpiresFrom?: Date;
2161
2130
  agreementExpiresTo?: Date;
2162
- propertyType?: SchemaEnum6;
2163
- listingType?: SchemaEnum7;
2131
+ propertyType?: 'HOUSE' | 'TOWN_HOUSE' | 'COUNTRY_HOUSE' | 'VILLA' | 'COTTAGE' | 'APARTMENT' | 'DUPLEX' | 'TRIPLEX' | 'SEMI_BASEMENT' | 'ATTIC' | 'AGRICULTURAL_LAND' | 'RESIDENTIAL_LAND' | 'HOTEL_ROOM' | 'MOTEL_ROOM' | 'CO_LIVING_SPACE' | 'OFFICE' | 'COMMERCIAL_SPACE' | 'CO_WORKING_SPACE' | 'WAREHOUSE' | 'GARAGE';
2132
+ listingType?: 'SALE' | 'RENT' | 'DAILY_RENT' | 'PLEDGE';
2164
2133
  clientId?: number;
2165
2134
  regionId?: number;
2166
2135
  districtId?: number;
@@ -2170,10 +2139,10 @@ export type GetListingGroupsData = {
2170
2139
  priceMax?: number;
2171
2140
  createdFrom?: Date;
2172
2141
  createdTo?: Date;
2173
- platform?: SchemaEnum8;
2142
+ platform?: 'SS' | 'MY_HOME';
2174
2143
  platformExpiresFrom?: Date;
2175
2144
  platformExpiresTo?: Date;
2176
- boostTier?: SchemaEnum9;
2145
+ boostTier?: 'VIP' | 'VIP_PLUS' | 'SUPER_VIP';
2177
2146
  hasBoosted?: boolean;
2178
2147
  boostExpiresFrom?: Date;
2179
2148
  boostExpiresTo?: Date;
@@ -2191,7 +2160,7 @@ export type GetLeadData = {
2191
2160
  body?: never;
2192
2161
  path?: never;
2193
2162
  query?: {
2194
- status?: SchemaEnum11;
2163
+ status?: 'NEW' | 'ON_HOLD' | 'LOST' | 'CONVERTED';
2195
2164
  isSearching?: boolean;
2196
2165
  isListing?: boolean;
2197
2166
  assignedTo?: string;
@@ -2199,7 +2168,7 @@ export type GetLeadData = {
2199
2168
  contactName?: string;
2200
2169
  email?: string;
2201
2170
  note?: string;
2202
- sourceType?: SchemaEnum12;
2171
+ sourceType?: 'MY_HOME' | 'SS' | 'HOME_SPOT' | 'UNKNOWN';
2203
2172
  createdFrom?: Date;
2204
2173
  createdTo?: Date;
2205
2174
  /**
@@ -2243,14 +2212,14 @@ export type GetLeadMineData = {
2243
2212
  body?: never;
2244
2213
  path?: never;
2245
2214
  query?: {
2246
- status?: SchemaEnum11;
2215
+ status?: 'NEW' | 'ON_HOLD' | 'LOST' | 'CONVERTED';
2247
2216
  isSearching?: boolean;
2248
2217
  isListing?: boolean;
2249
2218
  phone?: string;
2250
2219
  contactName?: string;
2251
2220
  email?: string;
2252
2221
  note?: string;
2253
- sourceType?: SchemaEnum12;
2222
+ sourceType?: 'MY_HOME' | 'SS' | 'HOME_SPOT' | 'UNKNOWN';
2254
2223
  createdFrom?: Date;
2255
2224
  createdTo?: Date;
2256
2225
  /**
@@ -2279,8 +2248,8 @@ export type GetLeadGroupsData = {
2279
2248
  body?: never;
2280
2249
  path?: never;
2281
2250
  query: {
2282
- groupBy: SchemaEnum13;
2283
- status?: SchemaEnum11;
2251
+ groupBy: 'ASSIGNED_TO' | 'STATUS' | 'SOURCE_TYPE' | 'CREATED_AT_DAY' | 'CREATED_AT_WEEK' | 'CREATED_AT_MONTH';
2252
+ status?: 'NEW' | 'ON_HOLD' | 'LOST' | 'CONVERTED';
2284
2253
  isSearching?: boolean;
2285
2254
  isListing?: boolean;
2286
2255
  assignedTo?: string;
@@ -2288,7 +2257,7 @@ export type GetLeadGroupsData = {
2288
2257
  contactName?: string;
2289
2258
  email?: string;
2290
2259
  note?: string;
2291
- sourceType?: SchemaEnum12;
2260
+ sourceType?: 'MY_HOME' | 'SS' | 'HOME_SPOT' | 'UNKNOWN';
2292
2261
  createdFrom?: Date;
2293
2262
  createdTo?: Date;
2294
2263
  };
@@ -2308,7 +2277,7 @@ export type GetClientsByClientIdRecommendationsByRecommendationsIdData = {
2308
2277
  recommendationsId: string;
2309
2278
  };
2310
2279
  query?: {
2311
- decision?: SchemaEnum;
2280
+ decision?: 'MAYBE' | 'DISLIKE' | 'LIKE' | 'VISIT';
2312
2281
  /**
2313
2282
  * Zero-based page index (0..N)
2314
2283
  */
@@ -2338,7 +2307,7 @@ export type GetClientsByClientIdRecommendationsInterestByInterestIdData = {
2338
2307
  interestId: number;
2339
2308
  };
2340
2309
  query?: {
2341
- decision?: SchemaEnum;
2310
+ decision?: 'MAYBE' | 'DISLIKE' | 'LIKE' | 'VISIT';
2342
2311
  /**
2343
2312
  * Zero-based page index (0..N)
2344
2313
  */