@faable/auth-sdk 1.3.11 → 1.3.12

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.
@@ -60,7 +60,11 @@ export interface paths {
60
60
  */
61
61
  get: operations["account/get"];
62
62
  put?: never;
63
- post?: never;
63
+ /**
64
+ * Update an Account
65
+ * @description Update the Account configuration such as branding (logo and icon URLs).
66
+ */
67
+ post: operations["account/update"];
64
68
  /**
65
69
  * Delete an Account
66
70
  * @description Permanently removes an Account and its associated data. This action cannot be undone.
@@ -584,7 +588,11 @@ export interface paths {
584
588
  */
585
589
  get: operations["api/get"];
586
590
  put?: never;
587
- post?: never;
591
+ /**
592
+ * Update Apis in Account
593
+ * @description Update Apis in Account
594
+ */
595
+ post: operations["api/update"];
588
596
  /**
589
597
  * Delete Api in Account
590
598
  * @description Delete Api in Account
@@ -595,6 +603,26 @@ export interface paths {
595
603
  patch?: never;
596
604
  trace?: never;
597
605
  };
606
+ "/account/keys": {
607
+ parameters: {
608
+ query?: never;
609
+ header?: never;
610
+ path?: never;
611
+ cookie?: never;
612
+ };
613
+ /**
614
+ * Get Account signing keys info
615
+ * @description Returns metadata for the Account signing keys: the current production kid, the kid queued for next rotation, and all kids currently published in the JWK Set. Does not expose private key material.
616
+ */
617
+ get: operations["account/getKeys"];
618
+ put?: never;
619
+ post?: never;
620
+ delete?: never;
621
+ options?: never;
622
+ head?: never;
623
+ patch?: never;
624
+ trace?: never;
625
+ };
598
626
  "/account/keys/rotate": {
599
627
  parameters: {
600
628
  query?: never;
@@ -1285,7 +1313,10 @@ export interface components {
1285
1313
  logo_src?: string | null;
1286
1314
  icon_src?: string | null;
1287
1315
  callback_hostnames: string[];
1316
+ /** @description Shared HMAC secret. Used when token_signing_alg is an HS* algorithm; ignored for RS*\/ES*\/PS*. */
1288
1317
  token_signature: string;
1318
+ /** @description JWA algorithm used to sign tokens issued by this Account. Today only RS256 is implemented. */
1319
+ token_signing_alg: "RS256";
1289
1320
  default_connection?: components["schemas"]["Connection"] | string | unknown;
1290
1321
  enabled_locales: string[];
1291
1322
  team?: string | null;
@@ -1301,6 +1332,8 @@ export interface components {
1301
1332
  /** @description AuthAccount updated date */
1302
1333
  updatedAt?: string;
1303
1334
  };
1335
+ /** @description JWA algorithm used to sign tokens issued by this Account. Today only RS256 is implemented. */
1336
+ TokenSigningAlg: "RS256";
1304
1337
  AccountNotificationSettings: {
1305
1338
  /**
1306
1339
  * @description Send the built-in welcome email on user.created
@@ -1314,7 +1347,7 @@ export interface components {
1314
1347
  id: string;
1315
1348
  connection_name: string;
1316
1349
  /** @enum {unknown} */
1317
- connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc";
1350
+ connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc" | "passwordless_email";
1318
1351
  /** @default null */
1319
1352
  authorize_url: string;
1320
1353
  /** @default null */
@@ -1368,7 +1401,7 @@ export interface components {
1368
1401
  ConnectionCreate: {
1369
1402
  connection_name: string;
1370
1403
  /** @enum {unknown} */
1371
- connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc";
1404
+ connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc" | "passwordless_email";
1372
1405
  authorize_url?: string;
1373
1406
  client_id?: string;
1374
1407
  client_secret?: string;
@@ -1600,7 +1633,7 @@ export interface components {
1600
1633
  locale?: string;
1601
1634
  /** @description A URI pointing to the user's picture. */
1602
1635
  picture?: string;
1603
- /** @description Initial password for this user (mandatory only for auth0 connection strategy) */
1636
+ /** @description Initial password for this user. Only used (and required) when the user is being provisioned against a `database` connection; ignored for federated/social connections. */
1604
1637
  password?: string;
1605
1638
  /** @description User Metadata */
1606
1639
  user_metadata?: {
@@ -1704,9 +1737,12 @@ export interface components {
1704
1737
  Role: {
1705
1738
  /** @description Role ID */
1706
1739
  id: string;
1707
- /** @description Name for this role */
1740
+ /**
1741
+ * @description Short, human-readable identifier for the role (e.g. `admin`, `editor`, `billing-manager`). Surfaced in the dashboard role pickers.
1742
+ * @example admin
1743
+ */
1708
1744
  name: string;
1709
- /** @description Description of this role */
1745
+ /** @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. */
1710
1746
  description: string;
1711
1747
  /** @description Object is related with this account */
1712
1748
  account: string;
@@ -1731,7 +1767,12 @@ export interface components {
1731
1767
  };
1732
1768
  /** @description RoleCreate */
1733
1769
  RoleCreate: {
1770
+ /**
1771
+ * @description Short, human-readable identifier for the role (e.g. `admin`, `editor`).
1772
+ * @example admin
1773
+ */
1734
1774
  name: string;
1775
+ /** @description Free-form explanation of what users in this role are expected to do or have access to. */
1735
1776
  description?: string;
1736
1777
  /** @description Add Metadata */
1737
1778
  metadata?: {
@@ -1746,7 +1787,9 @@ export interface components {
1746
1787
  RoleMember: {
1747
1788
  /** @description RoleMember ID */
1748
1789
  id: string;
1790
+ /** @description Role granted to the user. Returned as an id by default; pass `?expand=role` to inline the full Role object. */
1749
1791
  role: components["schemas"]["Role"] | string | unknown;
1792
+ /** @description User the role is granted to. Returned as an id by default; pass `?expand=user` to inline the full User object. */
1750
1793
  user: components["schemas"]["User"] | string | unknown;
1751
1794
  /** @description Object is related with this account */
1752
1795
  account: string;
@@ -1769,16 +1812,33 @@ export interface components {
1769
1812
  RoleMemberMetadata: {
1770
1813
  [key: string]: unknown;
1771
1814
  };
1815
+ /** @description Payload for granting a role to one or more users in a single call. Posted to `POST /role/:role_id/users`. */
1772
1816
  RoleMemberCreate: {
1817
+ /**
1818
+ * @description List of User ids to grant the role to. Existing role memberships are preserved; passing a user that already holds the role is a no-op.
1819
+ * @example [
1820
+ * "user_6555fd293acc2f0fac0e3452"
1821
+ * ]
1822
+ */
1773
1823
  users: string[];
1774
1824
  };
1775
1825
  /** @description Team */
1776
1826
  Team: {
1777
1827
  /** @description Team ID */
1778
1828
  id: string;
1829
+ /**
1830
+ * @description Human-readable name of the team. Shown in the dashboard and in team-picker UI.
1831
+ * @example Acme Engineering
1832
+ */
1779
1833
  name: string;
1834
+ /**
1835
+ * @description URL-safe identifier auto-derived from `name`. Unique within the tenant; used in routes that address a team by slug.
1836
+ * @example acme-engineering
1837
+ */
1780
1838
  slug: string;
1839
+ /** @description Optional free-form description of the team. */
1781
1840
  description: string | null;
1841
+ /** @description Optional URL of an image used as the team avatar/logo. */
1782
1842
  logo_url: string | null;
1783
1843
  /** @description Object is related with this account */
1784
1844
  account: string;
@@ -1803,7 +1863,12 @@ export interface components {
1803
1863
  };
1804
1864
  /** @description TeamCreate */
1805
1865
  TeamCreate: {
1866
+ /**
1867
+ * @description Human-readable name of the team.
1868
+ * @example Acme Engineering
1869
+ */
1806
1870
  name: string;
1871
+ /** @description Optional free-form description of the team. */
1807
1872
  description?: string;
1808
1873
  /** @description Add Metadata */
1809
1874
  metadata?: {
@@ -1818,8 +1883,11 @@ export interface components {
1818
1883
  TeamMember: {
1819
1884
  /** @description TeamMember ID */
1820
1885
  id: string;
1886
+ /** @description User that belongs to the team. Returned as an id by default; pass `?expand=user` to inline the full User object. */
1821
1887
  user: components["schemas"]["User"] | string | unknown;
1888
+ /** @description Team the user belongs to. Returned as an id by default; pass `?expand=team` to inline the full Team object. */
1822
1889
  team: components["schemas"]["Team"] | string | unknown;
1890
+ /** @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. */
1823
1891
  roles: (components["schemas"]["Role"] | string | unknown)[];
1824
1892
  /** @description Object is related with this account */
1825
1893
  account: string;
@@ -1842,24 +1910,72 @@ export interface components {
1842
1910
  TeamMemberMetadata: {
1843
1911
  [key: string]: unknown;
1844
1912
  };
1913
+ /** @description Payload for adding one or more users to a team in a single call. Posted to `POST /team/:team_id/member`. */
1845
1914
  TeamMemberCreate: {
1915
+ /**
1916
+ * @description List of User ids to add as members of the team. Users already in the team are skipped.
1917
+ * @example [
1918
+ * "user_6555fd293acc2f0fac0e3452"
1919
+ * ]
1920
+ */
1846
1921
  users: string[];
1847
1922
  };
1923
+ /** @description A permission exposed by an API: a single value that may end up in the `permissions` claim of an access_token, plus a human-readable description shown in the consent prompt. */
1848
1924
  Permission: {
1925
+ /**
1926
+ * @description Permission identifier as it appears in the `permissions` claim of an access_token (e.g. `read:users`). Use `<verb>:<resource>` by convention.
1927
+ * @example read:users
1928
+ */
1849
1929
  value: string;
1930
+ /** @description Human-readable explanation shown in the consent prompt. */
1850
1931
  description?: string;
1851
1932
  };
1933
+ /** @description Payload for declaring a single permission inside an Api. */
1852
1934
  PermissionCreate: {
1935
+ /**
1936
+ * @description Permission identifier as it will appear in the `permissions` claim (e.g. `read:users`). Convention: `<verb>:<resource>`.
1937
+ * @example read:users
1938
+ */
1853
1939
  value: string;
1940
+ /** @description Human-readable explanation shown in the consent prompt. */
1854
1941
  description?: string;
1855
1942
  };
1943
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
1944
+ ApiSigningAlg: "RS256";
1945
+ /** @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. */
1946
+ ApiTokenDialect: "access_token" | "access_token_authz";
1856
1947
  /** @description Api */
1857
1948
  Api: {
1858
1949
  /** @description Api ID */
1859
1950
  id: string;
1951
+ /**
1952
+ * @description Human-readable name for the API. Shown in the dashboard and consent prompts.
1953
+ * @example My Backend API
1954
+ */
1860
1955
  name: string;
1956
+ /** @description URL-safe identifier auto-derived from `name`. Unique within the tenant. */
1957
+ slug: string;
1958
+ /**
1959
+ * @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.
1960
+ * @example https://api.faable.com
1961
+ */
1962
+ identifier: string;
1963
+ /** @description Optional human-readable description of the API. */
1861
1964
  description?: string;
1965
+ /** @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. */
1862
1966
  permissions: components["schemas"]["Permission"][];
1967
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
1968
+ signing_alg: "RS256";
1969
+ /** @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. */
1970
+ token_dialect: "access_token" | "access_token_authz";
1971
+ /** @description Access_token lifetime in seconds. Default 86400 (24h). Applied at token issuance time (overrides the generic default). */
1972
+ token_lifetime: number;
1973
+ /** @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. */
1974
+ enforce_policies: boolean;
1975
+ /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
1976
+ allow_offline_access: boolean;
1977
+ /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
1978
+ skip_consent: boolean;
1863
1979
  /** @description Object is related with this account */
1864
1980
  account: string;
1865
1981
  /**
@@ -1881,10 +1997,58 @@ export interface components {
1881
1997
  ApiMetadata: {
1882
1998
  [key: string]: unknown;
1883
1999
  };
2000
+ /** @description Payload for creating an Api (a.k.a. Resource Server / Audience). The `identifier` becomes the `aud` claim in tokens issued for this API and cannot be changed after creation. */
1884
2001
  ApiCreate: {
2002
+ /**
2003
+ * @description Human-readable name for the API.
2004
+ * @example My Backend API
2005
+ */
1885
2006
  name: string;
2007
+ /**
2008
+ * @description Audience URL clients pass as `audience=` when requesting a token for this API. Must be unique within the tenant and is immutable after creation.
2009
+ * @example https://api.faable.com
2010
+ */
2011
+ identifier: string;
2012
+ /** @description Optional human-readable description of the API. */
1886
2013
  description?: string;
2014
+ /**
2015
+ * @description Set of permissions (scopes) this API exposes. Tokens issued with `audience=identifier` will only carry these in their `permissions` claim.
2016
+ * @default []
2017
+ */
1887
2018
  permissions: components["schemas"]["PermissionCreate"][];
2019
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
2020
+ signing_alg?: "RS256";
2021
+ /** @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. */
2022
+ token_dialect?: "access_token" | "access_token_authz";
2023
+ /** @description Access_token lifetime in seconds. Defaults to 86400 (24h) if omitted. */
2024
+ token_lifetime?: number;
2025
+ /** @description When true, requested scopes are filtered against `permissions` at token issuance. */
2026
+ enforce_policies?: boolean;
2027
+ /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
2028
+ allow_offline_access?: boolean;
2029
+ /** @description When true, skip the consent prompt for first-party clients. */
2030
+ skip_consent?: boolean;
2031
+ };
2032
+ /** @description Partial update for an Api. `identifier` is immutable and not present here; recreate the API if you need to change it. */
2033
+ ApiUpdate: {
2034
+ /** @description Human-readable name for the API. */
2035
+ name?: string;
2036
+ /** @description Optional human-readable description of the API. */
2037
+ description?: string;
2038
+ /** @description Replaces the full permissions list. Tokens issued AFTER the update will use the new list; tokens already in circulation are unchanged. */
2039
+ permissions?: components["schemas"]["PermissionCreate"][];
2040
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
2041
+ signing_alg?: "RS256";
2042
+ /** @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. */
2043
+ token_dialect?: "access_token" | "access_token_authz";
2044
+ /** @description Access_token lifetime in seconds. */
2045
+ token_lifetime?: number;
2046
+ /** @description When true, requested scopes are filtered against `permissions` at token issuance. */
2047
+ enforce_policies?: boolean;
2048
+ /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
2049
+ allow_offline_access?: boolean;
2050
+ /** @description When true, skip the consent prompt for first-party clients. */
2051
+ skip_consent?: boolean;
1888
2052
  };
1889
2053
  /** @description Action */
1890
2054
  Action: {
@@ -2381,6 +2545,14 @@ export interface components {
2381
2545
  AuthAccountMetadataCreate: {
2382
2546
  [key: string]: unknown;
2383
2547
  };
2548
+ /** @description AuthAccountUpdate */
2549
+ AuthAccountUpdate: {
2550
+ logo_src?: string | null;
2551
+ icon_src?: string | null;
2552
+ callback_hostnames?: string[];
2553
+ default_connection?: string | null;
2554
+ enabled_locales?: string[];
2555
+ };
2384
2556
  OAuthTokenParams: {
2385
2557
  /** @description Grant Type. https://oauth.net/2/grant-types/ */
2386
2558
  grant_type?: "authorization_code" | "client_credentials" | "refresh_token" | "password" | "http://auth0.com/oauth/grant-type/passwordless/otp" | "urn:ietf:params:oauth:grant-type:token-exchange" | "urn:ietf:params:oauth:grant-type:device_code";
@@ -2396,6 +2568,8 @@ export interface components {
2396
2568
  subject_token_type?: string;
2397
2569
  /** @description The device code returned by the authorization server. */
2398
2570
  device_code?: string;
2571
+ /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
2572
+ audience?: string;
2399
2573
  } & {
2400
2574
  [key: string]: unknown;
2401
2575
  };
@@ -2421,6 +2595,8 @@ export interface components {
2421
2595
  /** @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. */
2422
2596
  max_age?: number;
2423
2597
  prompt?: string;
2598
+ /** @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. */
2599
+ audience?: string;
2424
2600
  };
2425
2601
  LoginCallbackBody: {
2426
2602
  /** @description is always wsignin1.0 */
@@ -2466,7 +2642,10 @@ export interface operations {
2466
2642
  logo_src?: string | null;
2467
2643
  icon_src?: string | null;
2468
2644
  callback_hostnames: string[];
2645
+ /** @description Shared HMAC secret. Used when token_signing_alg is an HS* algorithm; ignored for RS*\/ES*\/PS*. */
2469
2646
  token_signature: string;
2647
+ /** @description JWA algorithm used to sign tokens issued by this Account. Today only RS256 is implemented. */
2648
+ token_signing_alg: "RS256";
2470
2649
  default_connection?: components["schemas"]["Connection"] | string | unknown;
2471
2650
  enabled_locales: string[];
2472
2651
  team?: string | null;
@@ -2560,7 +2739,10 @@ export interface operations {
2560
2739
  logo_src?: string | null;
2561
2740
  icon_src?: string | null;
2562
2741
  callback_hostnames: string[];
2742
+ /** @description Shared HMAC secret. Used when token_signing_alg is an HS* algorithm; ignored for RS*\/ES*\/PS*. */
2563
2743
  token_signature: string;
2744
+ /** @description JWA algorithm used to sign tokens issued by this Account. Today only RS256 is implemented. */
2745
+ token_signing_alg: "RS256";
2564
2746
  default_connection?: components["schemas"]["Connection"] | string | unknown;
2565
2747
  enabled_locales: string[];
2566
2748
  team?: string | null;
@@ -2609,7 +2791,70 @@ export interface operations {
2609
2791
  logo_src?: string | null;
2610
2792
  icon_src?: string | null;
2611
2793
  callback_hostnames: string[];
2794
+ /** @description Shared HMAC secret. Used when token_signing_alg is an HS* algorithm; ignored for RS*\/ES*\/PS*. */
2795
+ token_signature: string;
2796
+ /** @description JWA algorithm used to sign tokens issued by this Account. Today only RS256 is implemented. */
2797
+ token_signing_alg: "RS256";
2798
+ default_connection?: components["schemas"]["Connection"] | string | unknown;
2799
+ enabled_locales: string[];
2800
+ team?: string | null;
2801
+ notification_settings: {
2802
+ /**
2803
+ * @description Send the built-in welcome email on user.created
2804
+ * @default false
2805
+ */
2806
+ welcome_email_enabled: boolean;
2807
+ };
2808
+ /** @description AuthAccount creation date */
2809
+ createdAt: string;
2810
+ /** @description AuthAccount updated date */
2811
+ updatedAt?: string;
2812
+ };
2813
+ };
2814
+ };
2815
+ };
2816
+ };
2817
+ "account/update": {
2818
+ parameters: {
2819
+ query?: never;
2820
+ header?: never;
2821
+ path: {
2822
+ account_id: string;
2823
+ };
2824
+ cookie?: never;
2825
+ };
2826
+ /** @description AuthAccountUpdate */
2827
+ requestBody: {
2828
+ content: {
2829
+ "application/json": {
2830
+ logo_src?: string | null;
2831
+ icon_src?: string | null;
2832
+ callback_hostnames?: string[];
2833
+ default_connection?: string | null;
2834
+ enabled_locales?: string[];
2835
+ };
2836
+ };
2837
+ };
2838
+ responses: {
2839
+ /** @description AuthAccount */
2840
+ 200: {
2841
+ headers: {
2842
+ [name: string]: unknown;
2843
+ };
2844
+ content: {
2845
+ "application/json": {
2846
+ /** @description AuthAccount ID */
2847
+ id: string;
2848
+ name: string;
2849
+ domain: string;
2850
+ slug: string;
2851
+ logo_src?: string | null;
2852
+ icon_src?: string | null;
2853
+ callback_hostnames: string[];
2854
+ /** @description Shared HMAC secret. Used when token_signing_alg is an HS* algorithm; ignored for RS*\/ES*\/PS*. */
2612
2855
  token_signature: string;
2856
+ /** @description JWA algorithm used to sign tokens issued by this Account. Today only RS256 is implemented. */
2857
+ token_signing_alg: "RS256";
2613
2858
  default_connection?: components["schemas"]["Connection"] | string | unknown;
2614
2859
  enabled_locales: string[];
2615
2860
  team?: string | null;
@@ -2667,7 +2912,10 @@ export interface operations {
2667
2912
  logo_src?: string | null;
2668
2913
  icon_src?: string | null;
2669
2914
  callback_hostnames: string[];
2915
+ /** @description Shared HMAC secret. Used when token_signing_alg is an HS* algorithm; ignored for RS*\/ES*\/PS*. */
2670
2916
  token_signature: string;
2917
+ /** @description JWA algorithm used to sign tokens issued by this Account. Today only RS256 is implemented. */
2918
+ token_signing_alg: "RS256";
2671
2919
  default_connection?: components["schemas"]["Connection"] | string | unknown;
2672
2920
  enabled_locales: string[];
2673
2921
  team?: string | null;
@@ -2698,8 +2946,6 @@ export interface operations {
2698
2946
  pageSize?: number;
2699
2947
  /** @description Filter using a FaableQL query */
2700
2948
  query?: string;
2701
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
2702
- expand?: string[];
2703
2949
  };
2704
2950
  header?: never;
2705
2951
  path?: never;
@@ -2736,7 +2982,7 @@ export interface operations {
2736
2982
  "application/json": {
2737
2983
  connection_name: string;
2738
2984
  /** @enum {unknown} */
2739
- connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc";
2985
+ connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc" | "passwordless_email";
2740
2986
  authorize_url?: string;
2741
2987
  client_id?: string;
2742
2988
  client_secret?: string;
@@ -2773,7 +3019,7 @@ export interface operations {
2773
3019
  id: string;
2774
3020
  connection_name: string;
2775
3021
  /** @enum {unknown} */
2776
- connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc";
3022
+ connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc" | "passwordless_email";
2777
3023
  /** @default null */
2778
3024
  authorize_url: string;
2779
3025
  /** @default null */
@@ -2822,10 +3068,7 @@ export interface operations {
2822
3068
  };
2823
3069
  "connection/get": {
2824
3070
  parameters: {
2825
- query?: {
2826
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
2827
- expand?: string[];
2828
- };
3071
+ query?: never;
2829
3072
  header?: never;
2830
3073
  path: {
2831
3074
  connection_id: string;
@@ -2845,7 +3088,7 @@ export interface operations {
2845
3088
  id: string;
2846
3089
  connection_name: string;
2847
3090
  /** @enum {unknown} */
2848
- connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc";
3091
+ connection_type: "database" | "custom" | "github" | "figma" | "google_oauth2" | "oidc" | "passwordless_email";
2849
3092
  /** @default null */
2850
3093
  authorize_url: string;
2851
3094
  /** @default null */
@@ -2923,8 +3166,6 @@ export interface operations {
2923
3166
  pageSize?: number;
2924
3167
  /** @description Filter using a FaableQL query */
2925
3168
  query?: string;
2926
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
2927
- expand?: string[];
2928
3169
  };
2929
3170
  header?: never;
2930
3171
  path?: never;
@@ -3025,10 +3266,7 @@ export interface operations {
3025
3266
  };
3026
3267
  "client/get": {
3027
3268
  parameters: {
3028
- query?: {
3029
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3030
- expand?: string[];
3031
- };
3269
+ query?: never;
3032
3270
  header?: never;
3033
3271
  path: {
3034
3272
  client_id: string;
@@ -3120,8 +3358,6 @@ export interface operations {
3120
3358
  pageSize?: number;
3121
3359
  /** @description Filter using a FaableQL query */
3122
3360
  query?: string;
3123
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3124
- expand?: string[];
3125
3361
  };
3126
3362
  header?: never;
3127
3363
  path?: never;
@@ -3172,7 +3408,7 @@ export interface operations {
3172
3408
  locale?: string;
3173
3409
  /** @description A URI pointing to the user's picture. */
3174
3410
  picture?: string;
3175
- /** @description Initial password for this user (mandatory only for auth0 connection strategy) */
3411
+ /** @description Initial password for this user. Only used (and required) when the user is being provisioned against a `database` connection; ignored for federated/social connections. */
3176
3412
  password?: string;
3177
3413
  /** @description User Metadata */
3178
3414
  user_metadata?: {
@@ -3286,10 +3522,7 @@ export interface operations {
3286
3522
  };
3287
3523
  "user/get": {
3288
3524
  parameters: {
3289
- query?: {
3290
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3291
- expand?: string[];
3292
- };
3525
+ query?: never;
3293
3526
  header?: never;
3294
3527
  path: {
3295
3528
  user_id: string;
@@ -3570,8 +3803,8 @@ export interface operations {
3570
3803
  pageSize?: number;
3571
3804
  /** @description Filter using a FaableQL query */
3572
3805
  query?: string;
3573
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3574
- expand?: string[];
3806
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
3807
+ expand?: ("user" | "connection")[];
3575
3808
  };
3576
3809
  header?: never;
3577
3810
  path?: never;
@@ -3654,8 +3887,8 @@ export interface operations {
3654
3887
  "identity/get": {
3655
3888
  parameters: {
3656
3889
  query?: {
3657
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3658
- expand?: string[];
3890
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
3891
+ expand?: ("user" | "connection")[];
3659
3892
  };
3660
3893
  header?: never;
3661
3894
  path: {
@@ -3730,8 +3963,6 @@ export interface operations {
3730
3963
  pageSize?: number;
3731
3964
  /** @description Filter using a FaableQL query */
3732
3965
  query?: string;
3733
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3734
- expand?: string[];
3735
3966
  };
3736
3967
  header?: never;
3737
3968
  path?: never;
@@ -3766,7 +3997,12 @@ export interface operations {
3766
3997
  requestBody: {
3767
3998
  content: {
3768
3999
  "application/json": {
4000
+ /**
4001
+ * @description Short, human-readable identifier for the role (e.g. `admin`, `editor`).
4002
+ * @example admin
4003
+ */
3769
4004
  name: string;
4005
+ /** @description Free-form explanation of what users in this role are expected to do or have access to. */
3770
4006
  description?: string;
3771
4007
  /** @description Add Metadata */
3772
4008
  metadata?: {
@@ -3785,9 +4021,12 @@ export interface operations {
3785
4021
  "application/json": {
3786
4022
  /** @description Role ID */
3787
4023
  id: string;
3788
- /** @description Name for this role */
4024
+ /**
4025
+ * @description Short, human-readable identifier for the role (e.g. `admin`, `editor`, `billing-manager`). Surfaced in the dashboard role pickers.
4026
+ * @example admin
4027
+ */
3789
4028
  name: string;
3790
- /** @description Description of this role */
4029
+ /** @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. */
3791
4030
  description: string;
3792
4031
  /** @description Object is related with this account */
3793
4032
  account: string;
@@ -3809,10 +4048,7 @@ export interface operations {
3809
4048
  };
3810
4049
  "role/get": {
3811
4050
  parameters: {
3812
- query?: {
3813
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3814
- expand?: string[];
3815
- };
4051
+ query?: never;
3816
4052
  header?: never;
3817
4053
  path: {
3818
4054
  role_id: string;
@@ -3830,9 +4066,12 @@ export interface operations {
3830
4066
  "application/json": {
3831
4067
  /** @description Role ID */
3832
4068
  id: string;
3833
- /** @description Name for this role */
4069
+ /**
4070
+ * @description Short, human-readable identifier for the role (e.g. `admin`, `editor`, `billing-manager`). Surfaced in the dashboard role pickers.
4071
+ * @example admin
4072
+ */
3834
4073
  name: string;
3835
- /** @description Description of this role */
4074
+ /** @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. */
3836
4075
  description: string;
3837
4076
  /** @description Object is related with this account */
3838
4077
  account: string;
@@ -3915,9 +4154,16 @@ export interface operations {
3915
4154
  };
3916
4155
  cookie?: never;
3917
4156
  };
4157
+ /** @description Payload for granting a role to one or more users in a single call. Posted to `POST /role/:role_id/users`. */
3918
4158
  requestBody: {
3919
4159
  content: {
3920
4160
  "application/json": {
4161
+ /**
4162
+ * @description List of User ids to grant the role to. Existing role memberships are preserved; passing a user that already holds the role is a no-op.
4163
+ * @example [
4164
+ * "user_6555fd293acc2f0fac0e3452"
4165
+ * ]
4166
+ */
3921
4167
  users: string[];
3922
4168
  };
3923
4169
  };
@@ -3943,8 +4189,8 @@ export interface operations {
3943
4189
  pageSize?: number;
3944
4190
  /** @description Filter using a FaableQL query */
3945
4191
  query?: string;
3946
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
3947
- expand?: string[];
4192
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
4193
+ expand?: ("user" | "role")[];
3948
4194
  };
3949
4195
  header?: never;
3950
4196
  path?: never;
@@ -3975,9 +4221,16 @@ export interface operations {
3975
4221
  path?: never;
3976
4222
  cookie?: never;
3977
4223
  };
4224
+ /** @description Payload for granting a role to one or more users in a single call. Posted to `POST /role/:role_id/users`. */
3978
4225
  requestBody: {
3979
4226
  content: {
3980
4227
  "application/json": {
4228
+ /**
4229
+ * @description List of User ids to grant the role to. Existing role memberships are preserved; passing a user that already holds the role is a no-op.
4230
+ * @example [
4231
+ * "user_6555fd293acc2f0fac0e3452"
4232
+ * ]
4233
+ */
3981
4234
  users: string[];
3982
4235
  };
3983
4236
  };
@@ -3992,7 +4245,9 @@ export interface operations {
3992
4245
  "application/json": {
3993
4246
  /** @description RoleMember ID */
3994
4247
  id: string;
4248
+ /** @description Role granted to the user. Returned as an id by default; pass `?expand=role` to inline the full Role object. */
3995
4249
  role: components["schemas"]["Role"] | string | unknown;
4250
+ /** @description User the role is granted to. Returned as an id by default; pass `?expand=user` to inline the full User object. */
3996
4251
  user: components["schemas"]["User"] | string | unknown;
3997
4252
  /** @description Object is related with this account */
3998
4253
  account: string;
@@ -4015,8 +4270,8 @@ export interface operations {
4015
4270
  "rolemember/get": {
4016
4271
  parameters: {
4017
4272
  query?: {
4018
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4019
- expand?: string[];
4273
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
4274
+ expand?: ("user" | "role")[];
4020
4275
  };
4021
4276
  header?: never;
4022
4277
  path: {
@@ -4035,7 +4290,9 @@ export interface operations {
4035
4290
  "application/json": {
4036
4291
  /** @description RoleMember ID */
4037
4292
  id: string;
4293
+ /** @description Role granted to the user. Returned as an id by default; pass `?expand=role` to inline the full Role object. */
4038
4294
  role: components["schemas"]["Role"] | string | unknown;
4295
+ /** @description User the role is granted to. Returned as an id by default; pass `?expand=user` to inline the full User object. */
4039
4296
  user: components["schemas"]["User"] | string | unknown;
4040
4297
  /** @description Object is related with this account */
4041
4298
  account: string;
@@ -4086,8 +4343,6 @@ export interface operations {
4086
4343
  pageSize?: number;
4087
4344
  /** @description Filter using a FaableQL query */
4088
4345
  query?: string;
4089
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4090
- expand?: string[];
4091
4346
  };
4092
4347
  header?: never;
4093
4348
  path?: never;
@@ -4122,7 +4377,12 @@ export interface operations {
4122
4377
  requestBody: {
4123
4378
  content: {
4124
4379
  "application/json": {
4380
+ /**
4381
+ * @description Human-readable name of the team.
4382
+ * @example Acme Engineering
4383
+ */
4125
4384
  name: string;
4385
+ /** @description Optional free-form description of the team. */
4126
4386
  description?: string;
4127
4387
  /** @description Add Metadata */
4128
4388
  metadata?: {
@@ -4141,9 +4401,19 @@ export interface operations {
4141
4401
  "application/json": {
4142
4402
  /** @description Team ID */
4143
4403
  id: string;
4404
+ /**
4405
+ * @description Human-readable name of the team. Shown in the dashboard and in team-picker UI.
4406
+ * @example Acme Engineering
4407
+ */
4144
4408
  name: string;
4409
+ /**
4410
+ * @description URL-safe identifier auto-derived from `name`. Unique within the tenant; used in routes that address a team by slug.
4411
+ * @example acme-engineering
4412
+ */
4145
4413
  slug: string;
4414
+ /** @description Optional free-form description of the team. */
4146
4415
  description: string | null;
4416
+ /** @description Optional URL of an image used as the team avatar/logo. */
4147
4417
  logo_url: string | null;
4148
4418
  /** @description Object is related with this account */
4149
4419
  account: string;
@@ -4165,10 +4435,7 @@ export interface operations {
4165
4435
  };
4166
4436
  "team/get": {
4167
4437
  parameters: {
4168
- query?: {
4169
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4170
- expand?: string[];
4171
- };
4438
+ query?: never;
4172
4439
  header?: never;
4173
4440
  path: {
4174
4441
  team_id: string;
@@ -4186,9 +4453,19 @@ export interface operations {
4186
4453
  "application/json": {
4187
4454
  /** @description Team ID */
4188
4455
  id: string;
4456
+ /**
4457
+ * @description Human-readable name of the team. Shown in the dashboard and in team-picker UI.
4458
+ * @example Acme Engineering
4459
+ */
4189
4460
  name: string;
4461
+ /**
4462
+ * @description URL-safe identifier auto-derived from `name`. Unique within the tenant; used in routes that address a team by slug.
4463
+ * @example acme-engineering
4464
+ */
4190
4465
  slug: string;
4466
+ /** @description Optional free-form description of the team. */
4191
4467
  description: string | null;
4468
+ /** @description Optional URL of an image used as the team avatar/logo. */
4192
4469
  logo_url: string | null;
4193
4470
  /** @description Object is related with this account */
4194
4471
  account: string;
@@ -4239,8 +4516,8 @@ export interface operations {
4239
4516
  pageSize?: number;
4240
4517
  /** @description Filter using a FaableQL query */
4241
4518
  query?: string;
4242
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4243
- expand?: string[];
4519
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
4520
+ expand?: ("user" | "team" | "roles")[];
4244
4521
  };
4245
4522
  header?: never;
4246
4523
  path?: never;
@@ -4271,9 +4548,16 @@ export interface operations {
4271
4548
  path?: never;
4272
4549
  cookie?: never;
4273
4550
  };
4551
+ /** @description Payload for adding one or more users to a team in a single call. Posted to `POST /team/:team_id/member`. */
4274
4552
  requestBody: {
4275
4553
  content: {
4276
4554
  "application/json": {
4555
+ /**
4556
+ * @description List of User ids to add as members of the team. Users already in the team are skipped.
4557
+ * @example [
4558
+ * "user_6555fd293acc2f0fac0e3452"
4559
+ * ]
4560
+ */
4277
4561
  users: string[];
4278
4562
  };
4279
4563
  };
@@ -4288,8 +4572,11 @@ export interface operations {
4288
4572
  "application/json": {
4289
4573
  /** @description TeamMember ID */
4290
4574
  id: string;
4575
+ /** @description User that belongs to the team. Returned as an id by default; pass `?expand=user` to inline the full User object. */
4291
4576
  user: components["schemas"]["User"] | string | unknown;
4577
+ /** @description Team the user belongs to. Returned as an id by default; pass `?expand=team` to inline the full Team object. */
4292
4578
  team: components["schemas"]["Team"] | string | unknown;
4579
+ /** @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. */
4293
4580
  roles: (components["schemas"]["Role"] | string | unknown)[];
4294
4581
  /** @description Object is related with this account */
4295
4582
  account: string;
@@ -4312,8 +4599,8 @@ export interface operations {
4312
4599
  "teammember/get": {
4313
4600
  parameters: {
4314
4601
  query?: {
4315
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4316
- expand?: string[];
4602
+ /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `?expand=user`). */
4603
+ expand?: ("user" | "team" | "roles")[];
4317
4604
  };
4318
4605
  header?: never;
4319
4606
  path: {
@@ -4332,8 +4619,11 @@ export interface operations {
4332
4619
  "application/json": {
4333
4620
  /** @description TeamMember ID */
4334
4621
  id: string;
4622
+ /** @description User that belongs to the team. Returned as an id by default; pass `?expand=user` to inline the full User object. */
4335
4623
  user: components["schemas"]["User"] | string | unknown;
4624
+ /** @description Team the user belongs to. Returned as an id by default; pass `?expand=team` to inline the full Team object. */
4336
4625
  team: components["schemas"]["Team"] | string | unknown;
4626
+ /** @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. */
4337
4627
  roles: (components["schemas"]["Role"] | string | unknown)[];
4338
4628
  /** @description Object is related with this account */
4339
4629
  account: string;
@@ -4416,9 +4706,16 @@ export interface operations {
4416
4706
  };
4417
4707
  cookie?: never;
4418
4708
  };
4709
+ /** @description Payload for adding one or more users to a team in a single call. Posted to `POST /team/:team_id/member`. */
4419
4710
  requestBody: {
4420
4711
  content: {
4421
4712
  "application/json": {
4713
+ /**
4714
+ * @description List of User ids to add as members of the team. Users already in the team are skipped.
4715
+ * @example [
4716
+ * "user_6555fd293acc2f0fac0e3452"
4717
+ * ]
4718
+ */
4422
4719
  users: string[];
4423
4720
  };
4424
4721
  };
@@ -4433,8 +4730,11 @@ export interface operations {
4433
4730
  "application/json": {
4434
4731
  /** @description TeamMember ID */
4435
4732
  id: string;
4733
+ /** @description User that belongs to the team. Returned as an id by default; pass `?expand=user` to inline the full User object. */
4436
4734
  user: components["schemas"]["User"] | string | unknown;
4735
+ /** @description Team the user belongs to. Returned as an id by default; pass `?expand=team` to inline the full Team object. */
4437
4736
  team: components["schemas"]["Team"] | string | unknown;
4737
+ /** @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. */
4438
4738
  roles: (components["schemas"]["Role"] | string | unknown)[];
4439
4739
  /** @description Object is related with this account */
4440
4740
  account: string;
@@ -4482,8 +4782,11 @@ export interface operations {
4482
4782
  "application/json": {
4483
4783
  /** @description TeamMember ID */
4484
4784
  id: string;
4785
+ /** @description User that belongs to the team. Returned as an id by default; pass `?expand=user` to inline the full User object. */
4485
4786
  user: components["schemas"]["User"] | string | unknown;
4787
+ /** @description Team the user belongs to. Returned as an id by default; pass `?expand=team` to inline the full Team object. */
4486
4788
  team: components["schemas"]["Team"] | string | unknown;
4789
+ /** @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. */
4487
4790
  roles: (components["schemas"]["Role"] | string | unknown)[];
4488
4791
  /** @description Object is related with this account */
4489
4792
  account: string;
@@ -4514,8 +4817,6 @@ export interface operations {
4514
4817
  pageSize?: number;
4515
4818
  /** @description Filter using a FaableQL query */
4516
4819
  query?: string;
4517
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4518
- expand?: string[];
4519
4820
  };
4520
4821
  header?: never;
4521
4822
  path?: never;
@@ -4546,12 +4847,39 @@ export interface operations {
4546
4847
  path?: never;
4547
4848
  cookie?: never;
4548
4849
  };
4850
+ /** @description Payload for creating an Api (a.k.a. Resource Server / Audience). The `identifier` becomes the `aud` claim in tokens issued for this API and cannot be changed after creation. */
4549
4851
  requestBody: {
4550
4852
  content: {
4551
4853
  "application/json": {
4854
+ /**
4855
+ * @description Human-readable name for the API.
4856
+ * @example My Backend API
4857
+ */
4552
4858
  name: string;
4859
+ /**
4860
+ * @description Audience URL clients pass as `audience=` when requesting a token for this API. Must be unique within the tenant and is immutable after creation.
4861
+ * @example https://api.faable.com
4862
+ */
4863
+ identifier: string;
4864
+ /** @description Optional human-readable description of the API. */
4553
4865
  description?: string;
4554
- permissions: components["schemas"]["PermissionCreate"][];
4866
+ /**
4867
+ * @description Set of permissions (scopes) this API exposes. Tokens issued with `audience=identifier` will only carry these in their `permissions` claim.
4868
+ * @default []
4869
+ */
4870
+ permissions?: components["schemas"]["PermissionCreate"][];
4871
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
4872
+ signing_alg?: "RS256";
4873
+ /** @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. */
4874
+ token_dialect?: "access_token" | "access_token_authz";
4875
+ /** @description Access_token lifetime in seconds. Defaults to 86400 (24h) if omitted. */
4876
+ token_lifetime?: number;
4877
+ /** @description When true, requested scopes are filtered against `permissions` at token issuance. */
4878
+ enforce_policies?: boolean;
4879
+ /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
4880
+ allow_offline_access?: boolean;
4881
+ /** @description When true, skip the consent prompt for first-party clients. */
4882
+ skip_consent?: boolean;
4555
4883
  };
4556
4884
  };
4557
4885
  };
@@ -4565,9 +4893,34 @@ export interface operations {
4565
4893
  "application/json": {
4566
4894
  /** @description Api ID */
4567
4895
  id: string;
4896
+ /**
4897
+ * @description Human-readable name for the API. Shown in the dashboard and consent prompts.
4898
+ * @example My Backend API
4899
+ */
4568
4900
  name: string;
4901
+ /** @description URL-safe identifier auto-derived from `name`. Unique within the tenant. */
4902
+ slug: string;
4903
+ /**
4904
+ * @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.
4905
+ * @example https://api.faable.com
4906
+ */
4907
+ identifier: string;
4908
+ /** @description Optional human-readable description of the API. */
4569
4909
  description?: string;
4910
+ /** @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. */
4570
4911
  permissions: components["schemas"]["Permission"][];
4912
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
4913
+ signing_alg: "RS256";
4914
+ /** @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. */
4915
+ token_dialect: "access_token" | "access_token_authz";
4916
+ /** @description Access_token lifetime in seconds. Default 86400 (24h). Applied at token issuance time (overrides the generic default). */
4917
+ token_lifetime: number;
4918
+ /** @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. */
4919
+ enforce_policies: boolean;
4920
+ /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
4921
+ allow_offline_access: boolean;
4922
+ /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
4923
+ skip_consent: boolean;
4571
4924
  /** @description Object is related with this account */
4572
4925
  account: string;
4573
4926
  /**
@@ -4588,10 +4941,7 @@ export interface operations {
4588
4941
  };
4589
4942
  "api/get": {
4590
4943
  parameters: {
4591
- query?: {
4592
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4593
- expand?: string[];
4594
- };
4944
+ query?: never;
4595
4945
  header?: never;
4596
4946
  path: {
4597
4947
  api_id: string;
@@ -4609,9 +4959,124 @@ export interface operations {
4609
4959
  "application/json": {
4610
4960
  /** @description Api ID */
4611
4961
  id: string;
4962
+ /**
4963
+ * @description Human-readable name for the API. Shown in the dashboard and consent prompts.
4964
+ * @example My Backend API
4965
+ */
4966
+ name: string;
4967
+ /** @description URL-safe identifier auto-derived from `name`. Unique within the tenant. */
4968
+ slug: string;
4969
+ /**
4970
+ * @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.
4971
+ * @example https://api.faable.com
4972
+ */
4973
+ identifier: string;
4974
+ /** @description Optional human-readable description of the API. */
4975
+ description?: string;
4976
+ /** @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. */
4977
+ permissions: components["schemas"]["Permission"][];
4978
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
4979
+ signing_alg: "RS256";
4980
+ /** @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. */
4981
+ token_dialect: "access_token" | "access_token_authz";
4982
+ /** @description Access_token lifetime in seconds. Default 86400 (24h). Applied at token issuance time (overrides the generic default). */
4983
+ token_lifetime: number;
4984
+ /** @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. */
4985
+ enforce_policies: boolean;
4986
+ /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
4987
+ allow_offline_access: boolean;
4988
+ /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
4989
+ skip_consent: boolean;
4990
+ /** @description Object is related with this account */
4991
+ account: string;
4992
+ /**
4993
+ * @description ApiMetadata
4994
+ * @default {}
4995
+ */
4996
+ metadata: {
4997
+ [key: string]: unknown;
4998
+ };
4999
+ /** @description Api creation date */
5000
+ createdAt: string;
5001
+ /** @description Api updated date */
5002
+ updatedAt?: string;
5003
+ };
5004
+ };
5005
+ };
5006
+ };
5007
+ };
5008
+ "api/update": {
5009
+ parameters: {
5010
+ query?: never;
5011
+ header?: never;
5012
+ path: {
5013
+ api_id: string;
5014
+ };
5015
+ cookie?: never;
5016
+ };
5017
+ /** @description Partial update for an Api. `identifier` is immutable and not present here; recreate the API if you need to change it. */
5018
+ requestBody: {
5019
+ content: {
5020
+ "application/json": {
5021
+ /** @description Human-readable name for the API. */
5022
+ name?: string;
5023
+ /** @description Optional human-readable description of the API. */
5024
+ description?: string;
5025
+ /** @description Replaces the full permissions list. Tokens issued AFTER the update will use the new list; tokens already in circulation are unchanged. */
5026
+ permissions?: components["schemas"]["PermissionCreate"][];
5027
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
5028
+ signing_alg?: "RS256";
5029
+ /** @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. */
5030
+ token_dialect?: "access_token" | "access_token_authz";
5031
+ /** @description Access_token lifetime in seconds. */
5032
+ token_lifetime?: number;
5033
+ /** @description When true, requested scopes are filtered against `permissions` at token issuance. */
5034
+ enforce_policies?: boolean;
5035
+ /** @description When true, clients can request `offline_access` and receive a refresh_token for this API. */
5036
+ allow_offline_access?: boolean;
5037
+ /** @description When true, skip the consent prompt for first-party clients. */
5038
+ skip_consent?: boolean;
5039
+ };
5040
+ };
5041
+ };
5042
+ responses: {
5043
+ /** @description Api */
5044
+ 200: {
5045
+ headers: {
5046
+ [name: string]: unknown;
5047
+ };
5048
+ content: {
5049
+ "application/json": {
5050
+ /** @description Api ID */
5051
+ id: string;
5052
+ /**
5053
+ * @description Human-readable name for the API. Shown in the dashboard and consent prompts.
5054
+ * @example My Backend API
5055
+ */
4612
5056
  name: string;
5057
+ /** @description URL-safe identifier auto-derived from `name`. Unique within the tenant. */
5058
+ slug: string;
5059
+ /**
5060
+ * @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.
5061
+ * @example https://api.faable.com
5062
+ */
5063
+ identifier: string;
5064
+ /** @description Optional human-readable description of the API. */
4613
5065
  description?: string;
5066
+ /** @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. */
4614
5067
  permissions: components["schemas"]["Permission"][];
5068
+ /** @description JWA algorithm used to sign access_tokens issued for this API. Currently only RS256 (the account keystore default) is implemented. */
5069
+ signing_alg: "RS256";
5070
+ /** @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. */
5071
+ token_dialect: "access_token" | "access_token_authz";
5072
+ /** @description Access_token lifetime in seconds. Default 86400 (24h). Applied at token issuance time (overrides the generic default). */
5073
+ token_lifetime: number;
5074
+ /** @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. */
5075
+ enforce_policies: boolean;
5076
+ /** @description When true, the API is eligible to be the target of a `refresh_token` (i.e. clients can request `offline_access` against it). */
5077
+ allow_offline_access: boolean;
5078
+ /** @description When true, the consent prompt is skipped for first-party clients (clients owned by the same tenant as the API). */
5079
+ skip_consent: boolean;
4615
5080
  /** @description Object is related with this account */
4616
5081
  account: string;
4617
5082
  /**
@@ -4650,6 +5115,33 @@ export interface operations {
4650
5115
  };
4651
5116
  };
4652
5117
  };
5118
+ "account/getKeys": {
5119
+ parameters: {
5120
+ query?: never;
5121
+ header?: never;
5122
+ path?: never;
5123
+ cookie?: never;
5124
+ };
5125
+ requestBody?: never;
5126
+ responses: {
5127
+ /** @description Default Response */
5128
+ 200: {
5129
+ headers: {
5130
+ [name: string]: unknown;
5131
+ };
5132
+ content: {
5133
+ "application/json": {
5134
+ /** @description kid currently used to sign new tokens */
5135
+ production_kid: string;
5136
+ /** @description kid that will be promoted on the next rotation */
5137
+ next_in_queue_kid: string;
5138
+ /** @description All kids currently published in the JWK Set */
5139
+ kids_active: string[];
5140
+ };
5141
+ };
5142
+ };
5143
+ };
5144
+ };
4653
5145
  "account/rotateKeys": {
4654
5146
  parameters: {
4655
5147
  query?: never;
@@ -4696,8 +5188,6 @@ export interface operations {
4696
5188
  pageSize?: number;
4697
5189
  /** @description Filter using a FaableQL query */
4698
5190
  query?: string;
4699
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4700
- expand?: string[];
4701
5191
  };
4702
5192
  header?: never;
4703
5193
  path?: never;
@@ -4800,10 +5290,7 @@ export interface operations {
4800
5290
  };
4801
5291
  "action/get": {
4802
5292
  parameters: {
4803
- query?: {
4804
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4805
- expand?: string[];
4806
- };
5293
+ query?: never;
4807
5294
  header?: never;
4808
5295
  path: {
4809
5296
  action_id: string;
@@ -4890,8 +5377,6 @@ export interface operations {
4890
5377
  pageSize?: number;
4891
5378
  /** @description Filter using a FaableQL query */
4892
5379
  query?: string;
4893
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
4894
- expand?: string[];
4895
5380
  };
4896
5381
  header?: never;
4897
5382
  path?: never;
@@ -5028,10 +5513,7 @@ export interface operations {
5028
5513
  };
5029
5514
  "notificationsubscription/get": {
5030
5515
  parameters: {
5031
- query?: {
5032
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
5033
- expand?: string[];
5034
- };
5516
+ query?: never;
5035
5517
  header?: never;
5036
5518
  path: {
5037
5519
  notificationsubscription_id: string;
@@ -5249,8 +5731,6 @@ export interface operations {
5249
5731
  pageSize?: number;
5250
5732
  /** @description Filter using a FaableQL query */
5251
5733
  query?: string;
5252
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
5253
- expand?: string[];
5254
5734
  };
5255
5735
  header?: never;
5256
5736
  path?: never;
@@ -5276,10 +5756,7 @@ export interface operations {
5276
5756
  };
5277
5757
  "log/get": {
5278
5758
  parameters: {
5279
- query?: {
5280
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
5281
- expand?: string[];
5282
- };
5759
+ query?: never;
5283
5760
  header?: never;
5284
5761
  path: {
5285
5762
  log_id: string;
@@ -5354,8 +5831,6 @@ export interface operations {
5354
5831
  pageSize?: number;
5355
5832
  /** @description Filter using a FaableQL query */
5356
5833
  query?: string;
5357
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
5358
- expand?: string[];
5359
5834
  };
5360
5835
  header?: never;
5361
5836
  path?: never;
@@ -5441,10 +5916,7 @@ export interface operations {
5441
5916
  };
5442
5917
  "customdomain/get": {
5443
5918
  parameters: {
5444
- query?: {
5445
- /** @description Expand id-only fields in the response. Pass one path per entry (e.g. `expand=user&expand=team`). */
5446
- expand?: string[];
5447
- };
5919
+ query?: never;
5448
5920
  header?: never;
5449
5921
  path: {
5450
5922
  customdomain_id: string;
@@ -5547,6 +6019,7 @@ export interface operations {
5547
6019
  email: string;
5548
6020
  /** @default link */
5549
6021
  send: string;
6022
+ connection_id?: string;
5550
6023
  auth_params?: {
5551
6024
  [key: string]: string;
5552
6025
  };
@@ -5726,6 +6199,8 @@ export interface operations {
5726
6199
  /** @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. */
5727
6200
  max_age?: number;
5728
6201
  prompt?: string;
6202
+ /** @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. */
6203
+ audience?: string;
5729
6204
  };
5730
6205
  header?: never;
5731
6206
  path?: never;
@@ -5759,6 +6234,8 @@ export interface operations {
5759
6234
  subject_token_type?: string;
5760
6235
  /** @description The device code returned by the authorization server. */
5761
6236
  device_code?: string;
6237
+ /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
6238
+ audience?: string;
5762
6239
  };
5763
6240
  header?: never;
5764
6241
  path?: never;
@@ -5801,6 +6278,8 @@ export interface operations {
5801
6278
  subject_token_type?: string;
5802
6279
  /** @description The device code returned by the authorization server. */
5803
6280
  device_code?: string;
6281
+ /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
6282
+ audience?: string;
5804
6283
  };
5805
6284
  header?: never;
5806
6285
  path?: never;
@@ -5823,6 +6302,8 @@ export interface operations {
5823
6302
  subject_token_type?: string;
5824
6303
  /** @description The device code returned by the authorization server. */
5825
6304
  device_code?: string;
6305
+ /** @description Identifier of the API the client wants to access. Matched against `Api.identifier` in the tenant. */
6306
+ audience?: string;
5826
6307
  } & {
5827
6308
  [key: string]: unknown;
5828
6309
  };
@@ -5861,6 +6342,8 @@ export interface operations {
5861
6342
  client_id: string;
5862
6343
  /** @description The scope of the access request. */
5863
6344
  scope?: string;
6345
+ /** @description Identifier of the API the device wants to access. Resolved against the tenant Api resources (`Api.identifier`) at token issuance. */
6346
+ audience?: string;
5864
6347
  };
5865
6348
  };
5866
6349
  };
@@ -6250,6 +6733,8 @@ export interface operations {
6250
6733
  /** @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. */
6251
6734
  max_age?: number;
6252
6735
  prompt?: string;
6736
+ /** @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. */
6737
+ audience?: string;
6253
6738
  };
6254
6739
  };
6255
6740
  };