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