@faable/auth-sdk 1.3.13 → 1.3.15

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.
@@ -103,14 +103,14 @@ export interface paths {
103
103
  cookie?: never;
104
104
  };
105
105
  /**
106
- * List Connections in Account
107
- * @description List Connections in Account
106
+ * List Connections
107
+ * @description List Connections
108
108
  */
109
109
  get: operations["connection/list"];
110
110
  put?: never;
111
111
  /**
112
- * Create Connection in Account
113
- * @description Create Connection in Account
112
+ * Create Connection
113
+ * @description Create Connection
114
114
  */
115
115
  post: operations["connection/create"];
116
116
  delete?: never;
@@ -127,17 +127,21 @@ export interface paths {
127
127
  cookie?: never;
128
128
  };
129
129
  /**
130
- * Get Connection in Account
131
- * @description Get Connection in Account
130
+ * Get Connection
131
+ * @description Get Connection
132
132
  */
133
133
  get: operations["connection/get"];
134
134
  put?: never;
135
- post?: never;
136
135
  /**
137
- * Delete Connection in Account
138
- * @description Delete Connection in Account
136
+ * Update Connection
137
+ * @description Update Connection
138
+ */
139
+ post: operations["connection/update"];
140
+ /**
141
+ * Delete Connection
142
+ * @description Delete Connection
139
143
  */
140
- delete: operations["connection/remove"];
144
+ delete: operations["connection/delete"];
141
145
  options?: never;
142
146
  head?: never;
143
147
  patch?: never;
@@ -151,14 +155,14 @@ export interface paths {
151
155
  cookie?: never;
152
156
  };
153
157
  /**
154
- * List Clients in Account
155
- * @description List Clients in Account
158
+ * List Clients
159
+ * @description List Clients
156
160
  */
157
161
  get: operations["client/list"];
158
162
  put?: never;
159
163
  /**
160
- * Create Client in Account
161
- * @description Create Client in Account
164
+ * Create Client
165
+ * @description Create Client
162
166
  */
163
167
  post: operations["client/create"];
164
168
  delete?: never;
@@ -175,17 +179,41 @@ export interface paths {
175
179
  cookie?: never;
176
180
  };
177
181
  /**
178
- * Get Client in Account
179
- * @description Get Client in Account
182
+ * Get Client
183
+ * @description Get Client
180
184
  */
181
185
  get: operations["client/get"];
182
186
  put?: never;
183
- post?: never;
184
187
  /**
185
- * Delete Client in Account
186
- * @description Delete Client in Account
188
+ * Update Client
189
+ * @description Update Client
190
+ */
191
+ post: operations["client/update"];
192
+ /**
193
+ * Delete Client
194
+ * @description Delete Client
195
+ */
196
+ delete: operations["client/delete"];
197
+ options?: never;
198
+ head?: never;
199
+ patch?: never;
200
+ trace?: never;
201
+ };
202
+ "/client/{client_id}/rotate-secret": {
203
+ parameters: {
204
+ query?: never;
205
+ header?: never;
206
+ path?: never;
207
+ cookie?: never;
208
+ };
209
+ get?: never;
210
+ put?: never;
211
+ /**
212
+ * Rotate a Client's secret
213
+ * @description Generates a fresh `client_secret` for the given Client and persists it. The previous secret is invalidated immediately — there is no grace period. Returns the full Client; the dashboard must surface the new secret to the admin once. Existing client_credentials / authorization_code integrations using the old secret will start failing at the token endpoint immediately after this call.
187
214
  */
188
- delete: operations["client/remove"];
215
+ post: operations["client/rotateSecret"];
216
+ delete?: never;
189
217
  options?: never;
190
218
  head?: never;
191
219
  patch?: never;
@@ -199,14 +227,14 @@ export interface paths {
199
227
  cookie?: never;
200
228
  };
201
229
  /**
202
- * List Users in Account
203
- * @description List Users in Account
230
+ * List Users
231
+ * @description List Users
204
232
  */
205
233
  get: operations["user/list"];
206
234
  put?: never;
207
235
  /**
208
- * Create User in Account
209
- * @description Create User in Account
236
+ * Create User
237
+ * @description Create User
210
238
  */
211
239
  post: operations["user/create"];
212
240
  delete?: never;
@@ -223,21 +251,21 @@ export interface paths {
223
251
  cookie?: never;
224
252
  };
225
253
  /**
226
- * Get User in Account
227
- * @description Get User in Account
254
+ * Get User
255
+ * @description Get User
228
256
  */
229
257
  get: operations["user/get"];
230
258
  put?: never;
231
259
  /**
232
- * Update Users in Account
233
- * @description Update Users in Account
260
+ * Update User
261
+ * @description Update User
234
262
  */
235
263
  post: operations["user/update"];
236
264
  /**
237
- * Delete User in Account
238
- * @description Delete User in Account
265
+ * Delete User
266
+ * @description Delete User
239
267
  */
240
- delete: operations["user/remove"];
268
+ delete: operations["user/delete"];
241
269
  options?: never;
242
270
  head?: never;
243
271
  patch?: never;
@@ -283,6 +311,46 @@ export interface paths {
283
311
  patch?: never;
284
312
  trace?: never;
285
313
  };
314
+ "/user/{user_id}/verify-email/start": {
315
+ parameters: {
316
+ query?: never;
317
+ header?: never;
318
+ path?: never;
319
+ cookie?: never;
320
+ };
321
+ get?: never;
322
+ put?: never;
323
+ /**
324
+ * Start the user's email verification flow
325
+ * @description Initiates the email-verification flow for the given user. Creates a `verify_email` Ticket and queues the verification email. Idempotent — returns `{status:'already_verified'}` without emitting a ticket if the user is already verified. Re-authentication is not required: an active session/Bearer is enough.
326
+ */
327
+ post: operations["user/verifyEmailStart"];
328
+ delete?: never;
329
+ options?: never;
330
+ head?: never;
331
+ patch?: never;
332
+ trace?: never;
333
+ };
334
+ "/verify-email": {
335
+ parameters: {
336
+ query?: never;
337
+ header?: never;
338
+ path?: never;
339
+ cookie?: never;
340
+ };
341
+ /**
342
+ * Verify a verify-email ticket and mark the user verified
343
+ * @description Entry point for the link sent to the user. Consumes the ticket, sets `email_verified=true` with `email_verified_method='verification_flow'`. Redirects to the `redirect_uri` supplied at start with `?status=verified|already_verified` appended; falls back to `/flow/verify-email-done` on the auth host when no `redirect_uri` was given. Invalid/expired tickets redirect to the same fallback with `?status=invalid_link` or `?status=expired`.
344
+ */
345
+ get: operations["user_verify_email_confirm"];
346
+ put?: never;
347
+ post?: never;
348
+ delete?: never;
349
+ options?: never;
350
+ head?: never;
351
+ patch?: never;
352
+ trace?: never;
353
+ };
286
354
  "/identity": {
287
355
  parameters: {
288
356
  query?: never;
@@ -291,14 +359,14 @@ export interface paths {
291
359
  cookie?: never;
292
360
  };
293
361
  /**
294
- * List Identitys in Account
295
- * @description List Identitys in Account
362
+ * List Identitys
363
+ * @description List Identitys
296
364
  */
297
365
  get: operations["identity/list"];
298
366
  put?: never;
299
367
  /**
300
- * Create Identity in Account
301
- * @description Create Identity in Account
368
+ * Create Identity
369
+ * @description Create Identity
302
370
  */
303
371
  post: operations["identity/create"];
304
372
  delete?: never;
@@ -315,17 +383,37 @@ export interface paths {
315
383
  cookie?: never;
316
384
  };
317
385
  /**
318
- * Get Identity in Account
319
- * @description Get Identity in Account
386
+ * Get Identity
387
+ * @description Get Identity
320
388
  */
321
389
  get: operations["identity/get"];
322
390
  put?: never;
323
391
  post?: never;
324
392
  /**
325
- * Delete Identity in Account
326
- * @description Delete Identity in Account
393
+ * Delete Identity
394
+ * @description Delete Identity
395
+ */
396
+ delete: operations["identity/delete"];
397
+ options?: never;
398
+ head?: never;
399
+ patch?: never;
400
+ trace?: never;
401
+ };
402
+ "/identity/{identity_id}/provider-token": {
403
+ parameters: {
404
+ query?: never;
405
+ header?: never;
406
+ path?: never;
407
+ cookie?: never;
408
+ };
409
+ /**
410
+ * Get a guaranteed-valid provider access_token
411
+ * @description Returns the identity's upstream provider `access_token`, refreshing it transparently via the stored `refresh_token` when it is (about to be) expired. Pass `?fresh=true` to force a refresh. Fails with 400 when the token is expired and no `refresh_token` is available (the user must re-authorize).
327
412
  */
328
- delete: operations["identity/remove"];
413
+ get: operations["identity/getProviderToken"];
414
+ put?: never;
415
+ post?: never;
416
+ delete?: never;
329
417
  options?: never;
330
418
  head?: never;
331
419
  patch?: never;
@@ -339,14 +427,14 @@ export interface paths {
339
427
  cookie?: never;
340
428
  };
341
429
  /**
342
- * List Roles in Account
343
- * @description List Roles in Account
430
+ * List Roles
431
+ * @description List Roles
344
432
  */
345
433
  get: operations["role/list"];
346
434
  put?: never;
347
435
  /**
348
- * Create Role in Account
349
- * @description Create Role in Account
436
+ * Create Role
437
+ * @description Create Role
350
438
  */
351
439
  post: operations["role/create"];
352
440
  delete?: never;
@@ -363,21 +451,21 @@ export interface paths {
363
451
  cookie?: never;
364
452
  };
365
453
  /**
366
- * Get Role in Account
367
- * @description Get Role in Account
454
+ * Get Role
455
+ * @description Get Role
368
456
  */
369
457
  get: operations["role/get"];
370
458
  put?: never;
371
459
  /**
372
- * Update Roles in Account
373
- * @description Update Roles in Account
460
+ * Update Role
461
+ * @description Update Role
374
462
  */
375
463
  post: operations["role/update"];
376
464
  /**
377
- * Delete Role in Account
378
- * @description Delete Role in Account
465
+ * Delete Role
466
+ * @description Delete Role
379
467
  */
380
- delete: operations["role/remove"];
468
+ delete: operations["role/delete"];
381
469
  options?: never;
382
470
  head?: never;
383
471
  patch?: never;
@@ -415,14 +503,14 @@ export interface paths {
415
503
  cookie?: never;
416
504
  };
417
505
  /**
418
- * List Rolemembers in Account
419
- * @description List Rolemembers in Account
506
+ * List Rolemembers
507
+ * @description List Rolemembers
420
508
  */
421
509
  get: operations["rolemember/list"];
422
510
  put?: never;
423
511
  /**
424
- * Create Rolemember in Account
425
- * @description Create Rolemember in Account
512
+ * Create Rolemember
513
+ * @description Create Rolemember
426
514
  */
427
515
  post: operations["rolemember/create"];
428
516
  delete?: never;
@@ -439,17 +527,17 @@ export interface paths {
439
527
  cookie?: never;
440
528
  };
441
529
  /**
442
- * Get Rolemember in Account
443
- * @description Get Rolemember in Account
530
+ * Get Rolemember
531
+ * @description Get Rolemember
444
532
  */
445
533
  get: operations["rolemember/get"];
446
534
  put?: never;
447
535
  post?: never;
448
536
  /**
449
- * Delete Rolemember in Account
450
- * @description Delete Rolemember in Account
537
+ * Delete Rolemember
538
+ * @description Delete Rolemember
451
539
  */
452
- delete: operations["rolemember/remove"];
540
+ delete: operations["rolemember/delete"];
453
541
  options?: never;
454
542
  head?: never;
455
543
  patch?: never;
@@ -463,14 +551,14 @@ export interface paths {
463
551
  cookie?: never;
464
552
  };
465
553
  /**
466
- * List Teams in Account
467
- * @description List Teams in Account
554
+ * List Teams
555
+ * @description List Teams
468
556
  */
469
557
  get: operations["team/list"];
470
558
  put?: never;
471
559
  /**
472
- * Create Team in Account
473
- * @description Create Team in Account
560
+ * Create Team
561
+ * @description Create Team
474
562
  */
475
563
  post: operations["team/create"];
476
564
  delete?: never;
@@ -487,21 +575,21 @@ export interface paths {
487
575
  cookie?: never;
488
576
  };
489
577
  /**
490
- * Get Team in Account
491
- * @description Get Team in Account
578
+ * Get Team
579
+ * @description Get Team
492
580
  */
493
581
  get: operations["team/get"];
494
582
  put?: never;
495
583
  /**
496
- * Update Teams in Account
497
- * @description Update Teams in Account
584
+ * Update Team
585
+ * @description Update Team
498
586
  */
499
587
  post: operations["team/update"];
500
588
  /**
501
- * Delete Team in Account
502
- * @description Delete Team in Account
589
+ * Delete Team
590
+ * @description Delete Team
503
591
  */
504
- delete: operations["team/remove"];
592
+ delete: operations["team/delete"];
505
593
  options?: never;
506
594
  head?: never;
507
595
  patch?: never;
@@ -515,14 +603,14 @@ export interface paths {
515
603
  cookie?: never;
516
604
  };
517
605
  /**
518
- * List Teammembers in Account
519
- * @description List Teammembers in Account
606
+ * List Teammembers
607
+ * @description List Teammembers
520
608
  */
521
609
  get: operations["teammember/list"];
522
610
  put?: never;
523
611
  /**
524
- * Create Teammember in Account
525
- * @description Create Teammember in Account
612
+ * Create Teammember
613
+ * @description Create Teammember
526
614
  */
527
615
  post: operations["teammember/create"];
528
616
  delete?: never;
@@ -539,17 +627,17 @@ export interface paths {
539
627
  cookie?: never;
540
628
  };
541
629
  /**
542
- * Get Teammember in Account
543
- * @description Get Teammember in Account
630
+ * Get Teammember
631
+ * @description Get Teammember
544
632
  */
545
633
  get: operations["teammember/get"];
546
634
  put?: never;
547
635
  post?: never;
548
636
  /**
549
- * Delete Teammember in Account
550
- * @description Delete Teammember in Account
637
+ * Delete Teammember
638
+ * @description Delete Teammember
551
639
  */
552
- delete: operations["teammember/remove"];
640
+ delete: operations["teammember/delete"];
553
641
  options?: never;
554
642
  head?: never;
555
643
  patch?: never;
@@ -564,7 +652,7 @@ export interface paths {
564
652
  };
565
653
  /**
566
654
  * List Team Members
567
- * @description List all Users that belong to the given Team in the current Account.
655
+ * @description List all Users that belong to the given Team in the current Account. Supports `?expand=user,team,roles` to inline referenced rows.
568
656
  */
569
657
  get: operations["team/listMembers"];
570
658
  put?: never;
@@ -671,14 +759,14 @@ export interface paths {
671
759
  cookie?: never;
672
760
  };
673
761
  /**
674
- * List Apis in Account
675
- * @description List Apis in Account
762
+ * List Apis
763
+ * @description List Apis
676
764
  */
677
765
  get: operations["api/list"];
678
766
  put?: never;
679
767
  /**
680
- * Create Api in Account
681
- * @description Create Api in Account
768
+ * Create Api
769
+ * @description Create Api
682
770
  */
683
771
  post: operations["api/create"];
684
772
  delete?: never;
@@ -695,21 +783,21 @@ export interface paths {
695
783
  cookie?: never;
696
784
  };
697
785
  /**
698
- * Get Api in Account
699
- * @description Get Api in Account
786
+ * Get Api
787
+ * @description Get Api
700
788
  */
701
789
  get: operations["api/get"];
702
790
  put?: never;
703
791
  /**
704
- * Update Apis in Account
705
- * @description Update Apis in Account
792
+ * Update Api
793
+ * @description Update Api
706
794
  */
707
795
  post: operations["api/update"];
708
796
  /**
709
- * Delete Api in Account
710
- * @description Delete Api in Account
797
+ * Delete Api
798
+ * @description Delete Api
711
799
  */
712
- delete: operations["api/remove"];
800
+ delete: operations["api/delete"];
713
801
  options?: never;
714
802
  head?: never;
715
803
  patch?: never;
@@ -763,14 +851,14 @@ export interface paths {
763
851
  cookie?: never;
764
852
  };
765
853
  /**
766
- * List Actions in Account
767
- * @description List Actions in Account
854
+ * List Actions
855
+ * @description List Actions
768
856
  */
769
857
  get: operations["action/list"];
770
858
  put?: never;
771
859
  /**
772
- * Create Action in Account
773
- * @description Create Action in Account
860
+ * Create Action
861
+ * @description Create Action
774
862
  */
775
863
  post: operations["action/create"];
776
864
  delete?: never;
@@ -787,17 +875,17 @@ export interface paths {
787
875
  cookie?: never;
788
876
  };
789
877
  /**
790
- * Get Action in Account
791
- * @description Get Action in Account
878
+ * Get Action
879
+ * @description Get Action
792
880
  */
793
881
  get: operations["action/get"];
794
882
  put?: never;
795
883
  post?: never;
796
884
  /**
797
- * Delete Action in Account
798
- * @description Delete Action in Account
885
+ * Delete Action
886
+ * @description Delete Action
799
887
  */
800
- delete: operations["action/remove"];
888
+ delete: operations["action/delete"];
801
889
  options?: never;
802
890
  head?: never;
803
891
  patch?: never;
@@ -811,14 +899,14 @@ export interface paths {
811
899
  cookie?: never;
812
900
  };
813
901
  /**
814
- * List Notificationsubscriptions in Account
815
- * @description List Notificationsubscriptions in Account
902
+ * List Notificationsubscriptions
903
+ * @description List Notificationsubscriptions
816
904
  */
817
905
  get: operations["notificationsubscription/list"];
818
906
  put?: never;
819
907
  /**
820
- * Create Notificationsubscription in Account
821
- * @description Create Notificationsubscription in Account
908
+ * Create Notificationsubscription
909
+ * @description Create Notificationsubscription
822
910
  */
823
911
  post: operations["notificationsubscription/create"];
824
912
  delete?: never;
@@ -835,21 +923,21 @@ export interface paths {
835
923
  cookie?: never;
836
924
  };
837
925
  /**
838
- * Get Notificationsubscription in Account
839
- * @description Get Notificationsubscription in Account
926
+ * Get Notificationsubscription
927
+ * @description Get Notificationsubscription
840
928
  */
841
929
  get: operations["notificationsubscription/get"];
842
930
  put?: never;
843
931
  /**
844
- * Update Notificationsubscriptions in Account
845
- * @description Update Notificationsubscriptions in Account
932
+ * Update Notificationsubscription
933
+ * @description Update Notificationsubscription
846
934
  */
847
935
  post: operations["notificationsubscription/update"];
848
936
  /**
849
- * Delete Notificationsubscription in Account
850
- * @description Delete Notificationsubscription in Account
937
+ * Delete Notificationsubscription
938
+ * @description Delete Notificationsubscription
851
939
  */
852
- delete: operations["notificationsubscription/remove"];
940
+ delete: operations["notificationsubscription/delete"];
853
941
  options?: never;
854
942
  head?: never;
855
943
  patch?: never;
@@ -863,8 +951,8 @@ export interface paths {
863
951
  cookie?: never;
864
952
  };
865
953
  /**
866
- * List Logs in Account
867
- * @description List Logs in Account
954
+ * List Logs
955
+ * @description List Logs
868
956
  */
869
957
  get: operations["log/list"];
870
958
  put?: never;
@@ -883,8 +971,8 @@ export interface paths {
883
971
  cookie?: never;
884
972
  };
885
973
  /**
886
- * Get Log in Account
887
- * @description Get Log in Account
974
+ * Get Log
975
+ * @description Get Log
888
976
  */
889
977
  get: operations["log/get"];
890
978
  put?: never;
@@ -923,14 +1011,14 @@ export interface paths {
923
1011
  cookie?: never;
924
1012
  };
925
1013
  /**
926
- * List Customdomains in Account
927
- * @description List Customdomains in Account
1014
+ * List Customdomains
1015
+ * @description List Customdomains
928
1016
  */
929
1017
  get: operations["customdomain/list"];
930
1018
  put?: never;
931
1019
  /**
932
- * Create Customdomain in Account
933
- * @description Create Customdomain in Account
1020
+ * Create Customdomain
1021
+ * @description Create Customdomain
934
1022
  */
935
1023
  post: operations["customdomain/create"];
936
1024
  delete?: never;
@@ -947,17 +1035,17 @@ export interface paths {
947
1035
  cookie?: never;
948
1036
  };
949
1037
  /**
950
- * Get Customdomain in Account
951
- * @description Get Customdomain in Account
1038
+ * Get Customdomain
1039
+ * @description Get Customdomain
952
1040
  */
953
1041
  get: operations["customdomain/get"];
954
1042
  put?: never;
955
1043
  post?: never;
956
1044
  /**
957
- * Delete Customdomain in Account
958
- * @description Delete Customdomain in Account
1045
+ * Delete Customdomain
1046
+ * @description Delete Customdomain
959
1047
  */
960
- delete: operations["customdomain/remove"];
1048
+ delete: operations["customdomain/delete"];
961
1049
  options?: never;
962
1050
  head?: never;
963
1051
  patch?: never;
@@ -1438,6 +1526,11 @@ export interface components {
1438
1526
  * @default false
1439
1527
  */
1440
1528
  welcome_email_enabled: boolean;
1529
+ /**
1530
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
1531
+ * @default false
1532
+ */
1533
+ verify_email_auto_send: boolean;
1441
1534
  };
1442
1535
  /** @description Policy for the user email-change flow. `new_only` (default) sends a single confirmation link to the new email. `old_and_new` requires the user to also click a link sent to the previous email before the swap takes effect — stricter, useful for tenants with higher-risk users. */
1443
1536
  email_change_verification_mode?: "new_only" | "old_and_new";
@@ -1461,16 +1554,14 @@ export interface components {
1461
1554
  * @default false
1462
1555
  */
1463
1556
  welcome_email_enabled: boolean;
1557
+ /**
1558
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
1559
+ * @default false
1560
+ */
1561
+ verify_email_auto_send: boolean;
1464
1562
  };
1465
1563
  /** @description Policy for the user email-change flow. `new_only` (default) sends a single confirmation link to the new email. `old_and_new` requires the user to also click a link sent to the previous email before the swap takes effect — stricter, useful for tenants with higher-risk users. */
1466
1564
  EmailChangeVerificationMode: "new_only" | "old_and_new";
1467
- /**
1468
- * @description Controls what happens to `user.email` on subsequent OAuth/federated logins when the user previously changed their email manually through this auth server (i.e. `user.email_change_locked_at` is set).
1469
- *
1470
- * - `preserve_manual` (default): the manually-set email wins. The federated provider's email is ignored on re-sync; `email` and `email_verified` are not touched. The identity link stays valid via `provider_user_id`, so the user can still log in with Google/etc.
1471
- * - `always_sync`: the federated provider's email is always written back, overwriting any manual change. Useful for tenants whose source of truth for identity is the IdP (corporate SSO, etc.).
1472
- */
1473
- EmailOAuthSyncPolicy: "preserve_manual" | "always_sync";
1474
1565
  /** @description Connection */
1475
1566
  Connection: {
1476
1567
  /** @description Connection ID */
@@ -1506,6 +1597,13 @@ export interface components {
1506
1597
  authorize_params: {
1507
1598
  [key: string]: string;
1508
1599
  };
1600
+ claims_mapping?: {
1601
+ [key: string]: string;
1602
+ };
1603
+ /** @description Derived: true when the connection_type has shared Faable defaults AND the tenant has not set its own client_id/client_secret. Read-only — set by the server on every read. */
1604
+ readonly is_using_default_credentials: boolean;
1605
+ /** @description Per-connection override of `Account.email_oauth_sync_policy`. When set on a Connection, takes precedence over the Account-level setting for logins through this IdP. When unset (default), the Account-level policy applies. Use this to allow `always_sync` for a trusted IdP (e.g. corporate SSO) while keeping `preserve_manual` for others within the same tenant. */
1606
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync";
1509
1607
  /** @description Object is related with this account */
1510
1608
  account: string;
1511
1609
  /**
@@ -1549,6 +1647,13 @@ export interface components {
1549
1647
  authorize_params: {
1550
1648
  [key: string]: string;
1551
1649
  };
1650
+ /**
1651
+ * @description Controls what happens to `user.email` on subsequent OAuth/federated logins when the user previously changed their email manually through this auth server (i.e. `user.email_change_locked_at` is set).
1652
+ *
1653
+ * - `preserve_manual` (default): the manually-set email wins. The federated provider's email is ignored on re-sync; `email` and `email_verified` are not touched. The identity link stays valid via `provider_user_id`, so the user can still log in with Google/etc.
1654
+ * - `always_sync`: the federated provider's email is always written back, overwriting any manual change. Useful for tenants whose source of truth for identity is the IdP (corporate SSO, etc.).
1655
+ */
1656
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync";
1552
1657
  /** @description Add Metadata */
1553
1658
  metadata?: {
1554
1659
  [key: string]: unknown;
@@ -1558,6 +1663,32 @@ export interface components {
1558
1663
  ConnectionMetadataCreate: {
1559
1664
  [key: string]: unknown;
1560
1665
  };
1666
+ /** @description Partial update for a Connection. Only the supplied fields are modified. `connection_type` is intentionally excluded — changing it would orphan every identity already linked to this connection. */
1667
+ ConnectionUpdate: {
1668
+ connection_name?: string;
1669
+ enabled?: boolean;
1670
+ enabled_clients?: string[];
1671
+ scope?: string[];
1672
+ client_id?: string;
1673
+ client_secret?: string;
1674
+ issuer?: string;
1675
+ authorize_url?: string;
1676
+ token_url?: string;
1677
+ userinfo_url?: string;
1678
+ jwks_url?: string;
1679
+ response_type?: string;
1680
+ /**
1681
+ * @description Authorize params
1682
+ * @default {}
1683
+ */
1684
+ authorize_params: {
1685
+ [key: string]: string;
1686
+ };
1687
+ claims_mapping?: {
1688
+ [key: string]: string;
1689
+ };
1690
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync" | null;
1691
+ };
1561
1692
  /** @description Client */
1562
1693
  Client: {
1563
1694
  /** @description Client ID */
@@ -1623,6 +1754,36 @@ export interface components {
1623
1754
  ClientMetadataCreate: {
1624
1755
  [key: string]: unknown;
1625
1756
  };
1757
+ /** @description Partial update for a Client. Only the supplied fields are modified. `client_id` and `client_secret` are not editable through this endpoint to prevent accidental rotation; use a dedicated endpoint when secret rotation is added. */
1758
+ ClientUpdate: {
1759
+ /** @description Human-readable client name shown in consent screens. */
1760
+ name?: string;
1761
+ /** @description Free-form description for internal admin use. */
1762
+ description?: string;
1763
+ /** @description Whitelist of allowed OAuth `redirect_uri` values. */
1764
+ callbacks?: string[];
1765
+ /** @description Whitelist of allowed `post_logout_redirect_uri` values. */
1766
+ logout_urls?: string[];
1767
+ refresh_token?: {
1768
+ /** @enum {unknown} */
1769
+ expiration_mode: "expire" | "not-expire";
1770
+ infinite_token_lifetime: boolean;
1771
+ token_lifetime: number;
1772
+ };
1773
+ client_uri?: string | null;
1774
+ logo_uri?: string | null;
1775
+ tos_uri?: string | null;
1776
+ policy_uri?: string | null;
1777
+ contacts?: string[];
1778
+ grant_types?: string[];
1779
+ response_types?: string[];
1780
+ token_endpoint_auth_method?: string;
1781
+ application_type?: string;
1782
+ software_id?: string | null;
1783
+ software_version?: string | null;
1784
+ frontchannel_logout_uri?: string | null;
1785
+ frontchannel_logout_session_required?: boolean;
1786
+ };
1626
1787
  /** @description User */
1627
1788
  User: {
1628
1789
  /** @description User ID */
@@ -1646,12 +1807,20 @@ export interface components {
1646
1807
  * @default false
1647
1808
  */
1648
1809
  email_verified: boolean;
1810
+ /** @description How `email_verified` was last set. `manual` — admin flipped the flag via `POST /user/:id`. `verification_flow` — user clicked the verification link. `passwordless_otp` — user completed passwordless OTP login. `team_invite` — user clicked a team invitation link. `email_change` — user confirmed a self-service email change. `federated` — verified by the external IdP on OAuth callback. `null` — the field was cleared (admin un-verified the email). */
1811
+ email_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
1812
+ /** @description ISO 8601 timestamp of when `email_verified` was last flipped to true. */
1813
+ email_verified_at?: string | null;
1649
1814
  /** @description ISO 8601 timestamp of the user's last verified email change. When set, OAuth callbacks will not overwrite `email`/`email_verified` from the federated provider — the manually-chosen email wins. */
1650
1815
  email_change_locked_at?: string | null;
1651
1816
  /** @description contact phone number */
1652
1817
  phone?: string | null;
1653
1818
  /** @description phone is verified */
1654
1819
  phone_verified: boolean;
1820
+ /** @description How `phone_verified` was last set. Same enum as `email_verified_method`. */
1821
+ phone_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
1822
+ /** @description ISO 8601 timestamp of when `phone_verified` was last flipped to true. */
1823
+ phone_verified_at?: string | null;
1655
1824
  /** @description country iso code */
1656
1825
  country_iso?: string | null;
1657
1826
  /** @description user birth_date */
@@ -1792,12 +1961,16 @@ export interface components {
1792
1961
  given_name?: string;
1793
1962
  /** @description family name */
1794
1963
  family_name?: string;
1795
- /** @description contact email */
1964
+ /** @description Contact email. Changing the email to a new value automatically resets `email_verified` to false (and clears `email_verified_method` / `email_verified_at`) unless the same patch sets `email_verified` explicitly. The override is the documented way to import a pre-verified user from another IdP. */
1796
1965
  email?: string;
1966
+ /** @description Flip the email verification flag. Setting `true` marks the email as verified by the admin (`email_verified_method=manual`). Setting `false` clears the verification metadata. */
1967
+ email_verified?: boolean;
1797
1968
  /** @description New password for this user */
1798
1969
  password?: string;
1799
- /** @description contact phone number */
1970
+ /** @description Contact phone number. Changing it to a new value automatically resets `phone_verified` to false (and clears `phone_verified_method` / `phone_verified_at`) unless the same patch sets `phone_verified` explicitly. */
1800
1971
  phone?: string;
1972
+ /** @description Flip the phone verification flag. Setting `true` marks the phone as verified by the admin (`phone_verified_method=manual`). */
1973
+ phone_verified?: boolean;
1801
1974
  /** @description user country as iso string */
1802
1975
  country_iso?: string;
1803
1976
  /** @description user birth_date */
@@ -1833,6 +2006,8 @@ export interface components {
1833
2006
  access_token?: string;
1834
2007
  access_token_secret?: string;
1835
2008
  refresh_token?: string;
2009
+ /** @description ISO 8601 timestamp when the stored provider `access_token` expires. Stamped from the provider `expires_in` on (re-)authorization and refresh. Absent when the provider issues non-expiring tokens. */
2010
+ access_token_expires_at?: string;
1836
2011
  profile_data: unknown;
1837
2012
  /** @description Object is related with this account */
1838
2013
  account: string;
@@ -2138,6 +2313,14 @@ export interface components {
2138
2313
  allow_offline_access: boolean;
2139
2314
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
2140
2315
  skip_consent: boolean;
2316
+ /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
2317
+ include_teams_in_access_token: boolean;
2318
+ /** @description When true, access_tokens issued for this API carry a `roles` claim listing the names of the roles the subject holds across their team memberships within the tenant. */
2319
+ include_roles_in_access_token: boolean;
2320
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. The id_token only sees the flag when the client requested `audience=` so this API is resolved at issuance time. */
2321
+ include_teams_in_id_token: boolean;
2322
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. Same audience caveat as `include_teams_in_id_token`. */
2323
+ include_roles_in_id_token: boolean;
2141
2324
  /** @description Object is related with this account */
2142
2325
  account: string;
2143
2326
  /**
@@ -2190,6 +2373,14 @@ export interface components {
2190
2373
  allow_offline_access?: boolean;
2191
2374
  /** @description When true, skip the consent prompt for first-party clients. */
2192
2375
  skip_consent?: boolean;
2376
+ /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
2377
+ include_teams_in_access_token?: boolean;
2378
+ /** @description When true, access_tokens issued for this API carry a `roles` claim with the subject role names. */
2379
+ include_roles_in_access_token?: boolean;
2380
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. */
2381
+ include_teams_in_id_token?: boolean;
2382
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. */
2383
+ include_roles_in_id_token?: boolean;
2193
2384
  };
2194
2385
  /** @description Partial update for an Api. `identifier` is immutable and not present here; recreate the API if you need to change it. */
2195
2386
  ApiUpdate: {
@@ -2211,6 +2402,14 @@ export interface components {
2211
2402
  allow_offline_access?: boolean;
2212
2403
  /** @description When true, skip the consent prompt for first-party clients. */
2213
2404
  skip_consent?: boolean;
2405
+ /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
2406
+ include_teams_in_access_token?: boolean;
2407
+ /** @description When true, access_tokens issued for this API carry a `roles` claim with the subject role names. */
2408
+ include_roles_in_access_token?: boolean;
2409
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. */
2410
+ include_teams_in_id_token?: boolean;
2411
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. */
2412
+ include_roles_in_id_token?: boolean;
2214
2413
  };
2215
2414
  /** @description Action */
2216
2415
  Action: {
@@ -2559,6 +2758,17 @@ export interface components {
2559
2758
  message?: string;
2560
2759
  /** @description Type-specific structured payload */
2561
2760
  data?: unknown;
2761
+ user?: components["schemas"]["User"] | string | unknown;
2762
+ client?: components["schemas"]["Client"] | string | unknown;
2763
+ connection?: components["schemas"]["Connection"] | string | unknown;
2764
+ team?: components["schemas"]["Team"] | string | unknown;
2765
+ identity?: components["schemas"]["Identity"] | string | unknown;
2766
+ ticket?: string;
2767
+ /**
2768
+ * Format: date-time
2769
+ * @description When this log row will be auto-deleted by the Mongo TTL monitor. Absent on rows recorded without `ttl_seconds`.
2770
+ */
2771
+ expires_at?: string;
2562
2772
  /** @description Object is related with this account */
2563
2773
  account: string;
2564
2774
  /**
@@ -2714,6 +2924,18 @@ export interface components {
2714
2924
  callback_hostnames?: string[];
2715
2925
  default_connection?: string | null;
2716
2926
  enabled_locales?: string[];
2927
+ notification_settings?: {
2928
+ /**
2929
+ * @description Send the built-in welcome email on user.created
2930
+ * @default false
2931
+ */
2932
+ welcome_email_enabled: boolean;
2933
+ /**
2934
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
2935
+ * @default false
2936
+ */
2937
+ verify_email_auto_send: boolean;
2938
+ };
2717
2939
  };
2718
2940
  OAuthTokenParams: {
2719
2941
  /** @description Grant Type. https://oauth.net/2/grant-types/ */
@@ -2730,8 +2952,10 @@ export interface components {
2730
2952
  subject_token_type?: string;
2731
2953
  /** @description The device code returned by the authorization server. */
2732
2954
  device_code?: string;
2733
- /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
2955
+ /** @description Auth0-compatible alias for `resource` (RFC 8707). When both are provided they must match. */
2734
2956
  audience?: string;
2957
+ /** @description RFC 8707 Resource Indicator. Absolute URI of the target Api, no fragment. Matched against `Api.identifier` in the tenant. */
2958
+ resource?: string;
2735
2959
  } & {
2736
2960
  [key: string]: unknown;
2737
2961
  };
@@ -2757,8 +2981,10 @@ export interface components {
2757
2981
  /** @description OIDC §3.1.2.1 — maximum allowable elapsed time in seconds since the last End-User authentication. If exceeded, the OP re-authenticates and `auth_time` is REQUIRED in the resulting id_token. */
2758
2982
  max_age?: number;
2759
2983
  prompt?: string;
2760
- /** @description Resource Indicator (RFC 8707). Identifier of the Api the client wants to access. Persisted in the auth state so the token issued at /oauth/token targets the matching Api resource and its `aud` claim is set to this value. */
2984
+ /** @description Auth0-compatible alias for `resource` (RFC 8707). When both are sent they must match. Identifier of the Api the client wants to access; persisted in the auth state so the token issued at /oauth/token targets the matching Api resource. */
2761
2985
  audience?: string;
2986
+ /** @description RFC 8707 Resource Indicator. MUST be an absolute URI without fragment. When matched against a registered Api in the tenant the issued access_token gets `aud = <api.identifier>`. */
2987
+ resource?: string;
2762
2988
  };
2763
2989
  LoginCallbackBody: {
2764
2990
  /** @description is always wsignin1.0 */
@@ -2817,6 +3043,11 @@ export interface operations {
2817
3043
  * @default false
2818
3044
  */
2819
3045
  welcome_email_enabled: boolean;
3046
+ /**
3047
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
3048
+ * @default false
3049
+ */
3050
+ verify_email_auto_send: boolean;
2820
3051
  };
2821
3052
  /** @description Policy for the user email-change flow. `new_only` (default) sends a single confirmation link to the new email. `old_and_new` requires the user to also click a link sent to the previous email before the swap takes effect — stricter, useful for tenants with higher-risk users. */
2822
3053
  email_change_verification_mode?: "new_only" | "old_and_new";
@@ -2923,6 +3154,11 @@ export interface operations {
2923
3154
  * @default false
2924
3155
  */
2925
3156
  welcome_email_enabled: boolean;
3157
+ /**
3158
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
3159
+ * @default false
3160
+ */
3161
+ verify_email_auto_send: boolean;
2926
3162
  };
2927
3163
  /** @description Policy for the user email-change flow. `new_only` (default) sends a single confirmation link to the new email. `old_and_new` requires the user to also click a link sent to the previous email before the swap takes effect — stricter, useful for tenants with higher-risk users. */
2928
3164
  email_change_verification_mode?: "new_only" | "old_and_new";
@@ -2984,6 +3220,11 @@ export interface operations {
2984
3220
  * @default false
2985
3221
  */
2986
3222
  welcome_email_enabled: boolean;
3223
+ /**
3224
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
3225
+ * @default false
3226
+ */
3227
+ verify_email_auto_send: boolean;
2987
3228
  };
2988
3229
  /** @description Policy for the user email-change flow. `new_only` (default) sends a single confirmation link to the new email. `old_and_new` requires the user to also click a link sent to the previous email before the swap takes effect — stricter, useful for tenants with higher-risk users. */
2989
3230
  email_change_verification_mode?: "new_only" | "old_and_new";
@@ -3021,6 +3262,18 @@ export interface operations {
3021
3262
  callback_hostnames?: string[];
3022
3263
  default_connection?: string | null;
3023
3264
  enabled_locales?: string[];
3265
+ notification_settings?: {
3266
+ /**
3267
+ * @description Send the built-in welcome email on user.created
3268
+ * @default false
3269
+ */
3270
+ welcome_email_enabled?: boolean;
3271
+ /**
3272
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
3273
+ * @default false
3274
+ */
3275
+ verify_email_auto_send?: boolean;
3276
+ };
3024
3277
  };
3025
3278
  };
3026
3279
  };
@@ -3053,6 +3306,11 @@ export interface operations {
3053
3306
  * @default false
3054
3307
  */
3055
3308
  welcome_email_enabled: boolean;
3309
+ /**
3310
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
3311
+ * @default false
3312
+ */
3313
+ verify_email_auto_send: boolean;
3056
3314
  };
3057
3315
  /** @description Policy for the user email-change flow. `new_only` (default) sends a single confirmation link to the new email. `old_and_new` requires the user to also click a link sent to the previous email before the swap takes effect — stricter, useful for tenants with higher-risk users. */
3058
3316
  email_change_verification_mode?: "new_only" | "old_and_new";
@@ -3123,6 +3381,11 @@ export interface operations {
3123
3381
  * @default false
3124
3382
  */
3125
3383
  welcome_email_enabled: boolean;
3384
+ /**
3385
+ * @description Send a verification email automatically when a user is created with `email_verified=false` and an email address. The link in the email lands on `GET /verify-email?ticket=...` and flips `email_verified=true` with `email_verified_method=verification_flow`. When `false`, verification emails must be requested explicitly via `POST /user/:id/verify-email/start`.
3386
+ * @default false
3387
+ */
3388
+ verify_email_auto_send: boolean;
3126
3389
  };
3127
3390
  /** @description Policy for the user email-change flow. `new_only` (default) sends a single confirmation link to the new email. `old_and_new` requires the user to also click a link sent to the previous email before the swap takes effect — stricter, useful for tenants with higher-risk users. */
3128
3391
  email_change_verification_mode?: "new_only" | "old_and_new";
@@ -3145,14 +3408,16 @@ export interface operations {
3145
3408
  "connection/list": {
3146
3409
  parameters: {
3147
3410
  query?: {
3148
- /** @description Start from this cursor */
3411
+ /** @description Number of items per page (max 200) */
3412
+ pageSize?: number;
3413
+ /** @description Cursor for next page */
3149
3414
  cursor?: string;
3150
- /** @description Start from this cursor */
3415
+ /** @description Cursor returned by the previous page */
3151
3416
  next?: string;
3152
- /** @description Size of the results array */
3153
- pageSize?: number;
3154
3417
  /** @description Filter using a FaableQL query */
3155
3418
  query?: string;
3419
+ /** @description Full-text search across: `connection_name`, `connection_type`. */
3420
+ q?: string;
3156
3421
  };
3157
3422
  header?: never;
3158
3423
  path?: never;
@@ -3160,16 +3425,14 @@ export interface operations {
3160
3425
  };
3161
3426
  requestBody?: never;
3162
3427
  responses: {
3163
- /** @description PaginatedResponse */
3428
+ /** @description Default Response */
3164
3429
  200: {
3165
3430
  headers: {
3166
3431
  [name: string]: unknown;
3167
3432
  };
3168
3433
  content: {
3169
3434
  "application/json": {
3170
- /** @description next cursor */
3171
3435
  next: string | null;
3172
- /** @description List of results */
3173
3436
  results: components["schemas"]["Connection"][];
3174
3437
  };
3175
3438
  };
@@ -3207,6 +3470,13 @@ export interface operations {
3207
3470
  authorize_params?: {
3208
3471
  [key: string]: string;
3209
3472
  };
3473
+ /**
3474
+ * @description Controls what happens to `user.email` on subsequent OAuth/federated logins when the user previously changed their email manually through this auth server (i.e. `user.email_change_locked_at` is set).
3475
+ *
3476
+ * - `preserve_manual` (default): the manually-set email wins. The federated provider's email is ignored on re-sync; `email` and `email_verified` are not touched. The identity link stays valid via `provider_user_id`, so the user can still log in with Google/etc.
3477
+ * - `always_sync`: the federated provider's email is always written back, overwriting any manual change. Useful for tenants whose source of truth for identity is the IdP (corporate SSO, etc.).
3478
+ */
3479
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync";
3210
3480
  /** @description Add Metadata */
3211
3481
  metadata?: {
3212
3482
  [key: string]: unknown;
@@ -3255,6 +3525,13 @@ export interface operations {
3255
3525
  authorize_params: {
3256
3526
  [key: string]: string;
3257
3527
  };
3528
+ claims_mapping?: {
3529
+ [key: string]: string;
3530
+ };
3531
+ /** @description Derived: true when the connection_type has shared Faable defaults AND the tenant has not set its own client_id/client_secret. Read-only — set by the server on every read. */
3532
+ readonly is_using_default_credentials: boolean;
3533
+ /** @description Per-connection override of `Account.email_oauth_sync_policy`. When set on a Connection, takes precedence over the Account-level setting for logins through this IdP. When unset (default), the Account-level policy applies. Use this to allow `always_sync` for a trusted IdP (e.g. corporate SSO) while keeping `preserve_manual` for others within the same tenant. */
3534
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync";
3258
3535
  /** @description Object is related with this account */
3259
3536
  account: string;
3260
3537
  /**
@@ -3324,6 +3601,13 @@ export interface operations {
3324
3601
  authorize_params: {
3325
3602
  [key: string]: string;
3326
3603
  };
3604
+ claims_mapping?: {
3605
+ [key: string]: string;
3606
+ };
3607
+ /** @description Derived: true when the connection_type has shared Faable defaults AND the tenant has not set its own client_id/client_secret. Read-only — set by the server on every read. */
3608
+ readonly is_using_default_credentials: boolean;
3609
+ /** @description Per-connection override of `Account.email_oauth_sync_policy`. When set on a Connection, takes precedence over the Account-level setting for logins through this IdP. When unset (default), the Account-level policy applies. Use this to allow `always_sync` for a trusted IdP (e.g. corporate SSO) while keeping `preserve_manual` for others within the same tenant. */
3610
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync";
3327
3611
  /** @description Object is related with this account */
3328
3612
  account: string;
3329
3613
  /**
@@ -3342,7 +3626,7 @@ export interface operations {
3342
3626
  };
3343
3627
  };
3344
3628
  };
3345
- "connection/remove": {
3629
+ "connection/update": {
3346
3630
  parameters: {
3347
3631
  query?: never;
3348
3632
  header?: never;
@@ -3351,68 +3635,229 @@ export interface operations {
3351
3635
  };
3352
3636
  cookie?: never;
3353
3637
  };
3354
- requestBody?: never;
3355
- responses: {
3356
- /** @description Default Response */
3357
- 200: {
3358
- headers: {
3359
- [name: string]: unknown;
3638
+ /** @description Partial update for a Connection. Only the supplied fields are modified. `connection_type` is intentionally excluded — changing it would orphan every identity already linked to this connection. */
3639
+ requestBody: {
3640
+ content: {
3641
+ "application/json": {
3642
+ connection_name?: string;
3643
+ enabled?: boolean;
3644
+ enabled_clients?: string[];
3645
+ scope?: string[];
3646
+ client_id?: string;
3647
+ client_secret?: string;
3648
+ issuer?: string;
3649
+ authorize_url?: string;
3650
+ token_url?: string;
3651
+ userinfo_url?: string;
3652
+ jwks_url?: string;
3653
+ response_type?: string;
3654
+ /**
3655
+ * @description Authorize params
3656
+ * @default {}
3657
+ */
3658
+ authorize_params?: {
3659
+ [key: string]: string;
3660
+ };
3661
+ claims_mapping?: {
3662
+ [key: string]: string;
3663
+ };
3664
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync" | null;
3360
3665
  };
3361
- content?: never;
3362
- };
3363
- };
3364
- };
3365
- "client/list": {
3366
- parameters: {
3367
- query?: {
3368
- /** @description Start from this cursor */
3369
- cursor?: string;
3370
- /** @description Start from this cursor */
3371
- next?: string;
3372
- /** @description Size of the results array */
3373
- pageSize?: number;
3374
- /** @description Filter using a FaableQL query */
3375
- query?: string;
3376
3666
  };
3377
- header?: never;
3378
- path?: never;
3379
- cookie?: never;
3380
3667
  };
3381
- requestBody?: never;
3382
3668
  responses: {
3383
- /** @description PaginatedResponse */
3669
+ /** @description Connection */
3384
3670
  200: {
3385
3671
  headers: {
3386
3672
  [name: string]: unknown;
3387
3673
  };
3388
3674
  content: {
3389
3675
  "application/json": {
3390
- /** @description next cursor */
3391
- next: string | null;
3392
- /** @description List of results */
3393
- results: components["schemas"]["Client"][];
3394
- };
3395
- };
3396
- };
3397
- };
3398
- };
3399
- "client/create": {
3400
- parameters: {
3401
- query?: never;
3402
- header?: never;
3403
- path?: never;
3404
- cookie?: never;
3405
- };
3406
- /** @description ClientCreate */
3407
- requestBody: {
3408
- content: {
3409
- "application/json": {
3410
- name: string;
3411
- description?: string;
3412
- callbacks?: string[];
3413
- logout_urls?: string[];
3414
- /** @description Add Metadata */
3415
- metadata?: {
3676
+ /** @description Connection ID */
3677
+ id: string;
3678
+ connection_name: string;
3679
+ /** @enum {unknown} */
3680
+ connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc" | "passwordless_email";
3681
+ /** @default null */
3682
+ authorize_url: string;
3683
+ /** @default null */
3684
+ token_url: string;
3685
+ /** @default null */
3686
+ userinfo_url: string;
3687
+ /** @default null */
3688
+ client_id: string;
3689
+ /** @default null */
3690
+ client_secret: string;
3691
+ /** @default null */
3692
+ issuer: string;
3693
+ /** @default null */
3694
+ jwks_url: string;
3695
+ /** @default null */
3696
+ response_type: string;
3697
+ enabled: boolean;
3698
+ /** @default null */
3699
+ enabled_clients: string[] | null;
3700
+ /** @default [] */
3701
+ scope: string[];
3702
+ /**
3703
+ * @description Authorize params
3704
+ * @default {}
3705
+ */
3706
+ authorize_params: {
3707
+ [key: string]: string;
3708
+ };
3709
+ claims_mapping?: {
3710
+ [key: string]: string;
3711
+ };
3712
+ /** @description Derived: true when the connection_type has shared Faable defaults AND the tenant has not set its own client_id/client_secret. Read-only — set by the server on every read. */
3713
+ readonly is_using_default_credentials: boolean;
3714
+ /** @description Per-connection override of `Account.email_oauth_sync_policy`. When set on a Connection, takes precedence over the Account-level setting for logins through this IdP. When unset (default), the Account-level policy applies. Use this to allow `always_sync` for a trusted IdP (e.g. corporate SSO) while keeping `preserve_manual` for others within the same tenant. */
3715
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync";
3716
+ /** @description Object is related with this account */
3717
+ account: string;
3718
+ /**
3719
+ * @description ConnectionMetadata
3720
+ * @default {}
3721
+ */
3722
+ metadata: {
3723
+ [key: string]: unknown;
3724
+ };
3725
+ /** @description Connection creation date */
3726
+ createdAt: string;
3727
+ /** @description Connection updated date */
3728
+ updatedAt?: string;
3729
+ };
3730
+ };
3731
+ };
3732
+ };
3733
+ };
3734
+ "connection/delete": {
3735
+ parameters: {
3736
+ query?: never;
3737
+ header?: never;
3738
+ path: {
3739
+ connection_id: string;
3740
+ };
3741
+ cookie?: never;
3742
+ };
3743
+ requestBody?: never;
3744
+ responses: {
3745
+ /** @description Connection */
3746
+ 200: {
3747
+ headers: {
3748
+ [name: string]: unknown;
3749
+ };
3750
+ content: {
3751
+ "application/json": {
3752
+ /** @description Connection ID */
3753
+ id: string;
3754
+ connection_name: string;
3755
+ /** @enum {unknown} */
3756
+ connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc" | "passwordless_email";
3757
+ /** @default null */
3758
+ authorize_url: string;
3759
+ /** @default null */
3760
+ token_url: string;
3761
+ /** @default null */
3762
+ userinfo_url: string;
3763
+ /** @default null */
3764
+ client_id: string;
3765
+ /** @default null */
3766
+ client_secret: string;
3767
+ /** @default null */
3768
+ issuer: string;
3769
+ /** @default null */
3770
+ jwks_url: string;
3771
+ /** @default null */
3772
+ response_type: string;
3773
+ enabled: boolean;
3774
+ /** @default null */
3775
+ enabled_clients: string[] | null;
3776
+ /** @default [] */
3777
+ scope: string[];
3778
+ /**
3779
+ * @description Authorize params
3780
+ * @default {}
3781
+ */
3782
+ authorize_params: {
3783
+ [key: string]: string;
3784
+ };
3785
+ claims_mapping?: {
3786
+ [key: string]: string;
3787
+ };
3788
+ /** @description Derived: true when the connection_type has shared Faable defaults AND the tenant has not set its own client_id/client_secret. Read-only — set by the server on every read. */
3789
+ readonly is_using_default_credentials: boolean;
3790
+ /** @description Per-connection override of `Account.email_oauth_sync_policy`. When set on a Connection, takes precedence over the Account-level setting for logins through this IdP. When unset (default), the Account-level policy applies. Use this to allow `always_sync` for a trusted IdP (e.g. corporate SSO) while keeping `preserve_manual` for others within the same tenant. */
3791
+ email_oauth_sync_policy?: "preserve_manual" | "always_sync";
3792
+ /** @description Object is related with this account */
3793
+ account: string;
3794
+ /**
3795
+ * @description ConnectionMetadata
3796
+ * @default {}
3797
+ */
3798
+ metadata: {
3799
+ [key: string]: unknown;
3800
+ };
3801
+ /** @description Connection creation date */
3802
+ createdAt: string;
3803
+ /** @description Connection updated date */
3804
+ updatedAt?: string;
3805
+ };
3806
+ };
3807
+ };
3808
+ };
3809
+ };
3810
+ "client/list": {
3811
+ parameters: {
3812
+ query?: {
3813
+ /** @description Number of items per page (max 200) */
3814
+ pageSize?: number;
3815
+ /** @description Cursor for next page */
3816
+ cursor?: string;
3817
+ /** @description Cursor returned by the previous page */
3818
+ next?: string;
3819
+ /** @description Filter using a FaableQL query */
3820
+ query?: string;
3821
+ /** @description Full-text search across: `name`, `description`, `client_id`. */
3822
+ q?: string;
3823
+ };
3824
+ header?: never;
3825
+ path?: never;
3826
+ cookie?: never;
3827
+ };
3828
+ requestBody?: never;
3829
+ responses: {
3830
+ /** @description Default Response */
3831
+ 200: {
3832
+ headers: {
3833
+ [name: string]: unknown;
3834
+ };
3835
+ content: {
3836
+ "application/json": {
3837
+ next: string | null;
3838
+ results: components["schemas"]["Client"][];
3839
+ };
3840
+ };
3841
+ };
3842
+ };
3843
+ };
3844
+ "client/create": {
3845
+ parameters: {
3846
+ query?: never;
3847
+ header?: never;
3848
+ path?: never;
3849
+ cookie?: never;
3850
+ };
3851
+ /** @description ClientCreate */
3852
+ requestBody: {
3853
+ content: {
3854
+ "application/json": {
3855
+ name: string;
3856
+ description?: string;
3857
+ callbacks?: string[];
3858
+ logout_urls?: string[];
3859
+ /** @description Add Metadata */
3860
+ metadata?: {
3416
3861
  [key: string]: unknown;
3417
3862
  };
3418
3863
  };
@@ -3534,7 +3979,103 @@ export interface operations {
3534
3979
  };
3535
3980
  };
3536
3981
  };
3537
- "client/remove": {
3982
+ "client/update": {
3983
+ parameters: {
3984
+ query?: never;
3985
+ header?: never;
3986
+ path: {
3987
+ client_id: string;
3988
+ };
3989
+ cookie?: never;
3990
+ };
3991
+ /** @description Partial update for a Client. Only the supplied fields are modified. `client_id` and `client_secret` are not editable through this endpoint to prevent accidental rotation; use a dedicated endpoint when secret rotation is added. */
3992
+ requestBody: {
3993
+ content: {
3994
+ "application/json": {
3995
+ /** @description Human-readable client name shown in consent screens. */
3996
+ name?: string;
3997
+ /** @description Free-form description for internal admin use. */
3998
+ description?: string;
3999
+ /** @description Whitelist of allowed OAuth `redirect_uri` values. */
4000
+ callbacks?: string[];
4001
+ /** @description Whitelist of allowed `post_logout_redirect_uri` values. */
4002
+ logout_urls?: string[];
4003
+ refresh_token?: {
4004
+ /** @enum {unknown} */
4005
+ expiration_mode: "expire" | "not-expire";
4006
+ infinite_token_lifetime: boolean;
4007
+ token_lifetime: number;
4008
+ };
4009
+ client_uri?: string | null;
4010
+ logo_uri?: string | null;
4011
+ tos_uri?: string | null;
4012
+ policy_uri?: string | null;
4013
+ contacts?: string[];
4014
+ grant_types?: string[];
4015
+ response_types?: string[];
4016
+ token_endpoint_auth_method?: string;
4017
+ application_type?: string;
4018
+ software_id?: string | null;
4019
+ software_version?: string | null;
4020
+ frontchannel_logout_uri?: string | null;
4021
+ frontchannel_logout_session_required?: boolean;
4022
+ };
4023
+ };
4024
+ };
4025
+ responses: {
4026
+ /** @description Client */
4027
+ 200: {
4028
+ headers: {
4029
+ [name: string]: unknown;
4030
+ };
4031
+ content: {
4032
+ "application/json": {
4033
+ /** @description Client ID */
4034
+ id: string;
4035
+ name: string;
4036
+ description: string;
4037
+ client_id: string;
4038
+ client_secret: string;
4039
+ callbacks: string[];
4040
+ logout_urls: string[];
4041
+ refresh_token: {
4042
+ /** @enum {unknown} */
4043
+ expiration_mode: "expire" | "not-expire";
4044
+ infinite_token_lifetime: boolean;
4045
+ token_lifetime: number;
4046
+ };
4047
+ client_uri?: string | null;
4048
+ logo_uri?: string | null;
4049
+ tos_uri?: string | null;
4050
+ policy_uri?: string | null;
4051
+ contacts?: string[];
4052
+ grant_types?: string[];
4053
+ response_types?: string[];
4054
+ token_endpoint_auth_method?: string;
4055
+ application_type?: string;
4056
+ software_id?: string | null;
4057
+ software_version?: string | null;
4058
+ frontchannel_logout_uri?: string | null;
4059
+ frontchannel_logout_session_required?: boolean;
4060
+ /** @description Object is related with this account */
4061
+ account: string;
4062
+ /**
4063
+ * @description ClientMetadata
4064
+ * @default {}
4065
+ */
4066
+ metadata: {
4067
+ [key: string]: unknown;
4068
+ };
4069
+ /** @description Client creation date */
4070
+ createdAt: string;
4071
+ /** @description Client updated date */
4072
+ updatedAt?: string;
4073
+ };
4074
+ };
4075
+ };
4076
+ };
4077
+ };
4078
+ "client/delete": {
3538
4079
  parameters: {
3539
4080
  query?: never;
3540
4081
  header?: never;
@@ -3545,26 +4086,134 @@ export interface operations {
3545
4086
  };
3546
4087
  requestBody?: never;
3547
4088
  responses: {
3548
- /** @description Default Response */
4089
+ /** @description Client */
3549
4090
  200: {
3550
4091
  headers: {
3551
4092
  [name: string]: unknown;
3552
4093
  };
3553
- content?: never;
4094
+ content: {
4095
+ "application/json": {
4096
+ /** @description Client ID */
4097
+ id: string;
4098
+ name: string;
4099
+ description: string;
4100
+ client_id: string;
4101
+ client_secret: string;
4102
+ callbacks: string[];
4103
+ logout_urls: string[];
4104
+ refresh_token: {
4105
+ /** @enum {unknown} */
4106
+ expiration_mode: "expire" | "not-expire";
4107
+ infinite_token_lifetime: boolean;
4108
+ token_lifetime: number;
4109
+ };
4110
+ client_uri?: string | null;
4111
+ logo_uri?: string | null;
4112
+ tos_uri?: string | null;
4113
+ policy_uri?: string | null;
4114
+ contacts?: string[];
4115
+ grant_types?: string[];
4116
+ response_types?: string[];
4117
+ token_endpoint_auth_method?: string;
4118
+ application_type?: string;
4119
+ software_id?: string | null;
4120
+ software_version?: string | null;
4121
+ frontchannel_logout_uri?: string | null;
4122
+ frontchannel_logout_session_required?: boolean;
4123
+ /** @description Object is related with this account */
4124
+ account: string;
4125
+ /**
4126
+ * @description ClientMetadata
4127
+ * @default {}
4128
+ */
4129
+ metadata: {
4130
+ [key: string]: unknown;
4131
+ };
4132
+ /** @description Client creation date */
4133
+ createdAt: string;
4134
+ /** @description Client updated date */
4135
+ updatedAt?: string;
4136
+ };
4137
+ };
4138
+ };
4139
+ };
4140
+ };
4141
+ "client/rotateSecret": {
4142
+ parameters: {
4143
+ query?: never;
4144
+ header?: never;
4145
+ path: {
4146
+ client_id: string;
4147
+ };
4148
+ cookie?: never;
4149
+ };
4150
+ requestBody?: never;
4151
+ responses: {
4152
+ /** @description Client */
4153
+ 200: {
4154
+ headers: {
4155
+ [name: string]: unknown;
4156
+ };
4157
+ content: {
4158
+ "application/json": {
4159
+ /** @description Client ID */
4160
+ id: string;
4161
+ name: string;
4162
+ description: string;
4163
+ client_id: string;
4164
+ client_secret: string;
4165
+ callbacks: string[];
4166
+ logout_urls: string[];
4167
+ refresh_token: {
4168
+ /** @enum {unknown} */
4169
+ expiration_mode: "expire" | "not-expire";
4170
+ infinite_token_lifetime: boolean;
4171
+ token_lifetime: number;
4172
+ };
4173
+ client_uri?: string | null;
4174
+ logo_uri?: string | null;
4175
+ tos_uri?: string | null;
4176
+ policy_uri?: string | null;
4177
+ contacts?: string[];
4178
+ grant_types?: string[];
4179
+ response_types?: string[];
4180
+ token_endpoint_auth_method?: string;
4181
+ application_type?: string;
4182
+ software_id?: string | null;
4183
+ software_version?: string | null;
4184
+ frontchannel_logout_uri?: string | null;
4185
+ frontchannel_logout_session_required?: boolean;
4186
+ /** @description Object is related with this account */
4187
+ account: string;
4188
+ /**
4189
+ * @description ClientMetadata
4190
+ * @default {}
4191
+ */
4192
+ metadata: {
4193
+ [key: string]: unknown;
4194
+ };
4195
+ /** @description Client creation date */
4196
+ createdAt: string;
4197
+ /** @description Client updated date */
4198
+ updatedAt?: string;
4199
+ };
4200
+ };
3554
4201
  };
3555
4202
  };
3556
4203
  };
3557
4204
  "user/list": {
3558
4205
  parameters: {
3559
4206
  query?: {
3560
- /** @description Start from this cursor */
4207
+ /** @description Number of items per page (max 200) */
4208
+ pageSize?: number;
4209
+ /** @description Cursor for next page */
3561
4210
  cursor?: string;
3562
- /** @description Start from this cursor */
4211
+ /** @description Cursor returned by the previous page */
3563
4212
  next?: string;
3564
- /** @description Size of the results array */
3565
- pageSize?: number;
3566
4213
  /** @description Filter using a FaableQL query */
3567
4214
  query?: string;
4215
+ /** @description Full-text search across: `name`, `email`, `phone`. */
4216
+ q?: string;
3568
4217
  };
3569
4218
  header?: never;
3570
4219
  path?: never;
@@ -3572,16 +4221,14 @@ export interface operations {
3572
4221
  };
3573
4222
  requestBody?: never;
3574
4223
  responses: {
3575
- /** @description PaginatedResponse */
4224
+ /** @description Default Response */
3576
4225
  200: {
3577
4226
  headers: {
3578
4227
  [name: string]: unknown;
3579
4228
  };
3580
4229
  content: {
3581
4230
  "application/json": {
3582
- /** @description next cursor */
3583
4231
  next: string | null;
3584
- /** @description List of results */
3585
4232
  results: components["schemas"]["User"][];
3586
4233
  };
3587
4234
  };
@@ -3657,12 +4304,20 @@ export interface operations {
3657
4304
  * @default false
3658
4305
  */
3659
4306
  email_verified: boolean;
4307
+ /** @description How `email_verified` was last set. `manual` — admin flipped the flag via `POST /user/:id`. `verification_flow` — user clicked the verification link. `passwordless_otp` — user completed passwordless OTP login. `team_invite` — user clicked a team invitation link. `email_change` — user confirmed a self-service email change. `federated` — verified by the external IdP on OAuth callback. `null` — the field was cleared (admin un-verified the email). */
4308
+ email_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4309
+ /** @description ISO 8601 timestamp of when `email_verified` was last flipped to true. */
4310
+ email_verified_at?: string | null;
3660
4311
  /** @description ISO 8601 timestamp of the user's last verified email change. When set, OAuth callbacks will not overwrite `email`/`email_verified` from the federated provider — the manually-chosen email wins. */
3661
4312
  email_change_locked_at?: string | null;
3662
4313
  /** @description contact phone number */
3663
4314
  phone?: string | null;
3664
4315
  /** @description phone is verified */
3665
4316
  phone_verified: boolean;
4317
+ /** @description How `phone_verified` was last set. Same enum as `email_verified_method`. */
4318
+ phone_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4319
+ /** @description ISO 8601 timestamp of when `phone_verified` was last flipped to true. */
4320
+ phone_verified_at?: string | null;
3666
4321
  /** @description country iso code */
3667
4322
  country_iso?: string | null;
3668
4323
  /** @description user birth_date */
@@ -3768,12 +4423,20 @@ export interface operations {
3768
4423
  * @default false
3769
4424
  */
3770
4425
  email_verified: boolean;
4426
+ /** @description How `email_verified` was last set. `manual` — admin flipped the flag via `POST /user/:id`. `verification_flow` — user clicked the verification link. `passwordless_otp` — user completed passwordless OTP login. `team_invite` — user clicked a team invitation link. `email_change` — user confirmed a self-service email change. `federated` — verified by the external IdP on OAuth callback. `null` — the field was cleared (admin un-verified the email). */
4427
+ email_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4428
+ /** @description ISO 8601 timestamp of when `email_verified` was last flipped to true. */
4429
+ email_verified_at?: string | null;
3771
4430
  /** @description ISO 8601 timestamp of the user's last verified email change. When set, OAuth callbacks will not overwrite `email`/`email_verified` from the federated provider — the manually-chosen email wins. */
3772
4431
  email_change_locked_at?: string | null;
3773
4432
  /** @description contact phone number */
3774
4433
  phone?: string | null;
3775
4434
  /** @description phone is verified */
3776
4435
  phone_verified: boolean;
4436
+ /** @description How `phone_verified` was last set. Same enum as `email_verified_method`. */
4437
+ phone_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4438
+ /** @description ISO 8601 timestamp of when `phone_verified` was last flipped to true. */
4439
+ phone_verified_at?: string | null;
3777
4440
  /** @description country iso code */
3778
4441
  country_iso?: string | null;
3779
4442
  /** @description user birth_date */
@@ -3859,12 +4522,16 @@ export interface operations {
3859
4522
  given_name?: string;
3860
4523
  /** @description family name */
3861
4524
  family_name?: string;
3862
- /** @description contact email */
4525
+ /** @description Contact email. Changing the email to a new value automatically resets `email_verified` to false (and clears `email_verified_method` / `email_verified_at`) unless the same patch sets `email_verified` explicitly. The override is the documented way to import a pre-verified user from another IdP. */
3863
4526
  email?: string;
4527
+ /** @description Flip the email verification flag. Setting `true` marks the email as verified by the admin (`email_verified_method=manual`). Setting `false` clears the verification metadata. */
4528
+ email_verified?: boolean;
3864
4529
  /** @description New password for this user */
3865
4530
  password?: string;
3866
- /** @description contact phone number */
4531
+ /** @description Contact phone number. Changing it to a new value automatically resets `phone_verified` to false (and clears `phone_verified_method` / `phone_verified_at`) unless the same patch sets `phone_verified` explicitly. */
3867
4532
  phone?: string;
4533
+ /** @description Flip the phone verification flag. Setting `true` marks the phone as verified by the admin (`phone_verified_method=manual`). */
4534
+ phone_verified?: boolean;
3868
4535
  /** @description user country as iso string */
3869
4536
  country_iso?: string;
3870
4537
  /** @description user birth_date */
@@ -3913,12 +4580,139 @@ export interface operations {
3913
4580
  * @default false
3914
4581
  */
3915
4582
  email_verified: boolean;
4583
+ /** @description How `email_verified` was last set. `manual` — admin flipped the flag via `POST /user/:id`. `verification_flow` — user clicked the verification link. `passwordless_otp` — user completed passwordless OTP login. `team_invite` — user clicked a team invitation link. `email_change` — user confirmed a self-service email change. `federated` — verified by the external IdP on OAuth callback. `null` — the field was cleared (admin un-verified the email). */
4584
+ email_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4585
+ /** @description ISO 8601 timestamp of when `email_verified` was last flipped to true. */
4586
+ email_verified_at?: string | null;
4587
+ /** @description ISO 8601 timestamp of the user's last verified email change. When set, OAuth callbacks will not overwrite `email`/`email_verified` from the federated provider — the manually-chosen email wins. */
4588
+ email_change_locked_at?: string | null;
4589
+ /** @description contact phone number */
4590
+ phone?: string | null;
4591
+ /** @description phone is verified */
4592
+ phone_verified: boolean;
4593
+ /** @description How `phone_verified` was last set. Same enum as `email_verified_method`. */
4594
+ phone_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4595
+ /** @description ISO 8601 timestamp of when `phone_verified` was last flipped to true. */
4596
+ phone_verified_at?: string | null;
4597
+ /** @description country iso code */
4598
+ country_iso?: string | null;
4599
+ /** @description user birth_date */
4600
+ birth_date?: string | null;
4601
+ /** @description User gender (free-form, OIDC §5.1) */
4602
+ gender?: string | null;
4603
+ /** @description IANA time-zone name (e.g. "Europe/Madrid"). OIDC §5.1 — used for the `zoneinfo` claim. */
4604
+ zoneinfo?: string | null;
4605
+ /** @description user main language */
4606
+ locale?: string;
4607
+ /** @description customer region */
4608
+ region?: string | null;
4609
+ /** @description URL of the User's personal Web page or blog (OIDC §5.1) */
4610
+ website?: string | null;
4611
+ address?: {
4612
+ /** @description Full mailing address, formatted for display (may contain newlines) */
4613
+ formatted?: string | null;
4614
+ street_address?: string | null;
4615
+ /** @description City or locality */
4616
+ locality?: string | null;
4617
+ /** @description State, province, or region */
4618
+ region?: string | null;
4619
+ postal_code?: string | null;
4620
+ /** @description Country name */
4621
+ country?: string | null;
4622
+ } | null;
4623
+ /** @description User picture url */
4624
+ picture?: string | null;
4625
+ /** @description Total number of logins this user has performed. */
4626
+ logins_count: number;
4627
+ /** @description Last IP address from which this user logged in */
4628
+ last_ip?: string | null;
4629
+ /** @description Last date and time this user logged in (ISO_8601 format) */
4630
+ last_login?: string | null;
4631
+ /**
4632
+ * @description User Metadata
4633
+ * @default {}
4634
+ */
4635
+ user_metadata: {
4636
+ [key: string]: unknown;
4637
+ };
4638
+ /**
4639
+ * @description App Metadata
4640
+ * @default {}
4641
+ */
4642
+ app_metadata: {
4643
+ [key: string]: unknown;
4644
+ };
4645
+ /** @description Object is related with this account */
4646
+ account: string;
4647
+ /**
4648
+ * @description UserMetadata
4649
+ * @default {}
4650
+ */
4651
+ metadata: {
4652
+ [key: string]: unknown;
4653
+ };
4654
+ /** @description User creation date */
4655
+ createdAt: string;
4656
+ /** @description User updated date */
4657
+ updatedAt?: string;
4658
+ };
4659
+ };
4660
+ };
4661
+ };
4662
+ };
4663
+ "user/delete": {
4664
+ parameters: {
4665
+ query?: never;
4666
+ header?: never;
4667
+ path: {
4668
+ user_id: string;
4669
+ };
4670
+ cookie?: never;
4671
+ };
4672
+ requestBody?: never;
4673
+ responses: {
4674
+ /** @description User */
4675
+ 200: {
4676
+ headers: {
4677
+ [name: string]: unknown;
4678
+ };
4679
+ content: {
4680
+ "application/json": {
4681
+ /** @description User ID */
4682
+ id: string;
4683
+ /** @description User name */
4684
+ name?: string | null;
4685
+ /** @description unique username for this user */
4686
+ username?: string | null;
4687
+ /** @description Given name */
4688
+ given_name?: string | null;
4689
+ /** @description Family name */
4690
+ family_name?: string | null;
4691
+ /** @description Middle name (OIDC §5.1) */
4692
+ middle_name?: string | null;
4693
+ /** @description Casual name. Distinct from given_name (e.g. "Mike" vs "Michael"). OIDC §5.1 */
4694
+ nickname?: string | null;
4695
+ /** @description User email */
4696
+ email?: string | null;
4697
+ /**
4698
+ * @description true if email is verified
4699
+ * @default false
4700
+ */
4701
+ email_verified: boolean;
4702
+ /** @description How `email_verified` was last set. `manual` — admin flipped the flag via `POST /user/:id`. `verification_flow` — user clicked the verification link. `passwordless_otp` — user completed passwordless OTP login. `team_invite` — user clicked a team invitation link. `email_change` — user confirmed a self-service email change. `federated` — verified by the external IdP on OAuth callback. `null` — the field was cleared (admin un-verified the email). */
4703
+ email_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4704
+ /** @description ISO 8601 timestamp of when `email_verified` was last flipped to true. */
4705
+ email_verified_at?: string | null;
3916
4706
  /** @description ISO 8601 timestamp of the user's last verified email change. When set, OAuth callbacks will not overwrite `email`/`email_verified` from the federated provider — the manually-chosen email wins. */
3917
4707
  email_change_locked_at?: string | null;
3918
4708
  /** @description contact phone number */
3919
4709
  phone?: string | null;
3920
4710
  /** @description phone is verified */
3921
4711
  phone_verified: boolean;
4712
+ /** @description How `phone_verified` was last set. Same enum as `email_verified_method`. */
4713
+ phone_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
4714
+ /** @description ISO 8601 timestamp of when `phone_verified` was last flipped to true. */
4715
+ phone_verified_at?: string | null;
3922
4716
  /** @description country iso code */
3923
4717
  country_iso?: string | null;
3924
4718
  /** @description user birth_date */
@@ -3985,7 +4779,7 @@ export interface operations {
3985
4779
  };
3986
4780
  };
3987
4781
  };
3988
- "user/remove": {
4782
+ "user/changeEmail": {
3989
4783
  parameters: {
3990
4784
  query?: never;
3991
4785
  header?: never;
@@ -3994,6 +4788,45 @@ export interface operations {
3994
4788
  };
3995
4789
  cookie?: never;
3996
4790
  };
4791
+ /** @description Payload for `POST /user/:user_id/change-email`. Triggers the verification flow: a Ticket is created and an email is sent to the new address with a confirmation link. */
4792
+ requestBody: {
4793
+ content: {
4794
+ "application/json": {
4795
+ /** @description The email address the user wants to switch to. */
4796
+ new_email: string;
4797
+ /** @description Override the account-wide policy. Can only raise the bar: passing `old_and_new` forces double verification; `new_only` is ignored if the account requires `old_and_new`. */
4798
+ verification_mode?: "new_only" | "old_and_new";
4799
+ /** @description Where to send the user after they click the link in the verification email. The status of the operation is appended as a `?status=applied|pending_old` query param so the calling app can render the right screen. When omitted, the user lands on the auth host's `/flow/email-change-done` fallback. */
4800
+ redirect_uri?: string;
4801
+ };
4802
+ };
4803
+ };
4804
+ responses: {
4805
+ /** @description Default Response */
4806
+ 200: {
4807
+ headers: {
4808
+ [name: string]: unknown;
4809
+ };
4810
+ content: {
4811
+ "application/json": {
4812
+ /** @enum {string} */
4813
+ status: "verification_sent";
4814
+ ticket_id: string;
4815
+ verification_mode: "new_only" | "old_and_new";
4816
+ };
4817
+ };
4818
+ };
4819
+ };
4820
+ };
4821
+ user_change_email_verify: {
4822
+ parameters: {
4823
+ query: {
4824
+ ticket: string;
4825
+ };
4826
+ header?: never;
4827
+ path?: never;
4828
+ cookie?: never;
4829
+ };
3997
4830
  requestBody?: never;
3998
4831
  responses: {
3999
4832
  /** @description Default Response */
@@ -4005,7 +4838,7 @@ export interface operations {
4005
4838
  };
4006
4839
  };
4007
4840
  };
4008
- "user/changeEmail": {
4841
+ "user/verifyEmailStart": {
4009
4842
  parameters: {
4010
4843
  query?: never;
4011
4844
  header?: never;
@@ -4014,15 +4847,11 @@ export interface operations {
4014
4847
  };
4015
4848
  cookie?: never;
4016
4849
  };
4017
- /** @description Payload for `POST /user/:user_id/change-email`. Triggers the verification flow: a Ticket is created and an email is sent to the new address with a confirmation link. */
4850
+ /** @description Optional payload for `POST /user/:user_id/verify-email/start`. Trigger a verification email send for the given user. */
4018
4851
  requestBody: {
4019
4852
  content: {
4020
4853
  "application/json": {
4021
- /** @description The email address the user wants to switch to. */
4022
- new_email: string;
4023
- /** @description Override the account-wide policy. Can only raise the bar: passing `old_and_new` forces double verification; `new_only` is ignored if the account requires `old_and_new`. */
4024
- verification_mode?: "new_only" | "old_and_new";
4025
- /** @description Where to send the user after they click the link in the verification email. The status of the operation is appended as a `?status=applied|pending_old` query param so the calling app can render the right screen. When omitted, the user lands on the auth host's `/flow/email-change-done` fallback. */
4854
+ /** @description Where to send the user after they click the link. The status of the operation is appended as `?status=verified|already_verified|invalid_link|expired` so the calling app can render the right screen. When omitted, the user lands on the auth host's `/flow/verify-email-done` fallback. */
4026
4855
  redirect_uri?: string;
4027
4856
  };
4028
4857
  };
@@ -4035,16 +4864,14 @@ export interface operations {
4035
4864
  };
4036
4865
  content: {
4037
4866
  "application/json": {
4038
- /** @enum {string} */
4039
- status: "verification_sent";
4040
- ticket_id: string;
4041
- verification_mode: "new_only" | "old_and_new";
4867
+ status: "verification_sent" | "already_verified";
4868
+ ticket_id?: string;
4042
4869
  };
4043
4870
  };
4044
4871
  };
4045
4872
  };
4046
4873
  };
4047
- user_change_email_verify: {
4874
+ user_verify_email_confirm: {
4048
4875
  parameters: {
4049
4876
  query: {
4050
4877
  ticket: string;
@@ -4067,12 +4894,12 @@ export interface operations {
4067
4894
  "identity/list": {
4068
4895
  parameters: {
4069
4896
  query?: {
4070
- /** @description Start from this cursor */
4897
+ /** @description Number of items per page (max 200) */
4898
+ pageSize?: number;
4899
+ /** @description Cursor for next page */
4071
4900
  cursor?: string;
4072
- /** @description Start from this cursor */
4901
+ /** @description Cursor returned by the previous page */
4073
4902
  next?: string;
4074
- /** @description Size of the results array */
4075
- pageSize?: number;
4076
4903
  /** @description Filter using a FaableQL query */
4077
4904
  query?: string;
4078
4905
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -4084,16 +4911,14 @@ export interface operations {
4084
4911
  };
4085
4912
  requestBody?: never;
4086
4913
  responses: {
4087
- /** @description PaginatedResponse */
4914
+ /** @description Default Response */
4088
4915
  200: {
4089
4916
  headers: {
4090
4917
  [name: string]: unknown;
4091
4918
  };
4092
4919
  content: {
4093
4920
  "application/json": {
4094
- /** @description next cursor */
4095
4921
  next: string | null;
4096
- /** @description List of results */
4097
4922
  results: components["schemas"]["Identity"][];
4098
4923
  };
4099
4924
  };
@@ -4137,6 +4962,8 @@ export interface operations {
4137
4962
  access_token?: string;
4138
4963
  access_token_secret?: string;
4139
4964
  refresh_token?: string;
4965
+ /** @description ISO 8601 timestamp when the stored provider `access_token` expires. Stamped from the provider `expires_in` on (re-)authorization and refresh. Absent when the provider issues non-expiring tokens. */
4966
+ access_token_expires_at?: string;
4140
4967
  profile_data: unknown;
4141
4968
  /** @description Object is related with this account */
4142
4969
  account: string;
@@ -4185,6 +5012,8 @@ export interface operations {
4185
5012
  access_token?: string;
4186
5013
  access_token_secret?: string;
4187
5014
  refresh_token?: string;
5015
+ /** @description ISO 8601 timestamp when the stored provider `access_token` expires. Stamped from the provider `expires_in` on (re-)authorization and refresh. Absent when the provider issues non-expiring tokens. */
5016
+ access_token_expires_at?: string;
4188
5017
  profile_data: unknown;
4189
5018
  /** @description Object is related with this account */
4190
5019
  account: string;
@@ -4204,7 +5033,7 @@ export interface operations {
4204
5033
  };
4205
5034
  };
4206
5035
  };
4207
- "identity/remove": {
5036
+ "identity/delete": {
4208
5037
  parameters: {
4209
5038
  query?: never;
4210
5039
  header?: never;
@@ -4214,27 +5043,85 @@ export interface operations {
4214
5043
  cookie?: never;
4215
5044
  };
4216
5045
  requestBody?: never;
5046
+ responses: {
5047
+ /** @description Identity */
5048
+ 200: {
5049
+ headers: {
5050
+ [name: string]: unknown;
5051
+ };
5052
+ content: {
5053
+ "application/json": {
5054
+ /** @description Identity ID */
5055
+ id: string;
5056
+ connection: components["schemas"]["Connection"] | string | unknown;
5057
+ user: components["schemas"]["User"] | string | unknown;
5058
+ identity_id: string;
5059
+ access_token?: string;
5060
+ access_token_secret?: string;
5061
+ refresh_token?: string;
5062
+ /** @description ISO 8601 timestamp when the stored provider `access_token` expires. Stamped from the provider `expires_in` on (re-)authorization and refresh. Absent when the provider issues non-expiring tokens. */
5063
+ access_token_expires_at?: string;
5064
+ profile_data: unknown;
5065
+ /** @description Object is related with this account */
5066
+ account: string;
5067
+ /**
5068
+ * @description IdentityMetadata
5069
+ * @default {}
5070
+ */
5071
+ metadata: {
5072
+ [key: string]: unknown;
5073
+ };
5074
+ /** @description Identity creation date */
5075
+ createdAt: string;
5076
+ /** @description Identity updated date */
5077
+ updatedAt?: string;
5078
+ };
5079
+ };
5080
+ };
5081
+ };
5082
+ };
5083
+ "identity/getProviderToken": {
5084
+ parameters: {
5085
+ query?: {
5086
+ /** @description Force a refresh against the provider even when the stored token still looks valid. */
5087
+ fresh?: boolean;
5088
+ };
5089
+ header?: never;
5090
+ path: {
5091
+ identity_id: string;
5092
+ };
5093
+ cookie?: never;
5094
+ };
5095
+ requestBody?: never;
4217
5096
  responses: {
4218
5097
  /** @description Default Response */
4219
5098
  200: {
4220
5099
  headers: {
4221
5100
  [name: string]: unknown;
4222
5101
  };
4223
- content?: never;
5102
+ content: {
5103
+ "application/json": {
5104
+ access_token: string;
5105
+ access_token_expires_at?: string;
5106
+ refreshed: boolean;
5107
+ };
5108
+ };
4224
5109
  };
4225
5110
  };
4226
5111
  };
4227
5112
  "role/list": {
4228
5113
  parameters: {
4229
5114
  query?: {
4230
- /** @description Start from this cursor */
5115
+ /** @description Number of items per page (max 200) */
5116
+ pageSize?: number;
5117
+ /** @description Cursor for next page */
4231
5118
  cursor?: string;
4232
- /** @description Start from this cursor */
5119
+ /** @description Cursor returned by the previous page */
4233
5120
  next?: string;
4234
- /** @description Size of the results array */
4235
- pageSize?: number;
4236
5121
  /** @description Filter using a FaableQL query */
4237
5122
  query?: string;
5123
+ /** @description Full-text search across: `name`, `description`. */
5124
+ q?: string;
4238
5125
  };
4239
5126
  header?: never;
4240
5127
  path?: never;
@@ -4242,16 +5129,14 @@ export interface operations {
4242
5129
  };
4243
5130
  requestBody?: never;
4244
5131
  responses: {
4245
- /** @description PaginatedResponse */
5132
+ /** @description Default Response */
4246
5133
  200: {
4247
5134
  headers: {
4248
5135
  [name: string]: unknown;
4249
5136
  };
4250
5137
  content: {
4251
5138
  "application/json": {
4252
- /** @description next cursor */
4253
5139
  next: string | null;
4254
- /** @description List of results */
4255
5140
  results: components["schemas"]["Role"][];
4256
5141
  };
4257
5142
  };
@@ -4418,7 +5303,7 @@ export interface operations {
4418
5303
  };
4419
5304
  };
4420
5305
  };
4421
- "role/remove": {
5306
+ "role/delete": {
4422
5307
  parameters: {
4423
5308
  query?: never;
4424
5309
  header?: never;
@@ -4429,12 +5314,37 @@ export interface operations {
4429
5314
  };
4430
5315
  requestBody?: never;
4431
5316
  responses: {
4432
- /** @description Default Response */
5317
+ /** @description Role */
4433
5318
  200: {
4434
5319
  headers: {
4435
5320
  [name: string]: unknown;
4436
5321
  };
4437
- content?: never;
5322
+ content: {
5323
+ "application/json": {
5324
+ /** @description Role ID */
5325
+ id: string;
5326
+ /**
5327
+ * @description Short, human-readable identifier for the role (e.g. `admin`, `editor`, `billing-manager`). Surfaced in the dashboard role pickers.
5328
+ * @example admin
5329
+ */
5330
+ name: string;
5331
+ /** @description Free-form explanation of what users in this role are expected to do or have access to. Shown alongside the role in the dashboard. */
5332
+ description: string;
5333
+ /** @description Object is related with this account */
5334
+ account: string;
5335
+ /**
5336
+ * @description RoleMetadata
5337
+ * @default {}
5338
+ */
5339
+ metadata: {
5340
+ [key: string]: unknown;
5341
+ };
5342
+ /** @description Role creation date */
5343
+ createdAt: string;
5344
+ /** @description Role updated date */
5345
+ updatedAt?: string;
5346
+ };
5347
+ };
4438
5348
  };
4439
5349
  };
4440
5350
  };
@@ -4508,12 +5418,12 @@ export interface operations {
4508
5418
  "rolemember/list": {
4509
5419
  parameters: {
4510
5420
  query?: {
4511
- /** @description Start from this cursor */
5421
+ /** @description Number of items per page (max 200) */
5422
+ pageSize?: number;
5423
+ /** @description Cursor for next page */
4512
5424
  cursor?: string;
4513
- /** @description Start from this cursor */
5425
+ /** @description Cursor returned by the previous page */
4514
5426
  next?: string;
4515
- /** @description Size of the results array */
4516
- pageSize?: number;
4517
5427
  /** @description Filter using a FaableQL query */
4518
5428
  query?: string;
4519
5429
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -4525,16 +5435,14 @@ export interface operations {
4525
5435
  };
4526
5436
  requestBody?: never;
4527
5437
  responses: {
4528
- /** @description PaginatedResponse */
5438
+ /** @description Default Response */
4529
5439
  200: {
4530
5440
  headers: {
4531
5441
  [name: string]: unknown;
4532
5442
  };
4533
5443
  content: {
4534
5444
  "application/json": {
4535
- /** @description next cursor */
4536
5445
  next: string | null;
4537
- /** @description List of results */
4538
5446
  results: components["schemas"]["RoleMember"][];
4539
5447
  };
4540
5448
  };
@@ -4639,7 +5547,7 @@ export interface operations {
4639
5547
  };
4640
5548
  };
4641
5549
  };
4642
- "rolemember/remove": {
5550
+ "rolemember/delete": {
4643
5551
  parameters: {
4644
5552
  query?: never;
4645
5553
  header?: never;
@@ -4650,26 +5558,50 @@ export interface operations {
4650
5558
  };
4651
5559
  requestBody?: never;
4652
5560
  responses: {
4653
- /** @description Default Response */
5561
+ /** @description RoleMember */
4654
5562
  200: {
4655
5563
  headers: {
4656
5564
  [name: string]: unknown;
4657
5565
  };
4658
- content?: never;
5566
+ content: {
5567
+ "application/json": {
5568
+ /** @description RoleMember ID */
5569
+ id: string;
5570
+ /** @description Role granted to the user. Returned as an id by default; pass `?expand=role` to inline the full Role object. */
5571
+ role: components["schemas"]["Role"] | string | unknown;
5572
+ /** @description User the role is granted to. Returned as an id by default; pass `?expand=user` to inline the full User object. */
5573
+ user: components["schemas"]["User"] | string | unknown;
5574
+ /** @description Object is related with this account */
5575
+ account: string;
5576
+ /**
5577
+ * @description RoleMemberMetadata
5578
+ * @default {}
5579
+ */
5580
+ metadata: {
5581
+ [key: string]: unknown;
5582
+ };
5583
+ /** @description RoleMember creation date */
5584
+ createdAt: string;
5585
+ /** @description RoleMember updated date */
5586
+ updatedAt?: string;
5587
+ };
5588
+ };
4659
5589
  };
4660
5590
  };
4661
5591
  };
4662
5592
  "team/list": {
4663
5593
  parameters: {
4664
5594
  query?: {
4665
- /** @description Start from this cursor */
5595
+ /** @description Number of items per page (max 200) */
5596
+ pageSize?: number;
5597
+ /** @description Cursor for next page */
4666
5598
  cursor?: string;
4667
- /** @description Start from this cursor */
5599
+ /** @description Cursor returned by the previous page */
4668
5600
  next?: string;
4669
- /** @description Size of the results array */
4670
- pageSize?: number;
4671
5601
  /** @description Filter using a FaableQL query */
4672
5602
  query?: string;
5603
+ /** @description Full-text search across: `name`, `slug`. */
5604
+ q?: string;
4673
5605
  };
4674
5606
  header?: never;
4675
5607
  path?: never;
@@ -4677,16 +5609,14 @@ export interface operations {
4677
5609
  };
4678
5610
  requestBody?: never;
4679
5611
  responses: {
4680
- /** @description PaginatedResponse */
5612
+ /** @description Default Response */
4681
5613
  200: {
4682
5614
  headers: {
4683
5615
  [name: string]: unknown;
4684
5616
  };
4685
5617
  content: {
4686
5618
  "application/json": {
4687
- /** @description next cursor */
4688
5619
  next: string | null;
4689
- /** @description List of results */
4690
5620
  results: components["schemas"]["Team"][];
4691
5621
  };
4692
5622
  };
@@ -4878,7 +5808,7 @@ export interface operations {
4878
5808
  };
4879
5809
  };
4880
5810
  };
4881
- "team/remove": {
5811
+ "team/delete": {
4882
5812
  parameters: {
4883
5813
  query?: never;
4884
5814
  header?: never;
@@ -4889,24 +5819,56 @@ export interface operations {
4889
5819
  };
4890
5820
  requestBody?: never;
4891
5821
  responses: {
4892
- /** @description Default Response */
5822
+ /** @description Team */
4893
5823
  200: {
4894
5824
  headers: {
4895
5825
  [name: string]: unknown;
4896
5826
  };
4897
- content?: never;
5827
+ content: {
5828
+ "application/json": {
5829
+ /** @description Team ID */
5830
+ id: string;
5831
+ /**
5832
+ * @description Human-readable name of the team. Shown in the dashboard and in team-picker UI.
5833
+ * @example Acme Engineering
5834
+ */
5835
+ name: string;
5836
+ /**
5837
+ * @description URL-safe identifier auto-derived from `name`. Unique within the tenant; used in routes that address a team by slug.
5838
+ * @example acme-engineering
5839
+ */
5840
+ slug: string;
5841
+ /** @description Optional free-form description of the team. */
5842
+ description: string | null;
5843
+ /** @description Optional URL of an image used as the team avatar/logo. */
5844
+ logo_url: string | null;
5845
+ /** @description Object is related with this account */
5846
+ account: string;
5847
+ /**
5848
+ * @description TeamMetadata
5849
+ * @default {}
5850
+ */
5851
+ metadata: {
5852
+ [key: string]: unknown;
5853
+ };
5854
+ /** @description Team creation date */
5855
+ createdAt: string;
5856
+ /** @description Team updated date */
5857
+ updatedAt?: string;
5858
+ };
5859
+ };
4898
5860
  };
4899
5861
  };
4900
5862
  };
4901
5863
  "teammember/list": {
4902
5864
  parameters: {
4903
5865
  query?: {
4904
- /** @description Start from this cursor */
5866
+ /** @description Number of items per page (max 200) */
5867
+ pageSize?: number;
5868
+ /** @description Cursor for next page */
4905
5869
  cursor?: string;
4906
- /** @description Start from this cursor */
5870
+ /** @description Cursor returned by the previous page */
4907
5871
  next?: string;
4908
- /** @description Size of the results array */
4909
- pageSize?: number;
4910
5872
  /** @description Filter using a FaableQL query */
4911
5873
  query?: string;
4912
5874
  /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
@@ -4918,16 +5880,14 @@ export interface operations {
4918
5880
  };
4919
5881
  requestBody?: never;
4920
5882
  responses: {
4921
- /** @description PaginatedResponse */
5883
+ /** @description Default Response */
4922
5884
  200: {
4923
5885
  headers: {
4924
5886
  [name: string]: unknown;
4925
5887
  };
4926
5888
  content: {
4927
5889
  "application/json": {
4928
- /** @description next cursor */
4929
5890
  next: string | null;
4930
- /** @description List of results */
4931
5891
  results: components["schemas"]["TeamMember"][];
4932
5892
  };
4933
5893
  };
@@ -5044,7 +6004,7 @@ export interface operations {
5044
6004
  };
5045
6005
  };
5046
6006
  };
5047
- "teammember/remove": {
6007
+ "teammember/delete": {
5048
6008
  parameters: {
5049
6009
  query?: never;
5050
6010
  header?: never;
@@ -5055,12 +6015,36 @@ export interface operations {
5055
6015
  };
5056
6016
  requestBody?: never;
5057
6017
  responses: {
5058
- /** @description Default Response */
6018
+ /** @description TeamMember */
5059
6019
  200: {
5060
6020
  headers: {
5061
6021
  [name: string]: unknown;
5062
6022
  };
5063
- content?: never;
6023
+ content: {
6024
+ "application/json": {
6025
+ /** @description TeamMember ID */
6026
+ id: string;
6027
+ /** @description User that belongs to the team. Returned as an id by default; pass `?expand=user` to inline the full User object. */
6028
+ user: components["schemas"]["User"] | string | unknown;
6029
+ /** @description Team the user belongs to. Returned as an id by default; pass `?expand=team` to inline the full Team object. */
6030
+ team: components["schemas"]["Team"] | string | unknown;
6031
+ /** @description Roles granted to the user *within this team*. Distinct from account-wide RoleMember grants — these only apply in the scope of the team. Each entry is an id by default; pass `?expand=roles` to inline. */
6032
+ roles: (components["schemas"]["Role"] | string | unknown)[];
6033
+ /** @description Object is related with this account */
6034
+ account: string;
6035
+ /**
6036
+ * @description TeamMemberMetadata
6037
+ * @default {}
6038
+ */
6039
+ metadata: {
6040
+ [key: string]: unknown;
6041
+ };
6042
+ /** @description TeamMember creation date */
6043
+ createdAt: string;
6044
+ /** @description TeamMember updated date */
6045
+ updatedAt?: string;
6046
+ };
6047
+ };
5064
6048
  };
5065
6049
  };
5066
6050
  };
@@ -5073,6 +6057,8 @@ export interface operations {
5073
6057
  next?: string;
5074
6058
  /** @description Size of the results array */
5075
6059
  pageSize?: number;
6060
+ /** @description Expand id-only fields in the response. Accepts repeated params (`expand=user&expand=roles`) or comma-separated (`expand=user,roles`). */
6061
+ expand?: ("user" | "team" | "roles")[];
5076
6062
  };
5077
6063
  header?: never;
5078
6064
  path: {
@@ -5394,14 +6380,16 @@ export interface operations {
5394
6380
  "api/list": {
5395
6381
  parameters: {
5396
6382
  query?: {
5397
- /** @description Start from this cursor */
6383
+ /** @description Number of items per page (max 200) */
6384
+ pageSize?: number;
6385
+ /** @description Cursor for next page */
5398
6386
  cursor?: string;
5399
- /** @description Start from this cursor */
6387
+ /** @description Cursor returned by the previous page */
5400
6388
  next?: string;
5401
- /** @description Size of the results array */
5402
- pageSize?: number;
5403
6389
  /** @description Filter using a FaableQL query */
5404
6390
  query?: string;
6391
+ /** @description Full-text search across: `name`, `description`, `identifier`, `slug`. */
6392
+ q?: string;
5405
6393
  };
5406
6394
  header?: never;
5407
6395
  path?: never;
@@ -5409,16 +6397,14 @@ export interface operations {
5409
6397
  };
5410
6398
  requestBody?: never;
5411
6399
  responses: {
5412
- /** @description PaginatedResponse */
6400
+ /** @description Default Response */
5413
6401
  200: {
5414
6402
  headers: {
5415
6403
  [name: string]: unknown;
5416
6404
  };
5417
6405
  content: {
5418
6406
  "application/json": {
5419
- /** @description next cursor */
5420
6407
  next: string | null;
5421
- /** @description List of results */
5422
6408
  results: components["schemas"]["Api"][];
5423
6409
  };
5424
6410
  };
@@ -5465,6 +6451,14 @@ export interface operations {
5465
6451
  allow_offline_access?: boolean;
5466
6452
  /** @description When true, skip the consent prompt for first-party clients. */
5467
6453
  skip_consent?: boolean;
6454
+ /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
6455
+ include_teams_in_access_token?: boolean;
6456
+ /** @description When true, access_tokens issued for this API carry a `roles` claim with the subject role names. */
6457
+ include_roles_in_access_token?: boolean;
6458
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. */
6459
+ include_teams_in_id_token?: boolean;
6460
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. */
6461
+ include_roles_in_id_token?: boolean;
5468
6462
  };
5469
6463
  };
5470
6464
  };
@@ -5506,6 +6500,14 @@ export interface operations {
5506
6500
  allow_offline_access: boolean;
5507
6501
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
5508
6502
  skip_consent: boolean;
6503
+ /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
6504
+ include_teams_in_access_token: boolean;
6505
+ /** @description When true, access_tokens issued for this API carry a `roles` claim listing the names of the roles the subject holds across their team memberships within the tenant. */
6506
+ include_roles_in_access_token: boolean;
6507
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. The id_token only sees the flag when the client requested `audience=` so this API is resolved at issuance time. */
6508
+ include_teams_in_id_token: boolean;
6509
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. Same audience caveat as `include_teams_in_id_token`. */
6510
+ include_roles_in_id_token: boolean;
5509
6511
  /** @description Object is related with this account */
5510
6512
  account: string;
5511
6513
  /**
@@ -5572,6 +6574,14 @@ export interface operations {
5572
6574
  allow_offline_access: boolean;
5573
6575
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
5574
6576
  skip_consent: boolean;
6577
+ /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
6578
+ include_teams_in_access_token: boolean;
6579
+ /** @description When true, access_tokens issued for this API carry a `roles` claim listing the names of the roles the subject holds across their team memberships within the tenant. */
6580
+ include_roles_in_access_token: boolean;
6581
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. The id_token only sees the flag when the client requested `audience=` so this API is resolved at issuance time. */
6582
+ include_teams_in_id_token: boolean;
6583
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. Same audience caveat as `include_teams_in_id_token`. */
6584
+ include_roles_in_id_token: boolean;
5575
6585
  /** @description Object is related with this account */
5576
6586
  account: string;
5577
6587
  /**
@@ -5621,6 +6631,14 @@ export interface operations {
5621
6631
  allow_offline_access?: boolean;
5622
6632
  /** @description When true, skip the consent prompt for first-party clients. */
5623
6633
  skip_consent?: boolean;
6634
+ /** @description When true, access_tokens issued for this API carry a `teams` claim with the subject team slugs. */
6635
+ include_teams_in_access_token?: boolean;
6636
+ /** @description When true, access_tokens issued for this API carry a `roles` claim with the subject role names. */
6637
+ include_roles_in_access_token?: boolean;
6638
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. */
6639
+ include_teams_in_id_token?: boolean;
6640
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. */
6641
+ include_roles_in_id_token?: boolean;
5624
6642
  };
5625
6643
  };
5626
6644
  };
@@ -5662,6 +6680,14 @@ export interface operations {
5662
6680
  allow_offline_access: boolean;
5663
6681
  /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
5664
6682
  skip_consent: boolean;
6683
+ /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
6684
+ include_teams_in_access_token: boolean;
6685
+ /** @description When true, access_tokens issued for this API carry a `roles` claim listing the names of the roles the subject holds across their team memberships within the tenant. */
6686
+ include_roles_in_access_token: boolean;
6687
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. The id_token only sees the flag when the client requested `audience=` so this API is resolved at issuance time. */
6688
+ include_teams_in_id_token: boolean;
6689
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. Same audience caveat as `include_teams_in_id_token`. */
6690
+ include_roles_in_id_token: boolean;
5665
6691
  /** @description Object is related with this account */
5666
6692
  account: string;
5667
6693
  /**
@@ -5680,7 +6706,7 @@ export interface operations {
5680
6706
  };
5681
6707
  };
5682
6708
  };
5683
- "api/remove": {
6709
+ "api/delete": {
5684
6710
  parameters: {
5685
6711
  query?: never;
5686
6712
  header?: never;
@@ -5691,12 +6717,66 @@ export interface operations {
5691
6717
  };
5692
6718
  requestBody?: never;
5693
6719
  responses: {
5694
- /** @description Default Response */
6720
+ /** @description Api */
5695
6721
  200: {
5696
6722
  headers: {
5697
6723
  [name: string]: unknown;
5698
6724
  };
5699
- content?: never;
6725
+ content: {
6726
+ "application/json": {
6727
+ /** @description Api ID */
6728
+ id: string;
6729
+ /**
6730
+ * @description Human-readable name for the API. Shown in the dashboard and consent prompts.
6731
+ * @example My Backend API
6732
+ */
6733
+ name: string;
6734
+ /** @description URL-safe identifier auto-derived from `name`. Unique within the tenant. */
6735
+ slug: string;
6736
+ /**
6737
+ * @description Audience URL that clients pass as `audience=` when requesting a token for this API. Becomes the `aud` claim in the issued access_token. Immutable after creation and unique within the tenant.
6738
+ * @example https://api.faable.com
6739
+ */
6740
+ identifier: string;
6741
+ /** @description Optional human-readable description of the API. */
6742
+ description?: string;
6743
+ /** @description Set of permissions (scopes) this API exposes. When a token is issued with `audience=identifier`, the requested `scope` is intersected with this list to populate the `permissions` claim. */
6744
+ permissions: components["schemas"]["Permission"][];
6745
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
6746
+ signing_alg: "RS256";
6747
+ /** @description Shape of access_tokens issued for this API. `access_token` emits the standard OAuth2 token. `access_token_authz` additionally embeds a `permissions` claim listing the permissions granted to the subject for this API. */
6748
+ token_dialect: "access_token" | "access_token_authz";
6749
+ /** @description Access_token lifetime in seconds. Default 86400 (24h). Applied at token issuance time (overrides the generic default). */
6750
+ token_lifetime: number;
6751
+ /** @description When true, only scopes that match a permission in `permissions` are forwarded into the access_token. When false, requested scopes are echoed back verbatim with no filtering. */
6752
+ enforce_policies: boolean;
6753
+ /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
6754
+ allow_offline_access: boolean;
6755
+ /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
6756
+ skip_consent: boolean;
6757
+ /** @description When true, access_tokens issued for this API carry a `teams` claim listing the slugs of the teams the subject is a member of within the tenant. */
6758
+ include_teams_in_access_token: boolean;
6759
+ /** @description When true, access_tokens issued for this API carry a `roles` claim listing the names of the roles the subject holds across their team memberships within the tenant. */
6760
+ include_roles_in_access_token: boolean;
6761
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `teams` claim with the subject team slugs. The id_token only sees the flag when the client requested `audience=` so this API is resolved at issuance time. */
6762
+ include_teams_in_id_token: boolean;
6763
+ /** @description When true, id_tokens issued together with an access_token for this API carry a `roles` claim with the subject role names. Same audience caveat as `include_teams_in_id_token`. */
6764
+ include_roles_in_id_token: boolean;
6765
+ /** @description Object is related with this account */
6766
+ account: string;
6767
+ /**
6768
+ * @description ApiMetadata
6769
+ * @default {}
6770
+ */
6771
+ metadata: {
6772
+ [key: string]: unknown;
6773
+ };
6774
+ /** @description Api creation date */
6775
+ createdAt: string;
6776
+ /** @description Api updated date */
6777
+ updatedAt?: string;
6778
+ };
6779
+ };
5700
6780
  };
5701
6781
  };
5702
6782
  };
@@ -5765,12 +6845,12 @@ export interface operations {
5765
6845
  "action/list": {
5766
6846
  parameters: {
5767
6847
  query?: {
5768
- /** @description Start from this cursor */
6848
+ /** @description Number of items per page (max 200) */
6849
+ pageSize?: number;
6850
+ /** @description Cursor for next page */
5769
6851
  cursor?: string;
5770
- /** @description Start from this cursor */
6852
+ /** @description Cursor returned by the previous page */
5771
6853
  next?: string;
5772
- /** @description Size of the results array */
5773
- pageSize?: number;
5774
6854
  /** @description Filter using a FaableQL query */
5775
6855
  query?: string;
5776
6856
  };
@@ -5780,16 +6860,14 @@ export interface operations {
5780
6860
  };
5781
6861
  requestBody?: never;
5782
6862
  responses: {
5783
- /** @description PaginatedResponse */
6863
+ /** @description Default Response */
5784
6864
  200: {
5785
6865
  headers: {
5786
6866
  [name: string]: unknown;
5787
6867
  };
5788
6868
  content: {
5789
6869
  "application/json": {
5790
- /** @description next cursor */
5791
6870
  next: string | null;
5792
- /** @description List of results */
5793
6871
  results: components["schemas"]["Action"][];
5794
6872
  };
5795
6873
  };
@@ -5931,7 +7009,7 @@ export interface operations {
5931
7009
  };
5932
7010
  };
5933
7011
  };
5934
- "action/remove": {
7012
+ "action/delete": {
5935
7013
  parameters: {
5936
7014
  query?: never;
5937
7015
  header?: never;
@@ -5942,24 +7020,62 @@ export interface operations {
5942
7020
  };
5943
7021
  requestBody?: never;
5944
7022
  responses: {
5945
- /** @description Default Response */
7023
+ /** @description Action */
5946
7024
  200: {
5947
7025
  headers: {
5948
7026
  [name: string]: unknown;
5949
7027
  };
5950
- content?: never;
7028
+ content: {
7029
+ "application/json": {
7030
+ /** @description Action ID */
7031
+ id: string;
7032
+ /** @description Action Name */
7033
+ name: string;
7034
+ /**
7035
+ * @description Trigger event name
7036
+ * @default post-login
7037
+ * @enum {unknown}
7038
+ */
7039
+ trigger: "continue" | "post-login";
7040
+ /** @description JavaScript Code to execute */
7041
+ code: string;
7042
+ /**
7043
+ * @description Is this action active?
7044
+ * @default true
7045
+ */
7046
+ enabled: boolean;
7047
+ /**
7048
+ * @description Execution order
7049
+ * @default 0
7050
+ */
7051
+ order: number;
7052
+ /** @description Object is related with this account */
7053
+ account: string;
7054
+ /**
7055
+ * @description ActionMetadata
7056
+ * @default {}
7057
+ */
7058
+ metadata: {
7059
+ [key: string]: unknown;
7060
+ };
7061
+ /** @description Action creation date */
7062
+ createdAt: string;
7063
+ /** @description Action updated date */
7064
+ updatedAt?: string;
7065
+ };
7066
+ };
5951
7067
  };
5952
7068
  };
5953
7069
  };
5954
7070
  "notificationsubscription/list": {
5955
7071
  parameters: {
5956
7072
  query?: {
5957
- /** @description Start from this cursor */
7073
+ /** @description Number of items per page (max 200) */
7074
+ pageSize?: number;
7075
+ /** @description Cursor for next page */
5958
7076
  cursor?: string;
5959
- /** @description Start from this cursor */
7077
+ /** @description Cursor returned by the previous page */
5960
7078
  next?: string;
5961
- /** @description Size of the results array */
5962
- pageSize?: number;
5963
7079
  /** @description Filter using a FaableQL query */
5964
7080
  query?: string;
5965
7081
  };
@@ -5969,16 +7085,14 @@ export interface operations {
5969
7085
  };
5970
7086
  requestBody?: never;
5971
7087
  responses: {
5972
- /** @description PaginatedResponse */
7088
+ /** @description Default Response */
5973
7089
  200: {
5974
7090
  headers: {
5975
7091
  [name: string]: unknown;
5976
7092
  };
5977
7093
  content: {
5978
7094
  "application/json": {
5979
- /** @description next cursor */
5980
7095
  next: string | null;
5981
- /** @description List of results */
5982
7096
  results: components["schemas"]["NotificationSubscription"][];
5983
7097
  };
5984
7098
  };
@@ -6285,7 +7399,7 @@ export interface operations {
6285
7399
  };
6286
7400
  };
6287
7401
  };
6288
- "notificationsubscription/remove": {
7402
+ "notificationsubscription/delete": {
6289
7403
  parameters: {
6290
7404
  query?: never;
6291
7405
  header?: never;
@@ -6296,26 +7410,86 @@ export interface operations {
6296
7410
  };
6297
7411
  requestBody?: never;
6298
7412
  responses: {
6299
- /** @description Default Response */
7413
+ /** @description NotificationSubscription */
6300
7414
  200: {
6301
7415
  headers: {
6302
7416
  [name: string]: unknown;
6303
7417
  };
6304
- content?: never;
7418
+ content: {
7419
+ "application/json": {
7420
+ /** @description NotificationSubscriptionEmail ID */
7421
+ id: string;
7422
+ events: string[];
7423
+ /** @enum {string} */
7424
+ channel: "email";
7425
+ /** @description Whether the subscription is active */
7426
+ active: boolean;
7427
+ config: {
7428
+ recipients: string[];
7429
+ };
7430
+ /** @description Object is related with this account */
7431
+ account: string;
7432
+ /**
7433
+ * @description NotificationSubscriptionEmailMetadata
7434
+ * @default {}
7435
+ */
7436
+ metadata: {
7437
+ [key: string]: unknown;
7438
+ };
7439
+ /** @description NotificationSubscriptionEmail creation date */
7440
+ createdAt: string;
7441
+ /** @description NotificationSubscriptionEmail updated date */
7442
+ updatedAt?: string;
7443
+ } | {
7444
+ /** @description NotificationSubscriptionWebhook ID */
7445
+ id: string;
7446
+ events: string[];
7447
+ /** @enum {string} */
7448
+ channel: "webhook";
7449
+ /** @description Whether the subscription is active */
7450
+ active: boolean;
7451
+ config: {
7452
+ /**
7453
+ * Format: uri
7454
+ * @description Webhook URL
7455
+ */
7456
+ url: string;
7457
+ /** @description Secret used to sign the webhook payload */
7458
+ secret: string;
7459
+ };
7460
+ /** @description Object is related with this account */
7461
+ account: string;
7462
+ /**
7463
+ * @description NotificationSubscriptionWebhookMetadata
7464
+ * @default {}
7465
+ */
7466
+ metadata: {
7467
+ [key: string]: unknown;
7468
+ };
7469
+ /** @description NotificationSubscriptionWebhook creation date */
7470
+ createdAt: string;
7471
+ /** @description NotificationSubscriptionWebhook updated date */
7472
+ updatedAt?: string;
7473
+ };
7474
+ };
6305
7475
  };
6306
7476
  };
6307
7477
  };
6308
7478
  "log/list": {
6309
7479
  parameters: {
6310
7480
  query?: {
6311
- /** @description Start from this cursor */
7481
+ /** @description Number of items per page (max 200) */
7482
+ pageSize?: number;
7483
+ /** @description Cursor for next page */
6312
7484
  cursor?: string;
6313
- /** @description Start from this cursor */
7485
+ /** @description Cursor returned by the previous page */
6314
7486
  next?: string;
6315
- /** @description Size of the results array */
6316
- pageSize?: number;
6317
7487
  /** @description Filter using a FaableQL query */
6318
7488
  query?: string;
7489
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
7490
+ expand?: ("user" | "client" | "connection" | "team" | "identity")[];
7491
+ /** @description Full-text search across: `message`. */
7492
+ q?: string;
6319
7493
  };
6320
7494
  header?: never;
6321
7495
  path?: never;
@@ -6323,16 +7497,14 @@ export interface operations {
6323
7497
  };
6324
7498
  requestBody?: never;
6325
7499
  responses: {
6326
- /** @description PaginatedResponse */
7500
+ /** @description Default Response */
6327
7501
  200: {
6328
7502
  headers: {
6329
7503
  [name: string]: unknown;
6330
7504
  };
6331
7505
  content: {
6332
7506
  "application/json": {
6333
- /** @description next cursor */
6334
7507
  next: string | null;
6335
- /** @description List of results */
6336
7508
  results: components["schemas"]["Log"][];
6337
7509
  };
6338
7510
  };
@@ -6341,7 +7513,10 @@ export interface operations {
6341
7513
  };
6342
7514
  "log/get": {
6343
7515
  parameters: {
6344
- query?: never;
7516
+ query?: {
7517
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
7518
+ expand?: ("user" | "client" | "connection" | "team" | "identity")[];
7519
+ };
6345
7520
  header?: never;
6346
7521
  path: {
6347
7522
  log_id: string;
@@ -6367,6 +7542,17 @@ export interface operations {
6367
7542
  message?: string;
6368
7543
  /** @description Type-specific structured payload */
6369
7544
  data?: unknown;
7545
+ user?: components["schemas"]["User"] | string | unknown;
7546
+ client?: components["schemas"]["Client"] | string | unknown;
7547
+ connection?: components["schemas"]["Connection"] | string | unknown;
7548
+ team?: components["schemas"]["Team"] | string | unknown;
7549
+ identity?: components["schemas"]["Identity"] | string | unknown;
7550
+ ticket?: string;
7551
+ /**
7552
+ * Format: date-time
7553
+ * @description When this log row will be auto-deleted by the Mongo TTL monitor. Absent on rows recorded without `ttl_seconds`.
7554
+ */
7555
+ expires_at?: string;
6370
7556
  /** @description Object is related with this account */
6371
7557
  account: string;
6372
7558
  /**
@@ -6408,14 +7594,16 @@ export interface operations {
6408
7594
  "customdomain/list": {
6409
7595
  parameters: {
6410
7596
  query?: {
6411
- /** @description Start from this cursor */
7597
+ /** @description Number of items per page (max 200) */
7598
+ pageSize?: number;
7599
+ /** @description Cursor for next page */
6412
7600
  cursor?: string;
6413
- /** @description Start from this cursor */
7601
+ /** @description Cursor returned by the previous page */
6414
7602
  next?: string;
6415
- /** @description Size of the results array */
6416
- pageSize?: number;
6417
7603
  /** @description Filter using a FaableQL query */
6418
7604
  query?: string;
7605
+ /** @description Full-text search across: `domain`. */
7606
+ q?: string;
6419
7607
  };
6420
7608
  header?: never;
6421
7609
  path?: never;
@@ -6423,16 +7611,14 @@ export interface operations {
6423
7611
  };
6424
7612
  requestBody?: never;
6425
7613
  responses: {
6426
- /** @description PaginatedResponse */
7614
+ /** @description Default Response */
6427
7615
  200: {
6428
7616
  headers: {
6429
7617
  [name: string]: unknown;
6430
7618
  };
6431
7619
  content: {
6432
7620
  "application/json": {
6433
- /** @description next cursor */
6434
7621
  next: string | null;
6435
- /** @description List of results */
6436
7622
  results: components["schemas"]["Customdomain"][];
6437
7623
  };
6438
7624
  };
@@ -6550,7 +7736,7 @@ export interface operations {
6550
7736
  };
6551
7737
  };
6552
7738
  };
6553
- "customdomain/remove": {
7739
+ "customdomain/delete": {
6554
7740
  parameters: {
6555
7741
  query?: never;
6556
7742
  header?: never;
@@ -6561,12 +7747,43 @@ export interface operations {
6561
7747
  };
6562
7748
  requestBody?: never;
6563
7749
  responses: {
6564
- /** @description Default Response */
7750
+ /** @description Customdomain */
6565
7751
  200: {
6566
7752
  headers: {
6567
7753
  [name: string]: unknown;
6568
7754
  };
6569
- content?: never;
7755
+ content: {
7756
+ "application/json": {
7757
+ /** @description Customdomain ID */
7758
+ id: string;
7759
+ domain: string;
7760
+ token: string;
7761
+ /** @enum {unknown} */
7762
+ status: "PENDING" | "VERIFYING" | "ACTIVE" | "FAILED" | "DEGRADED";
7763
+ attempts: number;
7764
+ /** Format: date-time */
7765
+ nextCheck?: string;
7766
+ /** Format: date-time */
7767
+ lastCheck?: string;
7768
+ /** @description User feedback error from last check */
7769
+ errorLog?: string;
7770
+ /** Format: date-time */
7771
+ verifiedAt?: string;
7772
+ /** @description Object is related with this account */
7773
+ account: string;
7774
+ /**
7775
+ * @description CustomdomainMetadata
7776
+ * @default {}
7777
+ */
7778
+ metadata: {
7779
+ [key: string]: unknown;
7780
+ };
7781
+ /** @description Customdomain creation date */
7782
+ createdAt: string;
7783
+ /** @description Customdomain updated date */
7784
+ updatedAt?: string;
7785
+ };
7786
+ };
6570
7787
  };
6571
7788
  };
6572
7789
  };
@@ -6658,12 +7875,20 @@ export interface operations {
6658
7875
  * @default false
6659
7876
  */
6660
7877
  email_verified: boolean;
7878
+ /** @description How `email_verified` was last set. `manual` — admin flipped the flag via `POST /user/:id`. `verification_flow` — user clicked the verification link. `passwordless_otp` — user completed passwordless OTP login. `team_invite` — user clicked a team invitation link. `email_change` — user confirmed a self-service email change. `federated` — verified by the external IdP on OAuth callback. `null` — the field was cleared (admin un-verified the email). */
7879
+ email_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
7880
+ /** @description ISO 8601 timestamp of when `email_verified` was last flipped to true. */
7881
+ email_verified_at?: string | null;
6661
7882
  /** @description ISO 8601 timestamp of the user's last verified email change. When set, OAuth callbacks will not overwrite `email`/`email_verified` from the federated provider — the manually-chosen email wins. */
6662
7883
  email_change_locked_at?: string | null;
6663
7884
  /** @description contact phone number */
6664
7885
  phone?: string | null;
6665
7886
  /** @description phone is verified */
6666
7887
  phone_verified: boolean;
7888
+ /** @description How `phone_verified` was last set. Same enum as `email_verified_method`. */
7889
+ phone_verified_method?: "manual" | "verification_flow" | "passwordless_otp" | "team_invite" | "email_change" | "federated" | null;
7890
+ /** @description ISO 8601 timestamp of when `phone_verified` was last flipped to true. */
7891
+ phone_verified_at?: string | null;
6667
7892
  /** @description country iso code */
6668
7893
  country_iso?: string | null;
6669
7894
  /** @description user birth_date */
@@ -6786,8 +8011,10 @@ export interface operations {
6786
8011
  /** @description OIDC §3.1.2.1 — maximum allowable elapsed time in seconds since the last End-User authentication. If exceeded, the OP re-authenticates and `auth_time` is REQUIRED in the resulting id_token. */
6787
8012
  max_age?: number;
6788
8013
  prompt?: string;
6789
- /** @description Resource Indicator (RFC 8707). Identifier of the Api the client wants to access. Persisted in the auth state so the token issued at /oauth/token targets the matching Api resource and its `aud` claim is set to this value. */
8014
+ /** @description Auth0-compatible alias for `resource` (RFC 8707). When both are sent they must match. Identifier of the Api the client wants to access; persisted in the auth state so the token issued at /oauth/token targets the matching Api resource. */
6790
8015
  audience?: string;
8016
+ /** @description RFC 8707 Resource Indicator. MUST be an absolute URI without fragment. When matched against a registered Api in the tenant the issued access_token gets `aud = <api.identifier>`. */
8017
+ resource?: string;
6791
8018
  };
6792
8019
  header?: never;
6793
8020
  path?: never;
@@ -6821,8 +8048,10 @@ export interface operations {
6821
8048
  subject_token_type?: string;
6822
8049
  /** @description The device code returned by the authorization server. */
6823
8050
  device_code?: string;
6824
- /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
8051
+ /** @description Auth0-compatible alias for `resource` (RFC 8707). When both are provided they must match. */
6825
8052
  audience?: string;
8053
+ /** @description RFC 8707 Resource Indicator. Absolute URI of the target Api, no fragment. Matched against `Api.identifier` in the tenant. */
8054
+ resource?: string;
6826
8055
  };
6827
8056
  header?: never;
6828
8057
  path?: never;
@@ -6865,8 +8094,10 @@ export interface operations {
6865
8094
  subject_token_type?: string;
6866
8095
  /** @description The device code returned by the authorization server. */
6867
8096
  device_code?: string;
6868
- /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
8097
+ /** @description Auth0-compatible alias for `resource` (RFC 8707). When both are provided they must match. */
6869
8098
  audience?: string;
8099
+ /** @description RFC 8707 Resource Indicator. Absolute URI of the target Api, no fragment. Matched against `Api.identifier` in the tenant. */
8100
+ resource?: string;
6870
8101
  };
6871
8102
  header?: never;
6872
8103
  path?: never;
@@ -6889,8 +8120,10 @@ export interface operations {
6889
8120
  subject_token_type?: string;
6890
8121
  /** @description The device code returned by the authorization server. */
6891
8122
  device_code?: string;
6892
- /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
8123
+ /** @description Auth0-compatible alias for `resource` (RFC 8707). When both are provided they must match. */
6893
8124
  audience?: string;
8125
+ /** @description RFC 8707 Resource Indicator. Absolute URI of the target Api, no fragment. Matched against `Api.identifier` in the tenant. */
8126
+ resource?: string;
6894
8127
  } & {
6895
8128
  [key: string]: unknown;
6896
8129
  };
@@ -7320,8 +8553,10 @@ export interface operations {
7320
8553
  /** @description OIDC §3.1.2.1 — maximum allowable elapsed time in seconds since the last End-User authentication. If exceeded, the OP re-authenticates and `auth_time` is REQUIRED in the resulting id_token. */
7321
8554
  max_age?: number;
7322
8555
  prompt?: string;
7323
- /** @description Resource Indicator (RFC 8707). Identifier of the Api the client wants to access. Persisted in the auth state so the token issued at /oauth/token targets the matching Api resource and its `aud` claim is set to this value. */
8556
+ /** @description Auth0-compatible alias for `resource` (RFC 8707). When both are sent they must match. Identifier of the Api the client wants to access; persisted in the auth state so the token issued at /oauth/token targets the matching Api resource. */
7324
8557
  audience?: string;
8558
+ /** @description RFC 8707 Resource Indicator. MUST be an absolute URI without fragment. When matched against a registered Api in the tenant the issued access_token gets `aud = <api.identifier>`. */
8559
+ resource?: string;
7325
8560
  };
7326
8561
  };
7327
8562
  };