@bodhiapp/ts-client 0.1.32 → 0.1.34

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.
@@ -23,6 +23,26 @@ export interface paths {
23
23
  patch?: never;
24
24
  trace?: never;
25
25
  };
26
+ "/bodhi/v1/access-requests/apps": {
27
+ parameters: {
28
+ query?: never;
29
+ header?: never;
30
+ path?: never;
31
+ cookie?: never;
32
+ };
33
+ /**
34
+ * List Issued App Tokens
35
+ * @description List the caller's approved app access grants with their effective resource access. Requires session auth.
36
+ */
37
+ get: operations["listAppAccess"];
38
+ put?: never;
39
+ post?: never;
40
+ delete?: never;
41
+ options?: never;
42
+ head?: never;
43
+ patch?: never;
44
+ trace?: never;
45
+ };
26
46
  "/bodhi/v1/access-requests/pending": {
27
47
  parameters: {
28
48
  query?: never;
@@ -127,6 +147,26 @@ export interface paths {
127
147
  patch?: never;
128
148
  trace?: never;
129
149
  };
150
+ "/bodhi/v1/access-requests/{id}/revoke": {
151
+ parameters: {
152
+ query?: never;
153
+ header?: never;
154
+ path?: never;
155
+ cookie?: never;
156
+ };
157
+ get?: never;
158
+ put?: never;
159
+ /**
160
+ * Revoke App Token
161
+ * @description Revoke a previously-approved app grant; the app token stops working. Requires session auth.
162
+ */
163
+ post: operations["revokeAppAccess"];
164
+ delete?: never;
165
+ options?: never;
166
+ head?: never;
167
+ patch?: never;
168
+ trace?: never;
169
+ };
130
170
  "/bodhi/v1/apps/access-requests/{id}": {
131
171
  parameters: {
132
172
  query?: never;
@@ -562,7 +602,7 @@ export interface paths {
562
602
  };
563
603
  /**
564
604
  * List All Model Aliases
565
- * @description Retrieves paginated list of all configured model aliases including user-defined aliases, model aliases, and API provider aliases with filtering and sorting options. Requires any authenticated user (User level permissions or higher).
605
+ * @description Retrieves paginated list of all configured model aliases including user-defined aliases, model aliases, and API provider aliases with server-side facet filtering (type, api_format, size range, capability) and sorting. Requires any authenticated user (User level permissions or higher).
566
606
  */
567
607
  get: operations["listAllModels"];
568
608
  put?: never;
@@ -802,6 +842,46 @@ export interface paths {
802
842
  patch?: never;
803
843
  trace?: never;
804
844
  };
845
+ "/bodhi/v1/models/files/pull/{id}/archive": {
846
+ parameters: {
847
+ query?: never;
848
+ header?: never;
849
+ path?: never;
850
+ cookie?: never;
851
+ };
852
+ get?: never;
853
+ put?: never;
854
+ /**
855
+ * Archive Download Request
856
+ * @description Archives a completed, failed, or queued download request so it no longer appears in the downloads list or the list API response. Actively-downloading requests cannot be archived.
857
+ */
858
+ post: operations["archiveDownload"];
859
+ delete?: never;
860
+ options?: never;
861
+ head?: never;
862
+ patch?: never;
863
+ trace?: never;
864
+ };
865
+ "/bodhi/v1/models/files/pull/{id}/retry": {
866
+ parameters: {
867
+ query?: never;
868
+ header?: never;
869
+ path?: never;
870
+ cookie?: never;
871
+ };
872
+ get?: never;
873
+ put?: never;
874
+ /**
875
+ * Retry Failed Download Request
876
+ * @description Resets a failed download request to pending and re-runs it. The download resumes from the partially-downloaded file when present. Only failed requests can be retried.
877
+ */
878
+ post: operations["retryDownload"];
879
+ delete?: never;
880
+ options?: never;
881
+ head?: never;
882
+ patch?: never;
883
+ trace?: never;
884
+ };
805
885
  "/bodhi/v1/models/refresh": {
806
886
  parameters: {
807
887
  query?: never;
@@ -828,6 +908,45 @@ export interface paths {
828
908
  patch?: never;
829
909
  trace?: never;
830
910
  };
911
+ "/bodhi/v1/models/router": {
912
+ parameters: {
913
+ query?: never;
914
+ header?: never;
915
+ path?: never;
916
+ cookie?: never;
917
+ };
918
+ get?: never;
919
+ put?: never;
920
+ /** Create a new model-router configuration */
921
+ post: operations["createModelRouter"];
922
+ delete?: never;
923
+ options?: never;
924
+ head?: never;
925
+ patch?: never;
926
+ trace?: never;
927
+ };
928
+ "/bodhi/v1/models/router/{id}": {
929
+ parameters: {
930
+ query?: never;
931
+ header?: never;
932
+ path?: never;
933
+ cookie?: never;
934
+ };
935
+ /**
936
+ * Get Model Router Configuration
937
+ * @description Retrieves the configuration for a specific model-router (composite) alias by ID.
938
+ */
939
+ get: operations["getModelRouter"];
940
+ /** Update an existing model-router configuration */
941
+ put: operations["updateModelRouter"];
942
+ post?: never;
943
+ /** Delete a model-router configuration */
944
+ delete: operations["deleteModelRouter"];
945
+ options?: never;
946
+ head?: never;
947
+ patch?: never;
948
+ trace?: never;
949
+ };
831
950
  "/bodhi/v1/models/{id}": {
832
951
  parameters: {
833
952
  query?: never;
@@ -1026,7 +1145,13 @@ export interface paths {
1026
1145
  */
1027
1146
  put: operations["updateApiToken"];
1028
1147
  post?: never;
1029
- delete?: never;
1148
+ /**
1149
+ * Delete API Token
1150
+ * @description Permanently deletes an API token owned by the current user, immediately revoking it.
1151
+ *
1152
+ * **Security Note:** Session-only authentication required to prevent token-based privilege escalation.
1153
+ */
1154
+ delete: operations["deleteApiToken"];
1030
1155
  options?: never;
1031
1156
  head?: never;
1032
1157
  patch?: never;
@@ -1197,31 +1322,23 @@ export type webhooks = Record<string, never>;
1197
1322
  export interface components {
1198
1323
  schemas: {
1199
1324
  AccessRequestActionResponse: {
1200
- /** @description Updated status after action */
1201
1325
  status: components["schemas"]["AppAccessRequestStatus"];
1202
- /** @description Flow type of the access request */
1203
1326
  flow_type: components["schemas"]["FlowType"];
1204
- /** @description Redirect URL (present for redirect flow) */
1327
+ /** @description Present for redirect flow */
1205
1328
  redirect_url?: string | null;
1206
1329
  };
1207
1330
  AccessRequestReviewResponse: {
1208
- /** @description Access request ID */
1209
1331
  id: string;
1210
- /** @description App client ID */
1211
1332
  app_client_id: string;
1212
- /** @description App name from KC (if available) */
1333
+ /** @description From KC, if available */
1213
1334
  app_name?: string | null;
1214
- /** @description App description from KC (if available) */
1335
+ /** @description From KC, if available */
1215
1336
  app_description?: string | null;
1216
- /** @description Flow type: "redirect" or "popup" */
1337
+ /** @description One of: "redirect", "popup" */
1217
1338
  flow_type: components["schemas"]["FlowType"];
1218
- /** @description Current status */
1219
1339
  status: components["schemas"]["AppAccessRequestStatus"];
1220
- /** @description Role requested by the app */
1221
1340
  requested_role: string;
1222
- /** @description Resources requested */
1223
1341
  requested: components["schemas"]["RequestedResources"];
1224
- /** @description MCP server information with user instances */
1225
1342
  mcps_info?: components["schemas"]["McpServerReviewInfo"][];
1226
1343
  };
1227
1344
  /** @example {
@@ -1232,14 +1349,12 @@ export interface components {
1232
1349
  * "status": "approved"
1233
1350
  * } */
1234
1351
  AccessRequestStatusResponse: {
1235
- /** @description Access request ID */
1236
1352
  id: string;
1237
- /** @description Current status: "draft", "approved", "denied", "failed" */
1353
+ /** @description One of: "draft", "approved", "denied", "failed" */
1238
1354
  status: components["schemas"]["AppAccessRequestStatus"];
1239
- /** @description Role requested by the app */
1240
1355
  requested_role: components["schemas"]["UserScope"];
1241
1356
  approved_role?: null | components["schemas"]["UserScope"];
1242
- /** @description Access request scope (present when user-approved with tools) */
1357
+ /** @description Present when user-approved with tools */
1243
1358
  access_request_scope?: string | null;
1244
1359
  };
1245
1360
  /** @description Flat enum representing all types of model aliases
@@ -1253,10 +1368,54 @@ export interface components {
1253
1368
  }) | (components["schemas"]["ApiAlias"] & {
1254
1369
  /** @enum {string} */
1255
1370
  source: "api";
1371
+ }) | (components["schemas"]["ModelRouterAlias"] & {
1372
+ /** @enum {string} */
1373
+ source: "model_router";
1256
1374
  });
1375
+ /** @description Facet filter query parameters for the All-Models list (`GET /bodhi/v1/models`).
1376
+ *
1377
+ * All facets are server-side and applied before pagination so `total` and the page
1378
+ * reflect the filtered set. Multi-value facets accept a comma-separated list; an empty
1379
+ * or absent value means "no filter for this facet" (all rows pass). */
1380
+ AliasFilterParams: {
1381
+ /**
1382
+ * @description Alias type facet (comma-separated): `local_file`, `model_alias`, `api_model`, `fallback`.
1383
+ * @example local_file,model_alias
1384
+ */
1385
+ type?: string | null;
1386
+ /**
1387
+ * @description API-format facet (comma-separated), API rows only: `openai`, `responses`, `anthropic`,
1388
+ * `gemini`, `liberty`. `anthropic` matches both anthropic and anthropic_oauth aliases.
1389
+ * @example openai,anthropic
1390
+ */
1391
+ api_format?: string | null;
1392
+ /**
1393
+ * Format: int64
1394
+ * @description Minimum local-file size in bytes (inclusive). Applies to local rows with a known size;
1395
+ * rows without a size (API/router) are not filtered out by size.
1396
+ */
1397
+ size_min?: number | null;
1398
+ /**
1399
+ * Format: int64
1400
+ * @description Maximum local-file size in bytes (inclusive). See `size_min`.
1401
+ */
1402
+ size_max?: number | null;
1403
+ /**
1404
+ * @description Capability facet (comma-separated), local rows only: `vision`, `tool_use`, `reasoning`.
1405
+ * A row passes only if it has metadata with every requested capability set true.
1406
+ * @example vision,tool_use
1407
+ */
1408
+ capability?: string | null;
1409
+ /**
1410
+ * @description Free-text search (case-insensitive substring) over a row's identifying fields — alias/name,
1411
+ * repo, filename for local rows; id, name, base_url for API rows; alias for routers.
1412
+ * @example llama
1413
+ */
1414
+ search?: string | null;
1415
+ };
1257
1416
  /** @description Response envelope for model aliases - hides internal implementation details
1258
1417
  * Uses untagged serialization - each variant has its own "source" field */
1259
- AliasResponse: components["schemas"]["UserAliasResponse"] | components["schemas"]["ModelAliasResponse"] | components["schemas"]["ApiAliasResponse"];
1418
+ AliasResponse: components["schemas"]["ModelRouterResponse"] | components["schemas"]["UserAliasResponse"] | components["schemas"]["ModelAliasResponse"] | components["schemas"]["ApiAliasResponse"];
1260
1419
  /** @description Mirrors Anthropic's `ModelInfo` schema — full model metadata returned by
1261
1420
  * `GET /anthropic/v1/models` and stored alongside model IDs in `ApiAlias.models`.
1262
1421
  *
@@ -1274,10 +1433,9 @@ export interface components {
1274
1433
  max_input_tokens?: number | null;
1275
1434
  /** Format: int64 */
1276
1435
  max_tokens?: number | null;
1277
- /** @description Always `"model"` — included for Anthropic API compatibility. */
1278
1436
  type: string;
1279
1437
  };
1280
- /** @description Model capability information (Anthropic ModelCapabilities schema). */
1438
+ /** @description Anthropic ModelCapabilities schema. */
1281
1439
  AnthropicModelCapabilities: {
1282
1440
  batch: components["schemas"]["CapabilitySupport"];
1283
1441
  citations: components["schemas"]["CapabilitySupport"];
@@ -1291,6 +1449,7 @@ export interface components {
1291
1449
  };
1292
1450
  ApiAlias: {
1293
1451
  id: string;
1452
+ name: string;
1294
1453
  api_format: components["schemas"]["ApiFormat"];
1295
1454
  base_url: string;
1296
1455
  models: components["schemas"]["ApiModelVec"];
@@ -1307,6 +1466,7 @@ export interface components {
1307
1466
  ApiAliasResponse: {
1308
1467
  source: string;
1309
1468
  id: string;
1469
+ name: string;
1310
1470
  api_format: components["schemas"]["ApiFormat"];
1311
1471
  base_url: string;
1312
1472
  has_api_key: boolean;
@@ -1402,13 +1562,31 @@ export interface components {
1402
1562
  /** @description DB-storable `Vec<ApiModel>` — stored as JSON binary in SeaORM columns. */
1403
1563
  ApiModelVec: components["schemas"]["ApiModel"][];
1404
1564
  /** @enum {string} */
1405
- AppAccessRequestStatus: "draft" | "approved" | "denied" | "failed" | "expired";
1565
+ AppAccessRequestStatus: "draft" | "approved" | "denied" | "failed" | "expired" | "revoked";
1566
+ /** @description One issued app token (approved access request) with its effective grant summary. */
1567
+ AppAccessSummary: {
1568
+ id: string;
1569
+ app_client_id: string;
1570
+ app_name?: string | null;
1571
+ app_description?: string | null;
1572
+ status: components["schemas"]["AppAccessRequestStatus"];
1573
+ approved_role?: null | components["schemas"]["UserScope"];
1574
+ /** @description Effective model access granted to this app. */
1575
+ models: components["schemas"]["ResourceAccess"];
1576
+ /** @description Effective MCP access granted to this app. */
1577
+ mcps: components["schemas"]["ResourceAccess"];
1578
+ /** Format: date-time */
1579
+ created_at: string;
1580
+ /** Format: date-time */
1581
+ updated_at: string;
1582
+ };
1406
1583
  /**
1407
1584
  * @description Application information and status
1408
1585
  * @example {
1409
1586
  * "client_id": "my-client-id",
1410
1587
  * "commit_sha": "abc1234",
1411
1588
  * "deployment": "standalone",
1589
+ * "reference_api_url": "https://api.getbodhi.app",
1412
1590
  * "status": "ready",
1413
1591
  * "url": "https://example.com",
1414
1592
  * "version": "0.1.0"
@@ -1439,6 +1617,12 @@ export interface components {
1439
1617
  * @example https://example.com
1440
1618
  */
1441
1619
  url: string;
1620
+ /**
1621
+ * @description Base URL of the external reference API the frontend calls directly (configurable via
1622
+ * `BODHI_REFERENCE_API_URL`, env-overridable for tests)
1623
+ * @example https://api.getbodhi.app
1624
+ */
1625
+ reference_api_url: string;
1442
1626
  };
1443
1627
  AppRole: components["schemas"]["ResourceRole"] | components["schemas"]["TokenScope"] | components["schemas"]["UserScope"];
1444
1628
  /**
@@ -1448,9 +1632,7 @@ export interface components {
1448
1632
  AppStatus: "setup" | "ready" | "resource_admin";
1449
1633
  /** @enum {string} */
1450
1634
  ApprovalStatus: "approved" | "denied";
1451
- /**
1452
- * @description Request for approving an app access request
1453
- * @example {
1635
+ /** @example {
1454
1636
  * "approved": {
1455
1637
  * "mcps": [
1456
1638
  * {
@@ -1465,8 +1647,7 @@ export interface components {
1465
1647
  * "version": "1"
1466
1648
  * },
1467
1649
  * "approved_role": "scope_user_user"
1468
- * }
1469
- */
1650
+ * } */
1470
1651
  ApproveAccessRequest: {
1471
1652
  /** @description Role to grant for the approved request (scope_user_user or scope_user_power_user) */
1472
1653
  approved_role: components["schemas"]["UserScope"];
@@ -1483,14 +1664,23 @@ export interface components {
1483
1664
  /** @description Role to assign to the user */
1484
1665
  role: components["schemas"]["ResourceRole"];
1485
1666
  };
1486
- /** @description Versioned envelope for approved resources.
1487
- * The `version` tag is mandatory and must match the corresponding `RequestedResources` version. */
1667
+ /** @description The `version` tag is mandatory and must match the corresponding `RequestedResources` version. */
1488
1668
  ApprovedResources: components["schemas"]["ApprovedResourcesV1"] & {
1489
1669
  /** @enum {string} */
1490
1670
  version: "1";
1491
1671
  };
1672
+ /** @description What the owner granted at consent. Field names mirror `RequestedResourcesV1`
1673
+ * (`models_list` / `models_access` / `mcps_list` / `mcps_access`) — there the
1674
+ * values are UI-driver booleans, here they are the actual grants. `mcps` holds
1675
+ * the by-url instance approvals; `mcps_access` is the owner-granted set beyond them. */
1492
1676
  ApprovedResourcesV1: {
1677
+ models_list?: boolean;
1678
+ models_access?: components["schemas"]["ModelGrant"];
1679
+ mcps_list?: boolean;
1493
1680
  mcps?: components["schemas"]["McpApproval"][];
1681
+ /** @description Owner-granted MCP instances beyond the by-url requests. Defaults to none
1682
+ * (empty `Specific`) — unlike a token's all-access default. */
1683
+ mcps_access?: components["schemas"]["McpGrant"];
1494
1684
  };
1495
1685
  /** @example {
1496
1686
  * "code": "auth_code_123",
@@ -1498,12 +1688,12 @@ export interface components {
1498
1688
  * } */
1499
1689
  AuthCallbackRequest: {
1500
1690
  /**
1501
- * @description OAuth authorization code from successful authentication (required for success flow)
1691
+ * @description Required for the success flow
1502
1692
  * @example auth_code_123
1503
1693
  */
1504
1694
  code?: string | null;
1505
1695
  /**
1506
- * @description OAuth state parameter for CSRF protection (must match initiated request)
1696
+ * @description CSRF protection must match the initiated request
1507
1697
  * @example random_state_456
1508
1698
  */
1509
1699
  state?: string | null;
@@ -1512,10 +1702,7 @@ export interface components {
1512
1702
  * @example access_denied
1513
1703
  */
1514
1704
  error?: string | null;
1515
- /**
1516
- * @description Human-readable OAuth error description if authentication failed
1517
- * @example The user denied the request
1518
- */
1705
+ /** @example The user denied the request */
1519
1706
  error_description?: string | null;
1520
1707
  } & {
1521
1708
  [key: string]: string;
@@ -1592,7 +1779,6 @@ export interface components {
1592
1779
  /** @description Error details following Bodhi API error format */
1593
1780
  error: components["schemas"]["BodhiError"];
1594
1781
  };
1595
- /** @description Whether a single capability is supported by the model. */
1596
1782
  CapabilitySupport: {
1597
1783
  supported: boolean;
1598
1784
  };
@@ -1607,7 +1793,6 @@ export interface components {
1607
1793
  /** Format: int64 */
1608
1794
  max_output_tokens?: number | null;
1609
1795
  };
1610
- /** @description Context management capability details. */
1611
1796
  ContextManagementCapability: {
1612
1797
  clear_thinking_20251015?: null | components["schemas"]["CapabilitySupport"];
1613
1798
  clear_tool_uses_20250919?: null | components["schemas"]["CapabilitySupport"];
@@ -1616,9 +1801,7 @@ export interface components {
1616
1801
  CopyAliasRequest: {
1617
1802
  alias: string;
1618
1803
  };
1619
- /**
1620
- * @description Request for creating an app access request
1621
- * @example {
1804
+ /** @example {
1622
1805
  * "app_client_id": "my-app-client",
1623
1806
  * "flow_type": "redirect",
1624
1807
  * "redirect_url": "https://myapp.com/callback",
@@ -1631,8 +1814,7 @@ export interface components {
1631
1814
  * "version": "1"
1632
1815
  * },
1633
1816
  * "requested_role": "scope_user_user"
1634
- * }
1635
- */
1817
+ * } */
1636
1818
  CreateAccessRequest: {
1637
1819
  /** @description App client ID from Keycloak */
1638
1820
  app_client_id: string;
@@ -1651,11 +1833,9 @@ export interface components {
1651
1833
  * "status": "draft"
1652
1834
  * } */
1653
1835
  CreateAccessRequestResponse: {
1654
- /** @description Access request ID */
1655
1836
  id: string;
1656
- /** @description Status (always "draft") */
1837
+ /** @description Always "draft" */
1657
1838
  status: components["schemas"]["AppAccessRequestStatus"];
1658
- /** @description Review URL for user to approve/deny */
1659
1839
  review_url: string;
1660
1840
  };
1661
1841
  /** @description Wrapper for creating auth configs with server_id in body instead of path */
@@ -1705,6 +1885,9 @@ export interface components {
1705
1885
  name?: string | null;
1706
1886
  /** @description Token scope defining access level */
1707
1887
  scope: components["schemas"]["TokenScope"];
1888
+ /** @description Per-resource grants for this token. Defaults to deny (least-privilege) when
1889
+ * omitted — specify grants to widen access. */
1890
+ grants?: components["schemas"]["TokenGrants"];
1708
1891
  };
1709
1892
  /** @description Dashboard user information from a validated dashboard session token */
1710
1893
  DashboardUser: {
@@ -1716,6 +1899,8 @@ export interface components {
1716
1899
  /** @description Inner request shape for the five non-llm-liberty `api_format` values.
1717
1900
  * Shared across `openai`, `openai_responses`, `anthropic`, `anthropic_oauth`, `gemini`. */
1718
1901
  DefaultApiModelRequest: {
1902
+ /** @description User-provided descriptive name for this API model */
1903
+ name: string;
1719
1904
  /** @description API base URL */
1720
1905
  base_url: string;
1721
1906
  /** @description API key update action (Keep/Set with Some or None) */
@@ -1773,6 +1958,8 @@ export interface components {
1773
1958
  /** Format: date-time */
1774
1959
  started_at?: string | null;
1775
1960
  /** Format: date-time */
1961
+ archived_at?: string | null;
1962
+ /** Format: date-time */
1776
1963
  created_at: string;
1777
1964
  /** Format: date-time */
1778
1965
  updated_at: string;
@@ -1798,6 +1985,18 @@ export interface components {
1798
1985
  low: components["schemas"]["CapabilitySupport"];
1799
1986
  max: components["schemas"]["CapabilitySupport"];
1800
1987
  };
1988
+ /** @description Per-strategy resilience config for the fallback strategy. Phase 1 persists defaults
1989
+ * and does not yet act on them (failover/health land in later phases). */
1990
+ FallbackConfig: {
1991
+ /** Format: int32 */
1992
+ cooldown_secs?: number;
1993
+ /**
1994
+ * Format: int32
1995
+ * @description 0 = try the whole chain.
1996
+ */
1997
+ max_attempts?: number;
1998
+ honor_retry_after?: boolean;
1999
+ };
1801
2000
  /**
1802
2001
  * @description Request to fetch available models from provider. Discriminated on `api_format`.
1803
2002
  * @example {
@@ -1866,6 +2065,10 @@ export interface components {
1866
2065
  thinking?: boolean | null;
1867
2066
  };
1868
2067
  JsonVec: string[];
2068
+ /** @description Response for GET /access-requests/apps — the caller's issued app tokens. */
2069
+ ListAppAccessResponse: {
2070
+ data: components["schemas"]["AppAccessSummary"][];
2071
+ };
1869
2072
  ListMcpServersResponse: {
1870
2073
  mcp_servers: components["schemas"]["McpServerResponse"][];
1871
2074
  };
@@ -1894,6 +2097,8 @@ export interface components {
1894
2097
  /** @description Request shape for `api_format == "llm_liberty_oauth"`. Carries the full envelope
1895
2098
  * (or `Keep` to leave existing credentials untouched on update). */
1896
2099
  LlmLibertyApiModelRequest: {
2100
+ /** @description User-provided descriptive name for this API model */
2101
+ name: string;
1897
2102
  /** @description Envelope update action — Keep (update only) or Set (create/replace credentials). */
1898
2103
  envelope?: components["schemas"]["LlmLibertyEnvelopeUpdate"];
1899
2104
  /** @description List of available models */
@@ -1903,6 +2108,7 @@ export interface components {
1903
2108
  /** @description Whether to forward all requests with this prefix */
1904
2109
  forward_all_with_prefix?: boolean;
1905
2110
  };
2111
+ /** @description Envelope sub-types mirror the llm-liberty JSON contract v1.0.0. */
1906
2112
  LlmLibertyAuthSpec: {
1907
2113
  in: string;
1908
2114
  key: string;
@@ -1977,7 +2183,6 @@ export interface components {
1977
2183
  /** @description Test prompt (max 30 characters for cost control) */
1978
2184
  prompt: string;
1979
2185
  };
1980
- /** @description Local model file response */
1981
2186
  LocalModelResponse: {
1982
2187
  repo: string;
1983
2188
  filename: string;
@@ -1991,32 +2196,24 @@ export interface components {
1991
2196
  };
1992
2197
  /** @description User-owned MCP server instance. */
1993
2198
  Mcp: {
1994
- /** @description Unique instance identifier (UUID) */
1995
2199
  id: string;
1996
2200
  /** @description Server info resolved via JOIN */
1997
2201
  mcp_server: components["schemas"]["McpServerInfo"];
1998
- /** @description User-defined slug for this instance */
1999
2202
  slug: string;
2000
- /** @description Human-readable name */
2001
2203
  name: string;
2002
- /** @description Optional description for this instance */
2003
2204
  description?: string | null;
2004
- /** @description Whether this instance is enabled */
2005
2205
  enabled: boolean;
2006
- /** @description MCP proxy path for this instance */
2007
2206
  path: string;
2008
2207
  auth_type: components["schemas"]["McpAuthType"];
2009
2208
  /** @description Reference to the auth config (mcp_auth_configs.id) */
2010
2209
  auth_config_id?: string | null;
2011
2210
  /**
2012
2211
  * Format: date-time
2013
- * @description When this instance was created
2014
2212
  * @example 2024-11-10T04:52:06.786Z
2015
2213
  */
2016
2214
  created_at: string;
2017
2215
  /**
2018
2216
  * Format: date-time
2019
- * @description When this instance was last updated
2020
2217
  * @example 2024-11-10T04:52:06.786Z
2021
2218
  */
2022
2219
  updated_at: string;
@@ -2078,6 +2275,7 @@ export interface components {
2078
2275
  McpAuthConfigsListResponse: {
2079
2276
  auth_configs: components["schemas"]["McpAuthConfigResponse"][];
2080
2277
  };
2278
+ /** @description Masked auth param response. */
2081
2279
  McpAuthParam: {
2082
2280
  id: string;
2083
2281
  param_type: components["schemas"]["McpAuthParamType"];
@@ -2093,6 +2291,21 @@ export interface components {
2093
2291
  McpAuthParamType: "header" | "query";
2094
2292
  /** @enum {string} */
2095
2293
  McpAuthType: "public" | "header" | "oauth";
2294
+ /** @description MCP connect grant. `All` is a wildcard (incl. future MCPs); `Specific` lists
2295
+ * the user's own instance ids (empty ⇒ no MCP access).
2296
+ *
2297
+ * Defaults to **least-privilege** (empty `Specific` ⇒ deny), symmetric with
2298
+ * `ModelGrant`: an unspecified or legacy grant grants nothing, so a stored
2299
+ * payload that omits `mcps` cannot silently grant every MCP. All-access must be
2300
+ * requested explicitly via `McpGrant::All`. */
2301
+ McpGrant: {
2302
+ /** @enum {string} */
2303
+ type: "all";
2304
+ } | {
2305
+ ids: string[];
2306
+ /** @enum {string} */
2307
+ type: "specific";
2308
+ };
2096
2309
  McpInstance: {
2097
2310
  id: string;
2098
2311
  /** @description MCP proxy path for this instance (e.g. `/bodhi/v1/apps/mcps/{id}/mcp`) */
@@ -2100,51 +2313,37 @@ export interface components {
2100
2313
  };
2101
2314
  /** @description Input for creating or updating an MCP instance. */
2102
2315
  McpRequest: {
2103
- /** @description Human-readable name (required) */
2104
2316
  name: string;
2105
- /** @description User-defined slug for this instance (1-24 chars, alphanumeric + hyphens) */
2317
+ /** @description 1-24 chars, alphanumeric + hyphens. */
2106
2318
  slug: string;
2107
- /** @description MCP server ID (required for create, ignored for update) */
2319
+ /** @description Required for create, ignored for update. */
2108
2320
  mcp_server_id?: string | null;
2109
- /** @description Optional description */
2110
2321
  description?: string | null;
2111
- /** @description Whether this instance is enabled */
2112
2322
  enabled: boolean;
2113
- /** @description Authentication type */
2114
2323
  auth_type?: components["schemas"]["McpAuthType"];
2115
- /** @description Reference to auth config */
2116
2324
  auth_config_id?: string | null;
2117
- /** @description Instance-level auth params (values for the auth config's key definitions) */
2325
+ /** @description Instance-level values for the auth config's key definitions. */
2118
2326
  credentials?: components["schemas"]["McpAuthParamInput"][] | null;
2119
- /** @description OAuth token ID to link to this MCP instance (set after OAuth flow) */
2327
+ /** @description OAuth token ID to link to this MCP instance (set after OAuth flow). */
2120
2328
  oauth_token_id?: string | null;
2121
2329
  };
2122
- /** @description Admin-managed MCP server registry entry.
2123
- * Admins/managers register MCP server URLs that users can then create instances of. */
2330
+ /** @description Admin-managed MCP server registry entry that users create instances of. */
2124
2331
  McpServer: {
2125
- /** @description Unique identifier (UUID) */
2126
2332
  id: string;
2127
2333
  /** @description MCP server endpoint URL (trimmed, case-insensitive unique) */
2128
2334
  url: string;
2129
- /** @description Human-readable display name */
2130
2335
  name: string;
2131
- /** @description Optional description */
2132
2336
  description?: string | null;
2133
- /** @description Whether this MCP server is enabled */
2134
2337
  enabled: boolean;
2135
- /** @description User who created this entry */
2136
2338
  created_by: string;
2137
- /** @description User who last updated this entry */
2138
2339
  updated_by: string;
2139
2340
  /**
2140
2341
  * Format: date-time
2141
- * @description When this entry was created
2142
2342
  * @example 2024-11-10T04:52:06.786Z
2143
2343
  */
2144
2344
  created_at: string;
2145
2345
  /**
2146
2346
  * Format: date-time
2147
- * @description When this entry was last updated
2148
2347
  * @example 2024-11-10T04:52:06.786Z
2149
2348
  */
2150
2349
  updated_at: string;
@@ -2158,13 +2357,10 @@ export interface components {
2158
2357
  };
2159
2358
  /** @description Input for creating or updating an MCP server. */
2160
2359
  McpServerRequest: {
2161
- /** @description MCP server endpoint URL (trimmed, case-insensitive unique) */
2360
+ /** @description MCP server endpoint URL (trimmed, case-insensitive unique). */
2162
2361
  url: string;
2163
- /** @description Human-readable display name */
2164
2362
  name: string;
2165
- /** @description Optional description */
2166
2363
  description?: string | null;
2167
- /** @description Whether this MCP server is enabled */
2168
2364
  enabled: boolean;
2169
2365
  auth_config?: null | components["schemas"]["CreateMcpAuthConfigRequest"];
2170
2366
  };
@@ -2177,7 +2373,6 @@ export interface components {
2177
2373
  auth_config?: null | components["schemas"]["McpAuthConfigResponse"];
2178
2374
  };
2179
2375
  McpServerReviewInfo: {
2180
- /** @description Requested MCP server URL */
2181
2376
  url: string;
2182
2377
  /** @description User's MCP instances connected to this server URL */
2183
2378
  instances: components["schemas"]["Mcp"][];
@@ -2210,6 +2405,11 @@ export interface components {
2210
2405
  repo: string;
2211
2406
  filename: string;
2212
2407
  snapshot: string;
2408
+ /**
2409
+ * Format: int64
2410
+ * @description Local GGUF file size in bytes (present when the file is resolvable on disk)
2411
+ */
2412
+ size?: number | null;
2213
2413
  metadata?: null | components["schemas"]["ModelMetadata"];
2214
2414
  };
2215
2415
  ModelArchitecture: {
@@ -2225,6 +2425,20 @@ export interface components {
2225
2425
  thinking?: boolean | null;
2226
2426
  tools: components["schemas"]["ToolCapabilities"];
2227
2427
  };
2428
+ /** @description Model inference grant. `All` is a wildcard that includes models added in the
2429
+ * future; `Specific` lists alias ids (empty ⇒ no model access).
2430
+ *
2431
+ * Defaults to **least-privilege** (empty `Specific` ⇒ deny): an unspecified or
2432
+ * legacy grant grants nothing. All-access must be requested explicitly via
2433
+ * `ModelGrant::All`. Symmetric with `ApprovedResourcesV1`'s empty-MCP default. */
2434
+ ModelGrant: {
2435
+ /** @enum {string} */
2436
+ type: "all";
2437
+ } | {
2438
+ ids: string[];
2439
+ /** @enum {string} */
2440
+ type: "specific";
2441
+ };
2228
2442
  /** @description Model metadata for API responses */
2229
2443
  ModelMetadata: {
2230
2444
  capabilities: components["schemas"]["ModelCapabilities"];
@@ -2232,6 +2446,39 @@ export interface components {
2232
2446
  architecture: components["schemas"]["ModelArchitecture"];
2233
2447
  chat_template?: string | null;
2234
2448
  };
2449
+ /** @description A composite alias that fronts an ordered list of targets and routes a chat
2450
+ * request through them via a pluggable strategy. v1 ships only the fallback strategy. */
2451
+ ModelRouterAlias: {
2452
+ id: string;
2453
+ /** @description User-facing model name, unique across all alias kinds. */
2454
+ alias: string;
2455
+ /** @description Ordered list of targets; order is the fallback priority. */
2456
+ targets: components["schemas"]["RouterTarget"][];
2457
+ strategy: components["schemas"]["RoutingStrategyConfig"];
2458
+ /** Format: date-time */
2459
+ created_at: string;
2460
+ /** Format: date-time */
2461
+ updated_at: string;
2462
+ };
2463
+ /** @description Input request for creating or updating a model-router. Used as `ValidatedJson` in handlers
2464
+ * for both create and update (PUT). A zero-target or all-disabled router is allowed to save. */
2465
+ ModelRouterRequest: {
2466
+ alias: string;
2467
+ targets?: components["schemas"]["RouterTargetRequest"][];
2468
+ strategy?: components["schemas"]["RoutingStrategyConfig"];
2469
+ };
2470
+ /** @description API response for model-router aliases. */
2471
+ ModelRouterResponse: {
2472
+ source: string;
2473
+ id: string;
2474
+ alias: string;
2475
+ targets: components["schemas"]["RouterTarget"][];
2476
+ strategy: components["schemas"]["RoutingStrategyConfig"];
2477
+ /** Format: date-time */
2478
+ created_at: string;
2479
+ /** Format: date-time */
2480
+ updated_at: string;
2481
+ };
2235
2482
  /**
2236
2483
  * @description Request for creating a new download request
2237
2484
  * @example {
@@ -2266,6 +2513,7 @@ export interface components {
2266
2513
  /** Format: float */
2267
2514
  top_p?: number | null;
2268
2515
  user?: string | null;
2516
+ system_prompt?: string | null;
2269
2517
  };
2270
2518
  OAuthDiscoverAsRequest: {
2271
2519
  url: string;
@@ -2324,7 +2572,6 @@ export interface components {
2324
2572
  page: number;
2325
2573
  page_size: number;
2326
2574
  };
2327
- /** @description Paginated list of local model files */
2328
2575
  PaginatedLocalModelResponse: {
2329
2576
  data: components["schemas"]["LocalModelResponse"][];
2330
2577
  total: number;
@@ -2408,7 +2655,6 @@ export interface components {
2408
2655
  */
2409
2656
  message: string;
2410
2657
  };
2411
- /** @description Response for queue status operations */
2412
2658
  QueueStatusResponse: {
2413
2659
  /** @description Queue status ("idle" or "processing") */
2414
2660
  status: string;
@@ -2466,17 +2712,82 @@ export interface components {
2466
2712
  RequestedMcpServer: {
2467
2713
  url: string;
2468
2714
  };
2469
- /** @description Versioned envelope for requested resources.
2470
- * The `version` tag is mandatory — clients must specify which version they are using. */
2715
+ /** @description The `version` tag is mandatory — clients must specify which version they are using. */
2471
2716
  RequestedResources: components["schemas"]["RequestedResourcesV1"] & {
2472
2717
  /** @enum {string} */
2473
2718
  version: "1";
2474
2719
  };
2720
+ /** @description What the external app asks for. The four booleans are **UI drivers**: they tell
2721
+ * the consent screen which controls to render (the owner decides the actual grant).
2722
+ * Fields are domain-first (`models_*` / `mcps_*`), matching `ApprovedResourcesV1`.
2723
+ * `mcp_servers` is the existing by-url MCP request and is unchanged.
2724
+ *
2725
+ * `models_access` defaults to **true**: unless the app explicitly opts out
2726
+ * (`models_access: false`), the consent screen shows the model-access selector so
2727
+ * the owner can always scope models. (The other UI-driver flags default to false.) */
2475
2728
  RequestedResourcesV1: {
2729
+ /** @description Render the "list all models" toggle. */
2730
+ models_list?: boolean;
2731
+ /** @description Render the model All/Specific access selector. Defaults to `true` (shown). */
2732
+ models_access?: boolean;
2733
+ /** @description Render the "list all MCPs" toggle. */
2734
+ mcps_list?: boolean;
2735
+ /** @description Render the owner-extra MCP All/Specific access selector. */
2736
+ mcps_access?: boolean;
2476
2737
  mcp_servers?: components["schemas"]["RequestedMcpServer"][];
2477
2738
  };
2739
+ /** @description Effective access to a class of resources (models or MCPs) for an API token,
2740
+ * reflected from its grants. Discriminated on `type`: `all` ⇒ every current and
2741
+ * future resource; `specific` ⇒ the listed `ids` (empty ⇒ no access).
2742
+ * `list` is the `list_*` toggle (whether the token may enumerate the full catalog). */
2743
+ ResourceAccess: {
2744
+ list: boolean;
2745
+ /** @enum {string} */
2746
+ type: "all";
2747
+ } | {
2748
+ list: boolean;
2749
+ ids: string[];
2750
+ /** @enum {string} */
2751
+ type: "specific";
2752
+ };
2753
+ /** @description Effective resource access for a token-bearing principal (API token or external
2754
+ * app), reflected from its grants. Reported uniformly via the `access` envelope
2755
+ * field for both principals. */
2756
+ ResourceAccessInfo: {
2757
+ /** @description Effective model access for this principal. */
2758
+ models: components["schemas"]["ResourceAccess"];
2759
+ /** @description Effective MCP access for this principal. */
2760
+ mcps: components["schemas"]["ResourceAccess"];
2761
+ };
2478
2762
  /** @enum {string} */
2479
2763
  ResourceRole: "resource_anonymous" | "resource_guest" | "resource_user" | "resource_power_user" | "resource_manager" | "resource_admin";
2764
+ /** @description One target in a model-router: a reference to an existing alias plus a pinned model. */
2765
+ RouterTarget: {
2766
+ /** @description Name of an existing user/model/api alias (NOT a model-router). */
2767
+ alias: string;
2768
+ /** @description Concrete model placed into `request["model"]` when forwarding to this target. */
2769
+ model: string;
2770
+ /** @description Whether this target is part of the active sequence. Disabled targets are never
2771
+ * attempted but keep their config and position. Defaults to enabled. */
2772
+ enabled?: boolean;
2773
+ /**
2774
+ * Format: int32
2775
+ * @description SEAM (reserved): ignored by Fallback; used by a future weighted strategy.
2776
+ */
2777
+ weight?: number | null;
2778
+ };
2779
+ RouterTargetRequest: {
2780
+ alias: string;
2781
+ model: string;
2782
+ enabled?: boolean;
2783
+ /** Format: int32 */
2784
+ weight?: number | null;
2785
+ };
2786
+ /** @description Routing strategy config — DATA (persisted, wire-exposed). Adding a strategy = adding a variant. */
2787
+ RoutingStrategyConfig: components["schemas"]["FallbackConfig"] & {
2788
+ /** @enum {string} */
2789
+ strategy: "fallback";
2790
+ };
2480
2791
  SettingInfo: {
2481
2792
  key: string;
2482
2793
  current_value: unknown;
@@ -2601,12 +2912,10 @@ export interface components {
2601
2912
  response?: string | null;
2602
2913
  error?: string | null;
2603
2914
  };
2604
- /** @description Thinking capability and supported type configurations. */
2605
2915
  ThinkingCapability: {
2606
2916
  supported: boolean;
2607
2917
  types: components["schemas"]["ThinkingTypes"];
2608
2918
  };
2609
- /** @description Supported thinking type configurations. */
2610
2919
  ThinkingTypes: {
2611
2920
  adaptive: components["schemas"]["CapabilitySupport"];
2612
2921
  enabled: components["schemas"]["CapabilitySupport"];
@@ -2628,12 +2937,35 @@ export interface components {
2628
2937
  token_prefix: string;
2629
2938
  scopes: string;
2630
2939
  status: components["schemas"]["TokenStatus"];
2940
+ /** @description Per-resource grants this token carries. */
2941
+ grants: components["schemas"]["TokenGrants"];
2942
+ /** Format: date-time */
2943
+ last_used_at?: string | null;
2631
2944
  /** Format: date-time */
2632
2945
  created_at: string;
2633
2946
  /** Format: date-time */
2634
2947
  updated_at: string;
2635
2948
  };
2636
- /** @description API Token information response */
2949
+ /** @description Versioned envelope; the `version` tag is mandatory (mirrors `ApprovedResources`). */
2950
+ TokenGrants: components["schemas"]["TokenGrantsV1"] & {
2951
+ /** @enum {string} */
2952
+ version: "1";
2953
+ };
2954
+ /** @description Per-resource grants carried by an API token. Listing (`models_list` /
2955
+ * `mcps_list`) is separate from inference/connect: with listing off the
2956
+ * discovery endpoints return an empty set, but inference on an individually
2957
+ * granted resource still succeeds.
2958
+ *
2959
+ * Intentionally standalone — NOT shared with the App-access-request envelope
2960
+ * (`ApprovedResources`); the two may diverge. */
2961
+ TokenGrantsV1: {
2962
+ models_list?: boolean;
2963
+ models?: components["schemas"]["ModelGrant"];
2964
+ mcps_list?: boolean;
2965
+ mcps?: components["schemas"]["McpGrant"];
2966
+ };
2967
+ /** @description API Token information response. Effective model/MCP access is reported uniformly
2968
+ * via the envelope's `access` field (same shape as external apps), not inline here. */
2637
2969
  TokenInfo: {
2638
2970
  role: components["schemas"]["TokenScope"];
2639
2971
  };
@@ -2645,14 +2977,11 @@ export interface components {
2645
2977
  function_calling?: boolean | null;
2646
2978
  structured_output?: boolean | null;
2647
2979
  };
2648
- /**
2649
- * @description Request to update a setting value
2650
- * @example {
2980
+ /** @example {
2651
2981
  * "value": "debug"
2652
- * }
2653
- */
2982
+ * } */
2654
2983
  UpdateSettingRequest: {
2655
- /** @description New value for the setting (type depends on setting metadata) */
2984
+ /** @description type depends on setting metadata */
2656
2985
  value: unknown;
2657
2986
  };
2658
2987
  /** @example {
@@ -2765,6 +3094,11 @@ export interface components {
2765
3094
  created_at: string;
2766
3095
  /** Format: date-time */
2767
3096
  updated_at: string;
3097
+ /**
3098
+ * Format: int64
3099
+ * @description Local GGUF file size in bytes (present when the file is resolvable on disk)
3100
+ */
3101
+ size?: number | null;
2768
3102
  metadata?: null | components["schemas"]["ModelMetadata"];
2769
3103
  };
2770
3104
  UserInfo: {
@@ -2777,10 +3111,14 @@ export interface components {
2777
3111
  /** @example Doe */
2778
3112
  last_name?: string | null;
2779
3113
  role?: null | components["schemas"]["AppRole"];
3114
+ /** @description OIDC id_token for the active session, when present. Used by the frontend to
3115
+ * authenticate direct calls to the external reference API. Omitted for token/exchange auth. */
3116
+ id_token?: string | null;
2780
3117
  };
2781
3118
  /** @description Envelope wrapping UserResponse with additional session info */
2782
3119
  UserInfoEnvelope: components["schemas"]["UserResponse"] & {
2783
3120
  dashboard?: null | components["schemas"]["DashboardUser"];
3121
+ access?: null | components["schemas"]["ResourceAccessInfo"];
2784
3122
  };
2785
3123
  UserListResponse: {
2786
3124
  /** @example resource-abc123def456 */
@@ -2906,31 +3244,22 @@ export interface operations {
2906
3244
  };
2907
3245
  };
2908
3246
  };
2909
- listPendingAccessRequests: {
3247
+ listAppAccess: {
2910
3248
  parameters: {
2911
- query?: {
2912
- /** @description Page number (1-based indexing) */
2913
- page?: number;
2914
- /** @description Number of items to return per page (maximum 100) */
2915
- page_size?: number;
2916
- /** @description Field to sort by. Common values: repo, filename, size, updated_at, snapshot, created_at */
2917
- sort?: string;
2918
- /** @description Sort order: 'asc' for ascending, 'desc' for descending */
2919
- sort_order?: string;
2920
- };
3249
+ query?: never;
2921
3250
  header?: never;
2922
3251
  path?: never;
2923
3252
  cookie?: never;
2924
3253
  };
2925
3254
  requestBody?: never;
2926
3255
  responses: {
2927
- /** @description Pending requests retrieved */
3256
+ /** @description Issued app tokens */
2928
3257
  200: {
2929
3258
  headers: {
2930
3259
  [name: string]: unknown;
2931
3260
  };
2932
3261
  content: {
2933
- "application/json": components["schemas"]["PaginatedUserAccessResponse"];
3262
+ "application/json": components["schemas"]["ListAppAccessResponse"];
2934
3263
  };
2935
3264
  };
2936
3265
  /** @description Invalid request parameters */
@@ -2971,22 +3300,87 @@ export interface operations {
2971
3300
  };
2972
3301
  };
2973
3302
  };
2974
- approveAppsAccessRequest: {
3303
+ listPendingAccessRequests: {
2975
3304
  parameters: {
2976
- query?: never;
2977
- header?: never;
2978
- path: {
2979
- /** @description Access request ID */
2980
- id: string;
3305
+ query?: {
3306
+ /** @description Page number (1-based indexing) */
3307
+ page?: number;
3308
+ /** @description Number of items to return per page (maximum 100) */
3309
+ page_size?: number;
3310
+ /** @description Field to sort by. Common values: repo, filename, size, updated_at, snapshot, created_at */
3311
+ sort?: string;
3312
+ /** @description Sort order: 'asc' for ascending, 'desc' for descending */
3313
+ sort_order?: string;
2981
3314
  };
3315
+ header?: never;
3316
+ path?: never;
2982
3317
  cookie?: never;
2983
3318
  };
2984
- /** @description Approval details with tool selections */
2985
- requestBody: {
2986
- content: {
2987
- "application/json": components["schemas"]["ApproveAccessRequest"];
2988
- };
2989
- };
3319
+ requestBody?: never;
3320
+ responses: {
3321
+ /** @description Pending requests retrieved */
3322
+ 200: {
3323
+ headers: {
3324
+ [name: string]: unknown;
3325
+ };
3326
+ content: {
3327
+ "application/json": components["schemas"]["PaginatedUserAccessResponse"];
3328
+ };
3329
+ };
3330
+ /** @description Invalid request parameters */
3331
+ 400: {
3332
+ headers: {
3333
+ [name: string]: unknown;
3334
+ };
3335
+ content: {
3336
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3337
+ };
3338
+ };
3339
+ /** @description Not authenticated */
3340
+ 401: {
3341
+ headers: {
3342
+ [name: string]: unknown;
3343
+ };
3344
+ content: {
3345
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3346
+ };
3347
+ };
3348
+ /** @description Insufficient permissions */
3349
+ 403: {
3350
+ headers: {
3351
+ [name: string]: unknown;
3352
+ };
3353
+ content: {
3354
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3355
+ };
3356
+ };
3357
+ /** @description Internal server error */
3358
+ 500: {
3359
+ headers: {
3360
+ [name: string]: unknown;
3361
+ };
3362
+ content: {
3363
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3364
+ };
3365
+ };
3366
+ };
3367
+ };
3368
+ approveAppsAccessRequest: {
3369
+ parameters: {
3370
+ query?: never;
3371
+ header?: never;
3372
+ path: {
3373
+ /** @description Access request ID */
3374
+ id: string;
3375
+ };
3376
+ cookie?: never;
3377
+ };
3378
+ /** @description Approval details with tool selections */
3379
+ requestBody: {
3380
+ content: {
3381
+ "application/json": components["schemas"]["ApproveAccessRequest"];
3382
+ };
3383
+ };
2990
3384
  responses: {
2991
3385
  /** @description Request approved */
2992
3386
  200: {
@@ -3344,6 +3738,83 @@ export interface operations {
3344
3738
  };
3345
3739
  };
3346
3740
  };
3741
+ revokeAppAccess: {
3742
+ parameters: {
3743
+ query?: never;
3744
+ header?: never;
3745
+ path: {
3746
+ /** @description Access request ID */
3747
+ id: string;
3748
+ };
3749
+ cookie?: never;
3750
+ };
3751
+ requestBody?: never;
3752
+ responses: {
3753
+ /** @description Grant revoked */
3754
+ 200: {
3755
+ headers: {
3756
+ [name: string]: unknown;
3757
+ };
3758
+ content: {
3759
+ "application/json": components["schemas"]["AppAccessSummary"];
3760
+ };
3761
+ };
3762
+ /** @description Invalid request parameters */
3763
+ 400: {
3764
+ headers: {
3765
+ [name: string]: unknown;
3766
+ };
3767
+ content: {
3768
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3769
+ };
3770
+ };
3771
+ /** @description Not authenticated */
3772
+ 401: {
3773
+ headers: {
3774
+ [name: string]: unknown;
3775
+ };
3776
+ content: {
3777
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3778
+ };
3779
+ };
3780
+ /** @description Insufficient permissions */
3781
+ 403: {
3782
+ headers: {
3783
+ [name: string]: unknown;
3784
+ };
3785
+ content: {
3786
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3787
+ };
3788
+ };
3789
+ /** @description Not found */
3790
+ 404: {
3791
+ headers: {
3792
+ [name: string]: unknown;
3793
+ };
3794
+ content: {
3795
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3796
+ };
3797
+ };
3798
+ /** @description Not in a revocable state */
3799
+ 409: {
3800
+ headers: {
3801
+ [name: string]: unknown;
3802
+ };
3803
+ content: {
3804
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3805
+ };
3806
+ };
3807
+ /** @description Internal server error */
3808
+ 500: {
3809
+ headers: {
3810
+ [name: string]: unknown;
3811
+ };
3812
+ content: {
3813
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3814
+ };
3815
+ };
3816
+ };
3817
+ };
3347
3818
  getAccessRequestStatus: {
3348
3819
  parameters: {
3349
3820
  query: {
@@ -5353,6 +5824,22 @@ export interface operations {
5353
5824
  sort?: string;
5354
5825
  /** @description Sort order: 'asc' for ascending, 'desc' for descending */
5355
5826
  sort_order?: string;
5827
+ /** @description Alias type facet (comma-separated): `local_file`, `model_alias`, `api_model`, `fallback`. */
5828
+ type?: string;
5829
+ /** @description API-format facet (comma-separated), API rows only: `openai`, `responses`, `anthropic`,
5830
+ * `gemini`, `liberty`. `anthropic` matches both anthropic and anthropic_oauth aliases. */
5831
+ api_format?: string;
5832
+ /** @description Minimum local-file size in bytes (inclusive). Applies to local rows with a known size;
5833
+ * rows without a size (API/router) are not filtered out by size. */
5834
+ size_min?: number;
5835
+ /** @description Maximum local-file size in bytes (inclusive). See `size_min`. */
5836
+ size_max?: number;
5837
+ /** @description Capability facet (comma-separated), local rows only: `vision`, `tool_use`, `reasoning`.
5838
+ * A row passes only if it has metadata with every requested capability set true. */
5839
+ capability?: string;
5840
+ /** @description Free-text search (case-insensitive substring) over a row's identifying fields — alias/name,
5841
+ * repo, filename for local rows; id, name, base_url for API rows; alias for routers. */
5842
+ search?: string;
5356
5843
  };
5357
5844
  header?: never;
5358
5845
  path?: never;
@@ -6607,39 +7094,25 @@ export interface operations {
6607
7094
  };
6608
7095
  };
6609
7096
  };
6610
- refreshModelMetadata: {
7097
+ archiveDownload: {
6611
7098
  parameters: {
6612
7099
  query?: never;
6613
7100
  header?: never;
6614
- path?: never;
6615
- cookie?: never;
6616
- };
6617
- /** @description Refresh request - either bulk (source='all') or single model (source='model' with identifiers) */
6618
- requestBody: {
6619
- content: {
6620
- "application/json": components["schemas"]["RefreshRequest"];
7101
+ path: {
7102
+ /** @description Unique identifier of the download request */
7103
+ id: string;
6621
7104
  };
7105
+ cookie?: never;
6622
7106
  };
7107
+ requestBody?: never;
6623
7108
  responses: {
6624
- /** @description Metadata refreshed successfully (sync mode) */
7109
+ /** @description Download request archived */
6625
7110
  200: {
6626
7111
  headers: {
6627
7112
  [name: string]: unknown;
6628
7113
  };
6629
7114
  content: {
6630
- "application/json": components["schemas"]["ModelAliasResponse"];
6631
- };
6632
- };
6633
- /** @description Metadata refresh queued in background (bulk mode) */
6634
- 202: {
6635
- headers: {
6636
- [name: string]: unknown;
6637
- };
6638
- content: {
6639
- /** @example {
6640
- * "num_queued": "all"
6641
- * } */
6642
- "application/json": components["schemas"]["RefreshResponse"];
7115
+ "application/json": components["schemas"]["DownloadRequest"];
6643
7116
  };
6644
7117
  };
6645
7118
  /** @description Invalid request parameters */
@@ -6669,12 +7142,14 @@ export interface operations {
6669
7142
  "application/json": components["schemas"]["BodhiErrorResponse"];
6670
7143
  };
6671
7144
  };
6672
- /** @description Model alias not found for specified repo/filename/snapshot */
7145
+ /** @description Download request not found */
6673
7146
  404: {
6674
7147
  headers: {
6675
7148
  [name: string]: unknown;
6676
7149
  };
6677
- content?: never;
7150
+ content: {
7151
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7152
+ };
6678
7153
  };
6679
7154
  /** @description Internal server error */
6680
7155
  500: {
@@ -6687,25 +7162,25 @@ export interface operations {
6687
7162
  };
6688
7163
  };
6689
7164
  };
6690
- getAlias: {
7165
+ retryDownload: {
6691
7166
  parameters: {
6692
7167
  query?: never;
6693
7168
  header?: never;
6694
7169
  path: {
6695
- /** @description UUID of the alias */
7170
+ /** @description Unique identifier of the download request */
6696
7171
  id: string;
6697
7172
  };
6698
7173
  cookie?: never;
6699
7174
  };
6700
7175
  requestBody?: never;
6701
7176
  responses: {
6702
- /** @description Model alias details */
7177
+ /** @description Download request reset and re-started */
6703
7178
  200: {
6704
7179
  headers: {
6705
7180
  [name: string]: unknown;
6706
7181
  };
6707
7182
  content: {
6708
- "application/json": components["schemas"]["UserAliasResponse"];
7183
+ "application/json": components["schemas"]["DownloadRequest"];
6709
7184
  };
6710
7185
  };
6711
7186
  /** @description Invalid request parameters */
@@ -6735,19 +7210,12 @@ export interface operations {
6735
7210
  "application/json": components["schemas"]["BodhiErrorResponse"];
6736
7211
  };
6737
7212
  };
6738
- /** @description Alias not found */
7213
+ /** @description Download request not found */
6739
7214
  404: {
6740
7215
  headers: {
6741
7216
  [name: string]: unknown;
6742
7217
  };
6743
7218
  content: {
6744
- /** @example {
6745
- * "error": {
6746
- * "code": "alias_not_found",
6747
- * "message": "Alias 'unknown:model' not found",
6748
- * "type": "not_found_error"
6749
- * }
6750
- * } */
6751
7219
  "application/json": components["schemas"]["BodhiErrorResponse"];
6752
7220
  };
6753
7221
  };
@@ -6762,25 +7230,39 @@ export interface operations {
6762
7230
  };
6763
7231
  };
6764
7232
  };
6765
- getQueueStatus: {
7233
+ refreshModelMetadata: {
6766
7234
  parameters: {
6767
7235
  query?: never;
6768
7236
  header?: never;
6769
7237
  path?: never;
6770
7238
  cookie?: never;
6771
7239
  };
6772
- requestBody?: never;
7240
+ /** @description Refresh request - either bulk (source='all') or single model (source='model' with identifiers) */
7241
+ requestBody: {
7242
+ content: {
7243
+ "application/json": components["schemas"]["RefreshRequest"];
7244
+ };
7245
+ };
6773
7246
  responses: {
6774
- /** @description Queue status retrieved successfully */
7247
+ /** @description Metadata refreshed successfully (sync mode) */
6775
7248
  200: {
7249
+ headers: {
7250
+ [name: string]: unknown;
7251
+ };
7252
+ content: {
7253
+ "application/json": components["schemas"]["ModelAliasResponse"];
7254
+ };
7255
+ };
7256
+ /** @description Metadata refresh queued in background (bulk mode) */
7257
+ 202: {
6776
7258
  headers: {
6777
7259
  [name: string]: unknown;
6778
7260
  };
6779
7261
  content: {
6780
7262
  /** @example {
6781
- * "status": "idle"
7263
+ * "num_queued": "all"
6782
7264
  * } */
6783
- "application/json": components["schemas"]["QueueStatusResponse"];
7265
+ "application/json": components["schemas"]["RefreshResponse"];
6784
7266
  };
6785
7267
  };
6786
7268
  /** @description Invalid request parameters */
@@ -6810,6 +7292,13 @@ export interface operations {
6810
7292
  "application/json": components["schemas"]["BodhiErrorResponse"];
6811
7293
  };
6812
7294
  };
7295
+ /** @description Model alias not found for specified repo/filename/snapshot */
7296
+ 404: {
7297
+ headers: {
7298
+ [name: string]: unknown;
7299
+ };
7300
+ content?: never;
7301
+ };
6813
7302
  /** @description Internal server error */
6814
7303
  500: {
6815
7304
  headers: {
@@ -6821,51 +7310,26 @@ export interface operations {
6821
7310
  };
6822
7311
  };
6823
7312
  };
6824
- listSettings: {
7313
+ createModelRouter: {
6825
7314
  parameters: {
6826
7315
  query?: never;
6827
7316
  header?: never;
6828
7317
  path?: never;
6829
7318
  cookie?: never;
6830
7319
  };
6831
- requestBody?: never;
7320
+ requestBody: {
7321
+ content: {
7322
+ "application/json": components["schemas"]["ModelRouterRequest"];
7323
+ };
7324
+ };
6832
7325
  responses: {
6833
- /** @description Application settings retrieved successfully */
6834
- 200: {
7326
+ /** @description Model-router created */
7327
+ 201: {
6835
7328
  headers: {
6836
7329
  [name: string]: unknown;
6837
7330
  };
6838
7331
  content: {
6839
- /** @example [
6840
- * {
6841
- * "current_value": "info",
6842
- * "default_value": "warn",
6843
- * "key": "BODHI_LOG_LEVEL",
6844
- * "metadata": {
6845
- * "options": [
6846
- * "error",
6847
- * "warn",
6848
- * "info",
6849
- * "debug",
6850
- * "trace"
6851
- * ],
6852
- * "type": "option"
6853
- * },
6854
- * "source": "environment"
6855
- * },
6856
- * {
6857
- * "current_value": 1135,
6858
- * "default_value": 1135,
6859
- * "key": "BODHI_PORT",
6860
- * "metadata": {
6861
- * "max": 65535,
6862
- * "min": 1025,
6863
- * "type": "number"
6864
- * },
6865
- * "source": "default"
6866
- * }
6867
- * ] */
6868
- "application/json": components["schemas"]["SettingInfo"][];
7332
+ "application/json": components["schemas"]["ModelRouterResponse"];
6869
7333
  };
6870
7334
  };
6871
7335
  /** @description Invalid request parameters */
@@ -6906,7 +7370,432 @@ export interface operations {
6906
7370
  };
6907
7371
  };
6908
7372
  };
6909
- updateSetting: {
7373
+ getModelRouter: {
7374
+ parameters: {
7375
+ query?: never;
7376
+ header?: never;
7377
+ path: {
7378
+ /** @description Unique identifier for the model-router alias */
7379
+ id: string;
7380
+ };
7381
+ cookie?: never;
7382
+ };
7383
+ requestBody?: never;
7384
+ responses: {
7385
+ /** @description Model-router configuration retrieved */
7386
+ 200: {
7387
+ headers: {
7388
+ [name: string]: unknown;
7389
+ };
7390
+ content: {
7391
+ "application/json": components["schemas"]["ModelRouterResponse"];
7392
+ };
7393
+ };
7394
+ /** @description Invalid request parameters */
7395
+ 400: {
7396
+ headers: {
7397
+ [name: string]: unknown;
7398
+ };
7399
+ content: {
7400
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7401
+ };
7402
+ };
7403
+ /** @description Not authenticated */
7404
+ 401: {
7405
+ headers: {
7406
+ [name: string]: unknown;
7407
+ };
7408
+ content: {
7409
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7410
+ };
7411
+ };
7412
+ /** @description Insufficient permissions */
7413
+ 403: {
7414
+ headers: {
7415
+ [name: string]: unknown;
7416
+ };
7417
+ content: {
7418
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7419
+ };
7420
+ };
7421
+ /** @description Model-router with specified ID not found */
7422
+ 404: {
7423
+ headers: {
7424
+ [name: string]: unknown;
7425
+ };
7426
+ content: {
7427
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7428
+ };
7429
+ };
7430
+ /** @description Internal server error */
7431
+ 500: {
7432
+ headers: {
7433
+ [name: string]: unknown;
7434
+ };
7435
+ content: {
7436
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7437
+ };
7438
+ };
7439
+ };
7440
+ };
7441
+ updateModelRouter: {
7442
+ parameters: {
7443
+ query?: never;
7444
+ header?: never;
7445
+ path: {
7446
+ /** @description Model-router ID */
7447
+ id: string;
7448
+ };
7449
+ cookie?: never;
7450
+ };
7451
+ requestBody: {
7452
+ content: {
7453
+ "application/json": components["schemas"]["ModelRouterRequest"];
7454
+ };
7455
+ };
7456
+ responses: {
7457
+ /** @description Model-router updated */
7458
+ 200: {
7459
+ headers: {
7460
+ [name: string]: unknown;
7461
+ };
7462
+ content: {
7463
+ "application/json": components["schemas"]["ModelRouterResponse"];
7464
+ };
7465
+ };
7466
+ /** @description Invalid request parameters */
7467
+ 400: {
7468
+ headers: {
7469
+ [name: string]: unknown;
7470
+ };
7471
+ content: {
7472
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7473
+ };
7474
+ };
7475
+ /** @description Not authenticated */
7476
+ 401: {
7477
+ headers: {
7478
+ [name: string]: unknown;
7479
+ };
7480
+ content: {
7481
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7482
+ };
7483
+ };
7484
+ /** @description Insufficient permissions */
7485
+ 403: {
7486
+ headers: {
7487
+ [name: string]: unknown;
7488
+ };
7489
+ content: {
7490
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7491
+ };
7492
+ };
7493
+ /** @description Model-router not found */
7494
+ 404: {
7495
+ headers: {
7496
+ [name: string]: unknown;
7497
+ };
7498
+ content: {
7499
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7500
+ };
7501
+ };
7502
+ /** @description Internal server error */
7503
+ 500: {
7504
+ headers: {
7505
+ [name: string]: unknown;
7506
+ };
7507
+ content: {
7508
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7509
+ };
7510
+ };
7511
+ };
7512
+ };
7513
+ deleteModelRouter: {
7514
+ parameters: {
7515
+ query?: never;
7516
+ header?: never;
7517
+ path: {
7518
+ /** @description Model-router ID */
7519
+ id: string;
7520
+ };
7521
+ cookie?: never;
7522
+ };
7523
+ requestBody?: never;
7524
+ responses: {
7525
+ /** @description Model-router deleted */
7526
+ 204: {
7527
+ headers: {
7528
+ [name: string]: unknown;
7529
+ };
7530
+ content?: never;
7531
+ };
7532
+ /** @description Invalid request parameters */
7533
+ 400: {
7534
+ headers: {
7535
+ [name: string]: unknown;
7536
+ };
7537
+ content: {
7538
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7539
+ };
7540
+ };
7541
+ /** @description Not authenticated */
7542
+ 401: {
7543
+ headers: {
7544
+ [name: string]: unknown;
7545
+ };
7546
+ content: {
7547
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7548
+ };
7549
+ };
7550
+ /** @description Insufficient permissions */
7551
+ 403: {
7552
+ headers: {
7553
+ [name: string]: unknown;
7554
+ };
7555
+ content: {
7556
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7557
+ };
7558
+ };
7559
+ /** @description Model-router not found */
7560
+ 404: {
7561
+ headers: {
7562
+ [name: string]: unknown;
7563
+ };
7564
+ content: {
7565
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7566
+ };
7567
+ };
7568
+ /** @description Internal server error */
7569
+ 500: {
7570
+ headers: {
7571
+ [name: string]: unknown;
7572
+ };
7573
+ content: {
7574
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7575
+ };
7576
+ };
7577
+ };
7578
+ };
7579
+ getAlias: {
7580
+ parameters: {
7581
+ query?: never;
7582
+ header?: never;
7583
+ path: {
7584
+ /** @description UUID of the alias */
7585
+ id: string;
7586
+ };
7587
+ cookie?: never;
7588
+ };
7589
+ requestBody?: never;
7590
+ responses: {
7591
+ /** @description Model alias details */
7592
+ 200: {
7593
+ headers: {
7594
+ [name: string]: unknown;
7595
+ };
7596
+ content: {
7597
+ "application/json": components["schemas"]["UserAliasResponse"];
7598
+ };
7599
+ };
7600
+ /** @description Invalid request parameters */
7601
+ 400: {
7602
+ headers: {
7603
+ [name: string]: unknown;
7604
+ };
7605
+ content: {
7606
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7607
+ };
7608
+ };
7609
+ /** @description Not authenticated */
7610
+ 401: {
7611
+ headers: {
7612
+ [name: string]: unknown;
7613
+ };
7614
+ content: {
7615
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7616
+ };
7617
+ };
7618
+ /** @description Insufficient permissions */
7619
+ 403: {
7620
+ headers: {
7621
+ [name: string]: unknown;
7622
+ };
7623
+ content: {
7624
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7625
+ };
7626
+ };
7627
+ /** @description Alias not found */
7628
+ 404: {
7629
+ headers: {
7630
+ [name: string]: unknown;
7631
+ };
7632
+ content: {
7633
+ /** @example {
7634
+ * "error": {
7635
+ * "code": "alias_not_found",
7636
+ * "message": "Alias 'unknown:model' not found",
7637
+ * "type": "not_found_error"
7638
+ * }
7639
+ * } */
7640
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7641
+ };
7642
+ };
7643
+ /** @description Internal server error */
7644
+ 500: {
7645
+ headers: {
7646
+ [name: string]: unknown;
7647
+ };
7648
+ content: {
7649
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7650
+ };
7651
+ };
7652
+ };
7653
+ };
7654
+ getQueueStatus: {
7655
+ parameters: {
7656
+ query?: never;
7657
+ header?: never;
7658
+ path?: never;
7659
+ cookie?: never;
7660
+ };
7661
+ requestBody?: never;
7662
+ responses: {
7663
+ /** @description Queue status retrieved successfully */
7664
+ 200: {
7665
+ headers: {
7666
+ [name: string]: unknown;
7667
+ };
7668
+ content: {
7669
+ /** @example {
7670
+ * "status": "idle"
7671
+ * } */
7672
+ "application/json": components["schemas"]["QueueStatusResponse"];
7673
+ };
7674
+ };
7675
+ /** @description Invalid request parameters */
7676
+ 400: {
7677
+ headers: {
7678
+ [name: string]: unknown;
7679
+ };
7680
+ content: {
7681
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7682
+ };
7683
+ };
7684
+ /** @description Not authenticated */
7685
+ 401: {
7686
+ headers: {
7687
+ [name: string]: unknown;
7688
+ };
7689
+ content: {
7690
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7691
+ };
7692
+ };
7693
+ /** @description Insufficient permissions */
7694
+ 403: {
7695
+ headers: {
7696
+ [name: string]: unknown;
7697
+ };
7698
+ content: {
7699
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7700
+ };
7701
+ };
7702
+ /** @description Internal server error */
7703
+ 500: {
7704
+ headers: {
7705
+ [name: string]: unknown;
7706
+ };
7707
+ content: {
7708
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7709
+ };
7710
+ };
7711
+ };
7712
+ };
7713
+ listSettings: {
7714
+ parameters: {
7715
+ query?: never;
7716
+ header?: never;
7717
+ path?: never;
7718
+ cookie?: never;
7719
+ };
7720
+ requestBody?: never;
7721
+ responses: {
7722
+ /** @description Application settings retrieved successfully */
7723
+ 200: {
7724
+ headers: {
7725
+ [name: string]: unknown;
7726
+ };
7727
+ content: {
7728
+ /** @example [
7729
+ * {
7730
+ * "current_value": "info",
7731
+ * "default_value": "warn",
7732
+ * "key": "BODHI_LOG_LEVEL",
7733
+ * "metadata": {
7734
+ * "options": [
7735
+ * "error",
7736
+ * "warn",
7737
+ * "info",
7738
+ * "debug",
7739
+ * "trace"
7740
+ * ],
7741
+ * "type": "option"
7742
+ * },
7743
+ * "source": "environment"
7744
+ * },
7745
+ * {
7746
+ * "current_value": 1135,
7747
+ * "default_value": 1135,
7748
+ * "key": "BODHI_PORT",
7749
+ * "metadata": {
7750
+ * "max": 65535,
7751
+ * "min": 1025,
7752
+ * "type": "number"
7753
+ * },
7754
+ * "source": "default"
7755
+ * }
7756
+ * ] */
7757
+ "application/json": components["schemas"]["SettingInfo"][];
7758
+ };
7759
+ };
7760
+ /** @description Invalid request parameters */
7761
+ 400: {
7762
+ headers: {
7763
+ [name: string]: unknown;
7764
+ };
7765
+ content: {
7766
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7767
+ };
7768
+ };
7769
+ /** @description Not authenticated */
7770
+ 401: {
7771
+ headers: {
7772
+ [name: string]: unknown;
7773
+ };
7774
+ content: {
7775
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7776
+ };
7777
+ };
7778
+ /** @description Insufficient permissions */
7779
+ 403: {
7780
+ headers: {
7781
+ [name: string]: unknown;
7782
+ };
7783
+ content: {
7784
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7785
+ };
7786
+ };
7787
+ /** @description Internal server error */
7788
+ 500: {
7789
+ headers: {
7790
+ [name: string]: unknown;
7791
+ };
7792
+ content: {
7793
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7794
+ };
7795
+ };
7796
+ };
7797
+ };
7798
+ updateSetting: {
6910
7799
  parameters: {
6911
7800
  query?: never;
6912
7801
  header?: never;
@@ -6926,7 +7815,7 @@ export interface operations {
6926
7815
  * "value": "debug"
6927
7816
  * } */
6928
7817
  "application/json": {
6929
- /** @description New value for the setting (type depends on setting metadata) */
7818
+ /** @description type depends on setting metadata */
6930
7819
  value: unknown;
6931
7820
  };
6932
7821
  };
@@ -7585,6 +8474,75 @@ export interface operations {
7585
8474
  };
7586
8475
  };
7587
8476
  };
8477
+ deleteApiToken: {
8478
+ parameters: {
8479
+ query?: never;
8480
+ header?: never;
8481
+ path: {
8482
+ /**
8483
+ * @description Unique identifier of the API token to delete
8484
+ * @example 550e8400-e29b-41d4-a716-446655440000
8485
+ */
8486
+ id: string;
8487
+ };
8488
+ cookie?: never;
8489
+ };
8490
+ requestBody?: never;
8491
+ responses: {
8492
+ /** @description Token deleted successfully */
8493
+ 204: {
8494
+ headers: {
8495
+ [name: string]: unknown;
8496
+ };
8497
+ content?: never;
8498
+ };
8499
+ /** @description Invalid request parameters */
8500
+ 400: {
8501
+ headers: {
8502
+ [name: string]: unknown;
8503
+ };
8504
+ content: {
8505
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8506
+ };
8507
+ };
8508
+ /** @description Not authenticated */
8509
+ 401: {
8510
+ headers: {
8511
+ [name: string]: unknown;
8512
+ };
8513
+ content: {
8514
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8515
+ };
8516
+ };
8517
+ /** @description Insufficient permissions */
8518
+ 403: {
8519
+ headers: {
8520
+ [name: string]: unknown;
8521
+ };
8522
+ content: {
8523
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8524
+ };
8525
+ };
8526
+ /** @description Token not found */
8527
+ 404: {
8528
+ headers: {
8529
+ [name: string]: unknown;
8530
+ };
8531
+ content: {
8532
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8533
+ };
8534
+ };
8535
+ /** @description Internal server error */
8536
+ 500: {
8537
+ headers: {
8538
+ [name: string]: unknown;
8539
+ };
8540
+ content: {
8541
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8542
+ };
8543
+ };
8544
+ };
8545
+ };
7588
8546
  getCurrentUser: {
7589
8547
  parameters: {
7590
8548
  query?: never;