@bodhiapp/ts-client 0.1.33 → 0.1.35

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,32 +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
- flow_type: components["schemas"]["FlowType"];
1204
- /** @description Redirect URL (present for redirect flow) */
1205
- redirect_url?: string | null;
1326
+ /** @description Dynamic scope minted on approval; the review page appends it to `auth_url` before redirecting to Keycloak. */
1327
+ access_request_scope?: string | null;
1206
1328
  };
1207
1329
  AccessRequestReviewResponse: {
1208
- /** @description Access request ID */
1209
1330
  id: string;
1210
- /** @description App client ID */
1211
1331
  app_client_id: string;
1212
- /** @description App name from KC (if available) */
1332
+ /** @description From KC, if available */
1213
1333
  app_name?: string | null;
1214
- /** @description App description from KC (if available) */
1334
+ /** @description From KC, if available */
1215
1335
  app_description?: string | null;
1216
- /** @description Flow type: "redirect" or "popup" */
1217
- flow_type: components["schemas"]["FlowType"];
1218
- /** @description Current status */
1219
1336
  status: components["schemas"]["AppAccessRequestStatus"];
1220
- /** @description Role requested by the app */
1221
1337
  requested_role: string;
1222
- /** @description Resources requested */
1223
1338
  requested: components["schemas"]["RequestedResources"];
1224
- /** @description MCP server information with user instances */
1225
1339
  mcps_info?: components["schemas"]["McpServerReviewInfo"][];
1340
+ /** @description Canonical Keycloak authorize endpoint the review page validates the app-supplied `auth_url` against. */
1341
+ auth_endpoint: string;
1226
1342
  };
1227
1343
  /** @example {
1228
1344
  * "access_request_scope": "scope_access_request:550e8400-e29b-41d4-a716-446655440000",
@@ -1232,14 +1348,12 @@ export interface components {
1232
1348
  * "status": "approved"
1233
1349
  * } */
1234
1350
  AccessRequestStatusResponse: {
1235
- /** @description Access request ID */
1236
1351
  id: string;
1237
- /** @description Current status: "draft", "approved", "denied", "failed" */
1352
+ /** @description One of: "draft", "approved", "denied", "failed" */
1238
1353
  status: components["schemas"]["AppAccessRequestStatus"];
1239
- /** @description Role requested by the app */
1240
1354
  requested_role: components["schemas"]["UserScope"];
1241
1355
  approved_role?: null | components["schemas"]["UserScope"];
1242
- /** @description Access request scope (present when user-approved with tools) */
1356
+ /** @description Present when user-approved with tools */
1243
1357
  access_request_scope?: string | null;
1244
1358
  };
1245
1359
  /** @description Flat enum representing all types of model aliases
@@ -1253,10 +1367,54 @@ export interface components {
1253
1367
  }) | (components["schemas"]["ApiAlias"] & {
1254
1368
  /** @enum {string} */
1255
1369
  source: "api";
1370
+ }) | (components["schemas"]["ModelRouterAlias"] & {
1371
+ /** @enum {string} */
1372
+ source: "model_router";
1256
1373
  });
1374
+ /** @description Facet filter query parameters for the All-Models list (`GET /bodhi/v1/models`).
1375
+ *
1376
+ * All facets are server-side and applied before pagination so `total` and the page
1377
+ * reflect the filtered set. Multi-value facets accept a comma-separated list; an empty
1378
+ * or absent value means "no filter for this facet" (all rows pass). */
1379
+ AliasFilterParams: {
1380
+ /**
1381
+ * @description Alias type facet (comma-separated): `local_file`, `model_alias`, `api_model`, `fallback`.
1382
+ * @example local_file,model_alias
1383
+ */
1384
+ type?: string | null;
1385
+ /**
1386
+ * @description API-format facet (comma-separated), API rows only: `openai`, `responses`, `anthropic`,
1387
+ * `gemini`, `liberty`. `anthropic` matches both anthropic and anthropic_oauth aliases.
1388
+ * @example openai,anthropic
1389
+ */
1390
+ api_format?: string | null;
1391
+ /**
1392
+ * Format: int64
1393
+ * @description Minimum local-file size in bytes (inclusive). Applies to local rows with a known size;
1394
+ * rows without a size (API/router) are not filtered out by size.
1395
+ */
1396
+ size_min?: number | null;
1397
+ /**
1398
+ * Format: int64
1399
+ * @description Maximum local-file size in bytes (inclusive). See `size_min`.
1400
+ */
1401
+ size_max?: number | null;
1402
+ /**
1403
+ * @description Capability facet (comma-separated), local rows only: `vision`, `tool_use`, `reasoning`.
1404
+ * A row passes only if it has metadata with every requested capability set true.
1405
+ * @example vision,tool_use
1406
+ */
1407
+ capability?: string | null;
1408
+ /**
1409
+ * @description Free-text search (case-insensitive substring) over a row's identifying fields — alias/name,
1410
+ * repo, filename for local rows; id, name, base_url for API rows; alias for routers.
1411
+ * @example llama
1412
+ */
1413
+ search?: string | null;
1414
+ };
1257
1415
  /** @description Response envelope for model aliases - hides internal implementation details
1258
1416
  * Uses untagged serialization - each variant has its own "source" field */
1259
- AliasResponse: components["schemas"]["UserAliasResponse"] | components["schemas"]["ModelAliasResponse"] | components["schemas"]["ApiAliasResponse"];
1417
+ AliasResponse: components["schemas"]["ModelRouterResponse"] | components["schemas"]["UserAliasResponse"] | components["schemas"]["ModelAliasResponse"] | components["schemas"]["ApiAliasResponse"];
1260
1418
  /** @description Mirrors Anthropic's `ModelInfo` schema — full model metadata returned by
1261
1419
  * `GET /anthropic/v1/models` and stored alongside model IDs in `ApiAlias.models`.
1262
1420
  *
@@ -1274,10 +1432,9 @@ export interface components {
1274
1432
  max_input_tokens?: number | null;
1275
1433
  /** Format: int64 */
1276
1434
  max_tokens?: number | null;
1277
- /** @description Always `"model"` — included for Anthropic API compatibility. */
1278
1435
  type: string;
1279
1436
  };
1280
- /** @description Model capability information (Anthropic ModelCapabilities schema). */
1437
+ /** @description Anthropic ModelCapabilities schema. */
1281
1438
  AnthropicModelCapabilities: {
1282
1439
  batch: components["schemas"]["CapabilitySupport"];
1283
1440
  citations: components["schemas"]["CapabilitySupport"];
@@ -1291,6 +1448,7 @@ export interface components {
1291
1448
  };
1292
1449
  ApiAlias: {
1293
1450
  id: string;
1451
+ name: string;
1294
1452
  api_format: components["schemas"]["ApiFormat"];
1295
1453
  base_url: string;
1296
1454
  models: components["schemas"]["ApiModelVec"];
@@ -1307,6 +1465,7 @@ export interface components {
1307
1465
  ApiAliasResponse: {
1308
1466
  source: string;
1309
1467
  id: string;
1468
+ name: string;
1310
1469
  api_format: components["schemas"]["ApiFormat"];
1311
1470
  base_url: string;
1312
1471
  has_api_key: boolean;
@@ -1402,13 +1561,31 @@ export interface components {
1402
1561
  /** @description DB-storable `Vec<ApiModel>` — stored as JSON binary in SeaORM columns. */
1403
1562
  ApiModelVec: components["schemas"]["ApiModel"][];
1404
1563
  /** @enum {string} */
1405
- AppAccessRequestStatus: "draft" | "approved" | "denied" | "failed" | "expired";
1564
+ AppAccessRequestStatus: "draft" | "approved" | "denied" | "failed" | "expired" | "revoked";
1565
+ /** @description One issued app token (approved access request) with its effective grant summary. */
1566
+ AppAccessSummary: {
1567
+ id: string;
1568
+ app_client_id: string;
1569
+ app_name?: string | null;
1570
+ app_description?: string | null;
1571
+ status: components["schemas"]["AppAccessRequestStatus"];
1572
+ approved_role?: null | components["schemas"]["UserScope"];
1573
+ /** @description Effective model access granted to this app. */
1574
+ models: components["schemas"]["ResourceAccess"];
1575
+ /** @description Effective MCP access granted to this app. */
1576
+ mcps: components["schemas"]["ResourceAccess"];
1577
+ /** Format: date-time */
1578
+ created_at: string;
1579
+ /** Format: date-time */
1580
+ updated_at: string;
1581
+ };
1406
1582
  /**
1407
1583
  * @description Application information and status
1408
1584
  * @example {
1409
1585
  * "client_id": "my-client-id",
1410
1586
  * "commit_sha": "abc1234",
1411
1587
  * "deployment": "standalone",
1588
+ * "reference_api_url": "https://api.getbodhi.app",
1412
1589
  * "status": "ready",
1413
1590
  * "url": "https://example.com",
1414
1591
  * "version": "0.1.0"
@@ -1439,6 +1616,12 @@ export interface components {
1439
1616
  * @example https://example.com
1440
1617
  */
1441
1618
  url: string;
1619
+ /**
1620
+ * @description Base URL of the external reference API the frontend calls directly (configurable via
1621
+ * `BODHI_REFERENCE_API_URL`, env-overridable for tests)
1622
+ * @example https://api.getbodhi.app
1623
+ */
1624
+ reference_api_url: string;
1442
1625
  };
1443
1626
  AppRole: components["schemas"]["ResourceRole"] | components["schemas"]["TokenScope"] | components["schemas"]["UserScope"];
1444
1627
  /**
@@ -1448,9 +1631,7 @@ export interface components {
1448
1631
  AppStatus: "setup" | "ready" | "resource_admin";
1449
1632
  /** @enum {string} */
1450
1633
  ApprovalStatus: "approved" | "denied";
1451
- /**
1452
- * @description Request for approving an app access request
1453
- * @example {
1634
+ /** @example {
1454
1635
  * "approved": {
1455
1636
  * "mcps": [
1456
1637
  * {
@@ -1465,8 +1646,7 @@ export interface components {
1465
1646
  * "version": "1"
1466
1647
  * },
1467
1648
  * "approved_role": "scope_user_user"
1468
- * }
1469
- */
1649
+ * } */
1470
1650
  ApproveAccessRequest: {
1471
1651
  /** @description Role to grant for the approved request (scope_user_user or scope_user_power_user) */
1472
1652
  approved_role: components["schemas"]["UserScope"];
@@ -1483,14 +1663,23 @@ export interface components {
1483
1663
  /** @description Role to assign to the user */
1484
1664
  role: components["schemas"]["ResourceRole"];
1485
1665
  };
1486
- /** @description Versioned envelope for approved resources.
1487
- * The `version` tag is mandatory and must match the corresponding `RequestedResources` version. */
1666
+ /** @description The `version` tag is mandatory and must match the corresponding `RequestedResources` version. */
1488
1667
  ApprovedResources: components["schemas"]["ApprovedResourcesV1"] & {
1489
1668
  /** @enum {string} */
1490
1669
  version: "1";
1491
1670
  };
1671
+ /** @description What the owner granted at consent. Field names mirror `RequestedResourcesV1`
1672
+ * (`models_list` / `models_access` / `mcps_list` / `mcps_access`) — there the
1673
+ * values are UI-driver booleans, here they are the actual grants. `mcps` holds
1674
+ * the by-url instance approvals; `mcps_access` is the owner-granted set beyond them. */
1492
1675
  ApprovedResourcesV1: {
1676
+ models_list?: boolean;
1677
+ models_access?: components["schemas"]["ModelGrant"];
1678
+ mcps_list?: boolean;
1493
1679
  mcps?: components["schemas"]["McpApproval"][];
1680
+ /** @description Owner-granted MCP instances beyond the by-url requests. Defaults to none
1681
+ * (empty `Specific`) — unlike a token's all-access default. */
1682
+ mcps_access?: components["schemas"]["McpGrant"];
1494
1683
  };
1495
1684
  /** @example {
1496
1685
  * "code": "auth_code_123",
@@ -1498,12 +1687,12 @@ export interface components {
1498
1687
  * } */
1499
1688
  AuthCallbackRequest: {
1500
1689
  /**
1501
- * @description OAuth authorization code from successful authentication (required for success flow)
1690
+ * @description Required for the success flow
1502
1691
  * @example auth_code_123
1503
1692
  */
1504
1693
  code?: string | null;
1505
1694
  /**
1506
- * @description OAuth state parameter for CSRF protection (must match initiated request)
1695
+ * @description CSRF protection must match the initiated request
1507
1696
  * @example random_state_456
1508
1697
  */
1509
1698
  state?: string | null;
@@ -1512,10 +1701,7 @@ export interface components {
1512
1701
  * @example access_denied
1513
1702
  */
1514
1703
  error?: string | null;
1515
- /**
1516
- * @description Human-readable OAuth error description if authentication failed
1517
- * @example The user denied the request
1518
- */
1704
+ /** @example The user denied the request */
1519
1705
  error_description?: string | null;
1520
1706
  } & {
1521
1707
  [key: string]: string;
@@ -1592,7 +1778,6 @@ export interface components {
1592
1778
  /** @description Error details following Bodhi API error format */
1593
1779
  error: components["schemas"]["BodhiError"];
1594
1780
  };
1595
- /** @description Whether a single capability is supported by the model. */
1596
1781
  CapabilitySupport: {
1597
1782
  supported: boolean;
1598
1783
  };
@@ -1607,7 +1792,6 @@ export interface components {
1607
1792
  /** Format: int64 */
1608
1793
  max_output_tokens?: number | null;
1609
1794
  };
1610
- /** @description Context management capability details. */
1611
1795
  ContextManagementCapability: {
1612
1796
  clear_thinking_20251015?: null | components["schemas"]["CapabilitySupport"];
1613
1797
  clear_tool_uses_20250919?: null | components["schemas"]["CapabilitySupport"];
@@ -1616,12 +1800,8 @@ export interface components {
1616
1800
  CopyAliasRequest: {
1617
1801
  alias: string;
1618
1802
  };
1619
- /**
1620
- * @description Request for creating an app access request
1621
- * @example {
1803
+ /** @example {
1622
1804
  * "app_client_id": "my-app-client",
1623
- * "flow_type": "redirect",
1624
- * "redirect_url": "https://myapp.com/callback",
1625
1805
  * "requested": {
1626
1806
  * "mcp_servers": [
1627
1807
  * {
@@ -1631,15 +1811,10 @@ export interface components {
1631
1811
  * "version": "1"
1632
1812
  * },
1633
1813
  * "requested_role": "scope_user_user"
1634
- * }
1635
- */
1814
+ * } */
1636
1815
  CreateAccessRequest: {
1637
1816
  /** @description App client ID from Keycloak */
1638
1817
  app_client_id: string;
1639
- /** @description Flow type: "redirect" or "popup" */
1640
- flow_type: components["schemas"]["FlowType"];
1641
- /** @description Redirect URL for result notification (required for redirect flow) */
1642
- redirect_url?: string | null;
1643
1818
  /** @description Role requested for the external app (scope_user_user or scope_user_power_user) */
1644
1819
  requested_role: components["schemas"]["UserScope"];
1645
1820
  /** @description Resources requested (tools, etc.) */
@@ -1651,11 +1826,9 @@ export interface components {
1651
1826
  * "status": "draft"
1652
1827
  * } */
1653
1828
  CreateAccessRequestResponse: {
1654
- /** @description Access request ID */
1655
1829
  id: string;
1656
- /** @description Status (always "draft") */
1830
+ /** @description Always "draft" */
1657
1831
  status: components["schemas"]["AppAccessRequestStatus"];
1658
- /** @description Review URL for user to approve/deny */
1659
1832
  review_url: string;
1660
1833
  };
1661
1834
  /** @description Wrapper for creating auth configs with server_id in body instead of path */
@@ -1705,6 +1878,9 @@ export interface components {
1705
1878
  name?: string | null;
1706
1879
  /** @description Token scope defining access level */
1707
1880
  scope: components["schemas"]["TokenScope"];
1881
+ /** @description Per-resource grants for this token. Defaults to deny (least-privilege) when
1882
+ * omitted — specify grants to widen access. */
1883
+ grants?: components["schemas"]["TokenGrants"];
1708
1884
  };
1709
1885
  /** @description Dashboard user information from a validated dashboard session token */
1710
1886
  DashboardUser: {
@@ -1716,6 +1892,8 @@ export interface components {
1716
1892
  /** @description Inner request shape for the five non-llm-liberty `api_format` values.
1717
1893
  * Shared across `openai`, `openai_responses`, `anthropic`, `anthropic_oauth`, `gemini`. */
1718
1894
  DefaultApiModelRequest: {
1895
+ /** @description User-provided descriptive name for this API model */
1896
+ name: string;
1719
1897
  /** @description API base URL */
1720
1898
  base_url: string;
1721
1899
  /** @description API key update action (Keep/Set with Some or None) */
@@ -1773,6 +1951,8 @@ export interface components {
1773
1951
  /** Format: date-time */
1774
1952
  started_at?: string | null;
1775
1953
  /** Format: date-time */
1954
+ archived_at?: string | null;
1955
+ /** Format: date-time */
1776
1956
  created_at: string;
1777
1957
  /** Format: date-time */
1778
1958
  updated_at: string;
@@ -1798,6 +1978,18 @@ export interface components {
1798
1978
  low: components["schemas"]["CapabilitySupport"];
1799
1979
  max: components["schemas"]["CapabilitySupport"];
1800
1980
  };
1981
+ /** @description Per-strategy resilience config for the fallback strategy. Phase 1 persists defaults
1982
+ * and does not yet act on them (failover/health land in later phases). */
1983
+ FallbackConfig: {
1984
+ /** Format: int32 */
1985
+ cooldown_secs?: number;
1986
+ /**
1987
+ * Format: int32
1988
+ * @description 0 = try the whole chain.
1989
+ */
1990
+ max_attempts?: number;
1991
+ honor_retry_after?: boolean;
1992
+ };
1801
1993
  /**
1802
1994
  * @description Request to fetch available models from provider. Discriminated on `api_format`.
1803
1995
  * @example {
@@ -1842,8 +2034,6 @@ export interface components {
1842
2034
  FetchModelsResponse: {
1843
2035
  models: string[];
1844
2036
  };
1845
- /** @enum {string} */
1846
- FlowType: "redirect" | "popup";
1847
2037
  /** @description Gemini `Model` schema (see `openapi-gemini.json`). */
1848
2038
  GeminiModel: {
1849
2039
  name: string;
@@ -1866,6 +2056,10 @@ export interface components {
1866
2056
  thinking?: boolean | null;
1867
2057
  };
1868
2058
  JsonVec: string[];
2059
+ /** @description Response for GET /access-requests/apps — the caller's issued app tokens. */
2060
+ ListAppAccessResponse: {
2061
+ data: components["schemas"]["AppAccessSummary"][];
2062
+ };
1869
2063
  ListMcpServersResponse: {
1870
2064
  mcp_servers: components["schemas"]["McpServerResponse"][];
1871
2065
  };
@@ -1894,6 +2088,8 @@ export interface components {
1894
2088
  /** @description Request shape for `api_format == "llm_liberty_oauth"`. Carries the full envelope
1895
2089
  * (or `Keep` to leave existing credentials untouched on update). */
1896
2090
  LlmLibertyApiModelRequest: {
2091
+ /** @description User-provided descriptive name for this API model */
2092
+ name: string;
1897
2093
  /** @description Envelope update action — Keep (update only) or Set (create/replace credentials). */
1898
2094
  envelope?: components["schemas"]["LlmLibertyEnvelopeUpdate"];
1899
2095
  /** @description List of available models */
@@ -1903,6 +2099,7 @@ export interface components {
1903
2099
  /** @description Whether to forward all requests with this prefix */
1904
2100
  forward_all_with_prefix?: boolean;
1905
2101
  };
2102
+ /** @description Envelope sub-types mirror the llm-liberty JSON contract v1.0.0. */
1906
2103
  LlmLibertyAuthSpec: {
1907
2104
  in: string;
1908
2105
  key: string;
@@ -1977,7 +2174,6 @@ export interface components {
1977
2174
  /** @description Test prompt (max 30 characters for cost control) */
1978
2175
  prompt: string;
1979
2176
  };
1980
- /** @description Local model file response */
1981
2177
  LocalModelResponse: {
1982
2178
  repo: string;
1983
2179
  filename: string;
@@ -1991,32 +2187,24 @@ export interface components {
1991
2187
  };
1992
2188
  /** @description User-owned MCP server instance. */
1993
2189
  Mcp: {
1994
- /** @description Unique instance identifier (UUID) */
1995
2190
  id: string;
1996
2191
  /** @description Server info resolved via JOIN */
1997
2192
  mcp_server: components["schemas"]["McpServerInfo"];
1998
- /** @description User-defined slug for this instance */
1999
2193
  slug: string;
2000
- /** @description Human-readable name */
2001
2194
  name: string;
2002
- /** @description Optional description for this instance */
2003
2195
  description?: string | null;
2004
- /** @description Whether this instance is enabled */
2005
2196
  enabled: boolean;
2006
- /** @description MCP proxy path for this instance */
2007
2197
  path: string;
2008
2198
  auth_type: components["schemas"]["McpAuthType"];
2009
2199
  /** @description Reference to the auth config (mcp_auth_configs.id) */
2010
2200
  auth_config_id?: string | null;
2011
2201
  /**
2012
2202
  * Format: date-time
2013
- * @description When this instance was created
2014
2203
  * @example 2024-11-10T04:52:06.786Z
2015
2204
  */
2016
2205
  created_at: string;
2017
2206
  /**
2018
2207
  * Format: date-time
2019
- * @description When this instance was last updated
2020
2208
  * @example 2024-11-10T04:52:06.786Z
2021
2209
  */
2022
2210
  updated_at: string;
@@ -2078,6 +2266,7 @@ export interface components {
2078
2266
  McpAuthConfigsListResponse: {
2079
2267
  auth_configs: components["schemas"]["McpAuthConfigResponse"][];
2080
2268
  };
2269
+ /** @description Masked auth param response. */
2081
2270
  McpAuthParam: {
2082
2271
  id: string;
2083
2272
  param_type: components["schemas"]["McpAuthParamType"];
@@ -2093,6 +2282,21 @@ export interface components {
2093
2282
  McpAuthParamType: "header" | "query";
2094
2283
  /** @enum {string} */
2095
2284
  McpAuthType: "public" | "header" | "oauth";
2285
+ /** @description MCP connect grant. `All` is a wildcard (incl. future MCPs); `Specific` lists
2286
+ * the user's own instance ids (empty ⇒ no MCP access).
2287
+ *
2288
+ * Defaults to **least-privilege** (empty `Specific` ⇒ deny), symmetric with
2289
+ * `ModelGrant`: an unspecified or legacy grant grants nothing, so a stored
2290
+ * payload that omits `mcps` cannot silently grant every MCP. All-access must be
2291
+ * requested explicitly via `McpGrant::All`. */
2292
+ McpGrant: {
2293
+ /** @enum {string} */
2294
+ type: "all";
2295
+ } | {
2296
+ ids: string[];
2297
+ /** @enum {string} */
2298
+ type: "specific";
2299
+ };
2096
2300
  McpInstance: {
2097
2301
  id: string;
2098
2302
  /** @description MCP proxy path for this instance (e.g. `/bodhi/v1/apps/mcps/{id}/mcp`) */
@@ -2100,51 +2304,37 @@ export interface components {
2100
2304
  };
2101
2305
  /** @description Input for creating or updating an MCP instance. */
2102
2306
  McpRequest: {
2103
- /** @description Human-readable name (required) */
2104
2307
  name: string;
2105
- /** @description User-defined slug for this instance (1-24 chars, alphanumeric + hyphens) */
2308
+ /** @description 1-24 chars, alphanumeric + hyphens. */
2106
2309
  slug: string;
2107
- /** @description MCP server ID (required for create, ignored for update) */
2310
+ /** @description Required for create, ignored for update. */
2108
2311
  mcp_server_id?: string | null;
2109
- /** @description Optional description */
2110
2312
  description?: string | null;
2111
- /** @description Whether this instance is enabled */
2112
2313
  enabled: boolean;
2113
- /** @description Authentication type */
2114
2314
  auth_type?: components["schemas"]["McpAuthType"];
2115
- /** @description Reference to auth config */
2116
2315
  auth_config_id?: string | null;
2117
- /** @description Instance-level auth params (values for the auth config's key definitions) */
2316
+ /** @description Instance-level values for the auth config's key definitions. */
2118
2317
  credentials?: components["schemas"]["McpAuthParamInput"][] | null;
2119
- /** @description OAuth token ID to link to this MCP instance (set after OAuth flow) */
2318
+ /** @description OAuth token ID to link to this MCP instance (set after OAuth flow). */
2120
2319
  oauth_token_id?: string | null;
2121
2320
  };
2122
- /** @description Admin-managed MCP server registry entry.
2123
- * Admins/managers register MCP server URLs that users can then create instances of. */
2321
+ /** @description Admin-managed MCP server registry entry that users create instances of. */
2124
2322
  McpServer: {
2125
- /** @description Unique identifier (UUID) */
2126
2323
  id: string;
2127
2324
  /** @description MCP server endpoint URL (trimmed, case-insensitive unique) */
2128
2325
  url: string;
2129
- /** @description Human-readable display name */
2130
2326
  name: string;
2131
- /** @description Optional description */
2132
2327
  description?: string | null;
2133
- /** @description Whether this MCP server is enabled */
2134
2328
  enabled: boolean;
2135
- /** @description User who created this entry */
2136
2329
  created_by: string;
2137
- /** @description User who last updated this entry */
2138
2330
  updated_by: string;
2139
2331
  /**
2140
2332
  * Format: date-time
2141
- * @description When this entry was created
2142
2333
  * @example 2024-11-10T04:52:06.786Z
2143
2334
  */
2144
2335
  created_at: string;
2145
2336
  /**
2146
2337
  * Format: date-time
2147
- * @description When this entry was last updated
2148
2338
  * @example 2024-11-10T04:52:06.786Z
2149
2339
  */
2150
2340
  updated_at: string;
@@ -2158,13 +2348,10 @@ export interface components {
2158
2348
  };
2159
2349
  /** @description Input for creating or updating an MCP server. */
2160
2350
  McpServerRequest: {
2161
- /** @description MCP server endpoint URL (trimmed, case-insensitive unique) */
2351
+ /** @description MCP server endpoint URL (trimmed, case-insensitive unique). */
2162
2352
  url: string;
2163
- /** @description Human-readable display name */
2164
2353
  name: string;
2165
- /** @description Optional description */
2166
2354
  description?: string | null;
2167
- /** @description Whether this MCP server is enabled */
2168
2355
  enabled: boolean;
2169
2356
  auth_config?: null | components["schemas"]["CreateMcpAuthConfigRequest"];
2170
2357
  };
@@ -2177,7 +2364,6 @@ export interface components {
2177
2364
  auth_config?: null | components["schemas"]["McpAuthConfigResponse"];
2178
2365
  };
2179
2366
  McpServerReviewInfo: {
2180
- /** @description Requested MCP server URL */
2181
2367
  url: string;
2182
2368
  /** @description User's MCP instances connected to this server URL */
2183
2369
  instances: components["schemas"]["Mcp"][];
@@ -2210,6 +2396,11 @@ export interface components {
2210
2396
  repo: string;
2211
2397
  filename: string;
2212
2398
  snapshot: string;
2399
+ /**
2400
+ * Format: int64
2401
+ * @description Local GGUF file size in bytes (present when the file is resolvable on disk)
2402
+ */
2403
+ size?: number | null;
2213
2404
  metadata?: null | components["schemas"]["ModelMetadata"];
2214
2405
  };
2215
2406
  ModelArchitecture: {
@@ -2225,6 +2416,20 @@ export interface components {
2225
2416
  thinking?: boolean | null;
2226
2417
  tools: components["schemas"]["ToolCapabilities"];
2227
2418
  };
2419
+ /** @description Model inference grant. `All` is a wildcard that includes models added in the
2420
+ * future; `Specific` lists alias ids (empty ⇒ no model access).
2421
+ *
2422
+ * Defaults to **least-privilege** (empty `Specific` ⇒ deny): an unspecified or
2423
+ * legacy grant grants nothing. All-access must be requested explicitly via
2424
+ * `ModelGrant::All`. Symmetric with `ApprovedResourcesV1`'s empty-MCP default. */
2425
+ ModelGrant: {
2426
+ /** @enum {string} */
2427
+ type: "all";
2428
+ } | {
2429
+ ids: string[];
2430
+ /** @enum {string} */
2431
+ type: "specific";
2432
+ };
2228
2433
  /** @description Model metadata for API responses */
2229
2434
  ModelMetadata: {
2230
2435
  capabilities: components["schemas"]["ModelCapabilities"];
@@ -2232,6 +2437,39 @@ export interface components {
2232
2437
  architecture: components["schemas"]["ModelArchitecture"];
2233
2438
  chat_template?: string | null;
2234
2439
  };
2440
+ /** @description A composite alias that fronts an ordered list of targets and routes a chat
2441
+ * request through them via a pluggable strategy. v1 ships only the fallback strategy. */
2442
+ ModelRouterAlias: {
2443
+ id: string;
2444
+ /** @description User-facing model name, unique across all alias kinds. */
2445
+ alias: string;
2446
+ /** @description Ordered list of targets; order is the fallback priority. */
2447
+ targets: components["schemas"]["RouterTarget"][];
2448
+ strategy: components["schemas"]["RoutingStrategyConfig"];
2449
+ /** Format: date-time */
2450
+ created_at: string;
2451
+ /** Format: date-time */
2452
+ updated_at: string;
2453
+ };
2454
+ /** @description Input request for creating or updating a model-router. Used as `ValidatedJson` in handlers
2455
+ * for both create and update (PUT). A zero-target or all-disabled router is allowed to save. */
2456
+ ModelRouterRequest: {
2457
+ alias: string;
2458
+ targets?: components["schemas"]["RouterTargetRequest"][];
2459
+ strategy?: components["schemas"]["RoutingStrategyConfig"];
2460
+ };
2461
+ /** @description API response for model-router aliases. */
2462
+ ModelRouterResponse: {
2463
+ source: string;
2464
+ id: string;
2465
+ alias: string;
2466
+ targets: components["schemas"]["RouterTarget"][];
2467
+ strategy: components["schemas"]["RoutingStrategyConfig"];
2468
+ /** Format: date-time */
2469
+ created_at: string;
2470
+ /** Format: date-time */
2471
+ updated_at: string;
2472
+ };
2235
2473
  /**
2236
2474
  * @description Request for creating a new download request
2237
2475
  * @example {
@@ -2266,6 +2504,7 @@ export interface components {
2266
2504
  /** Format: float */
2267
2505
  top_p?: number | null;
2268
2506
  user?: string | null;
2507
+ system_prompt?: string | null;
2269
2508
  };
2270
2509
  OAuthDiscoverAsRequest: {
2271
2510
  url: string;
@@ -2324,7 +2563,6 @@ export interface components {
2324
2563
  page: number;
2325
2564
  page_size: number;
2326
2565
  };
2327
- /** @description Paginated list of local model files */
2328
2566
  PaginatedLocalModelResponse: {
2329
2567
  data: components["schemas"]["LocalModelResponse"][];
2330
2568
  total: number;
@@ -2408,7 +2646,6 @@ export interface components {
2408
2646
  */
2409
2647
  message: string;
2410
2648
  };
2411
- /** @description Response for queue status operations */
2412
2649
  QueueStatusResponse: {
2413
2650
  /** @description Queue status ("idle" or "processing") */
2414
2651
  status: string;
@@ -2466,17 +2703,82 @@ export interface components {
2466
2703
  RequestedMcpServer: {
2467
2704
  url: string;
2468
2705
  };
2469
- /** @description Versioned envelope for requested resources.
2470
- * The `version` tag is mandatory — clients must specify which version they are using. */
2706
+ /** @description The `version` tag is mandatory — clients must specify which version they are using. */
2471
2707
  RequestedResources: components["schemas"]["RequestedResourcesV1"] & {
2472
2708
  /** @enum {string} */
2473
2709
  version: "1";
2474
2710
  };
2711
+ /** @description What the external app asks for. The four booleans are **UI drivers**: they tell
2712
+ * the consent screen which controls to render (the owner decides the actual grant).
2713
+ * Fields are domain-first (`models_*` / `mcps_*`), matching `ApprovedResourcesV1`.
2714
+ * `mcp_servers` is the existing by-url MCP request and is unchanged.
2715
+ *
2716
+ * `models_access` defaults to **true**: unless the app explicitly opts out
2717
+ * (`models_access: false`), the consent screen shows the model-access selector so
2718
+ * the owner can always scope models. (The other UI-driver flags default to false.) */
2475
2719
  RequestedResourcesV1: {
2720
+ /** @description Render the "list all models" toggle. */
2721
+ models_list?: boolean;
2722
+ /** @description Render the model All/Specific access selector. Defaults to `true` (shown). */
2723
+ models_access?: boolean;
2724
+ /** @description Render the "list all MCPs" toggle. */
2725
+ mcps_list?: boolean;
2726
+ /** @description Render the owner-extra MCP All/Specific access selector. */
2727
+ mcps_access?: boolean;
2476
2728
  mcp_servers?: components["schemas"]["RequestedMcpServer"][];
2477
2729
  };
2730
+ /** @description Effective access to a class of resources (models or MCPs) for an API token,
2731
+ * reflected from its grants. Discriminated on `type`: `all` ⇒ every current and
2732
+ * future resource; `specific` ⇒ the listed `ids` (empty ⇒ no access).
2733
+ * `list` is the `list_*` toggle (whether the token may enumerate the full catalog). */
2734
+ ResourceAccess: {
2735
+ list: boolean;
2736
+ /** @enum {string} */
2737
+ type: "all";
2738
+ } | {
2739
+ list: boolean;
2740
+ ids: string[];
2741
+ /** @enum {string} */
2742
+ type: "specific";
2743
+ };
2744
+ /** @description Effective resource access for a token-bearing principal (API token or external
2745
+ * app), reflected from its grants. Reported uniformly via the `access` envelope
2746
+ * field for both principals. */
2747
+ ResourceAccessInfo: {
2748
+ /** @description Effective model access for this principal. */
2749
+ models: components["schemas"]["ResourceAccess"];
2750
+ /** @description Effective MCP access for this principal. */
2751
+ mcps: components["schemas"]["ResourceAccess"];
2752
+ };
2478
2753
  /** @enum {string} */
2479
2754
  ResourceRole: "resource_anonymous" | "resource_guest" | "resource_user" | "resource_power_user" | "resource_manager" | "resource_admin";
2755
+ /** @description One target in a model-router: a reference to an existing alias plus a pinned model. */
2756
+ RouterTarget: {
2757
+ /** @description Name of an existing user/model/api alias (NOT a model-router). */
2758
+ alias: string;
2759
+ /** @description Concrete model placed into `request["model"]` when forwarding to this target. */
2760
+ model: string;
2761
+ /** @description Whether this target is part of the active sequence. Disabled targets are never
2762
+ * attempted but keep their config and position. Defaults to enabled. */
2763
+ enabled?: boolean;
2764
+ /**
2765
+ * Format: int32
2766
+ * @description SEAM (reserved): ignored by Fallback; used by a future weighted strategy.
2767
+ */
2768
+ weight?: number | null;
2769
+ };
2770
+ RouterTargetRequest: {
2771
+ alias: string;
2772
+ model: string;
2773
+ enabled?: boolean;
2774
+ /** Format: int32 */
2775
+ weight?: number | null;
2776
+ };
2777
+ /** @description Routing strategy config — DATA (persisted, wire-exposed). Adding a strategy = adding a variant. */
2778
+ RoutingStrategyConfig: components["schemas"]["FallbackConfig"] & {
2779
+ /** @enum {string} */
2780
+ strategy: "fallback";
2781
+ };
2480
2782
  SettingInfo: {
2481
2783
  key: string;
2482
2784
  current_value: unknown;
@@ -2601,12 +2903,10 @@ export interface components {
2601
2903
  response?: string | null;
2602
2904
  error?: string | null;
2603
2905
  };
2604
- /** @description Thinking capability and supported type configurations. */
2605
2906
  ThinkingCapability: {
2606
2907
  supported: boolean;
2607
2908
  types: components["schemas"]["ThinkingTypes"];
2608
2909
  };
2609
- /** @description Supported thinking type configurations. */
2610
2910
  ThinkingTypes: {
2611
2911
  adaptive: components["schemas"]["CapabilitySupport"];
2612
2912
  enabled: components["schemas"]["CapabilitySupport"];
@@ -2628,12 +2928,35 @@ export interface components {
2628
2928
  token_prefix: string;
2629
2929
  scopes: string;
2630
2930
  status: components["schemas"]["TokenStatus"];
2931
+ /** @description Per-resource grants this token carries. */
2932
+ grants: components["schemas"]["TokenGrants"];
2933
+ /** Format: date-time */
2934
+ last_used_at?: string | null;
2631
2935
  /** Format: date-time */
2632
2936
  created_at: string;
2633
2937
  /** Format: date-time */
2634
2938
  updated_at: string;
2635
2939
  };
2636
- /** @description API Token information response */
2940
+ /** @description Versioned envelope; the `version` tag is mandatory (mirrors `ApprovedResources`). */
2941
+ TokenGrants: components["schemas"]["TokenGrantsV1"] & {
2942
+ /** @enum {string} */
2943
+ version: "1";
2944
+ };
2945
+ /** @description Per-resource grants carried by an API token. Listing (`models_list` /
2946
+ * `mcps_list`) is separate from inference/connect: with listing off the
2947
+ * discovery endpoints return an empty set, but inference on an individually
2948
+ * granted resource still succeeds.
2949
+ *
2950
+ * Intentionally standalone — NOT shared with the App-access-request envelope
2951
+ * (`ApprovedResources`); the two may diverge. */
2952
+ TokenGrantsV1: {
2953
+ models_list?: boolean;
2954
+ models?: components["schemas"]["ModelGrant"];
2955
+ mcps_list?: boolean;
2956
+ mcps?: components["schemas"]["McpGrant"];
2957
+ };
2958
+ /** @description API Token information response. Effective model/MCP access is reported uniformly
2959
+ * via the envelope's `access` field (same shape as external apps), not inline here. */
2637
2960
  TokenInfo: {
2638
2961
  role: components["schemas"]["TokenScope"];
2639
2962
  };
@@ -2645,14 +2968,11 @@ export interface components {
2645
2968
  function_calling?: boolean | null;
2646
2969
  structured_output?: boolean | null;
2647
2970
  };
2648
- /**
2649
- * @description Request to update a setting value
2650
- * @example {
2971
+ /** @example {
2651
2972
  * "value": "debug"
2652
- * }
2653
- */
2973
+ * } */
2654
2974
  UpdateSettingRequest: {
2655
- /** @description New value for the setting (type depends on setting metadata) */
2975
+ /** @description type depends on setting metadata */
2656
2976
  value: unknown;
2657
2977
  };
2658
2978
  /** @example {
@@ -2765,6 +3085,11 @@ export interface components {
2765
3085
  created_at: string;
2766
3086
  /** Format: date-time */
2767
3087
  updated_at: string;
3088
+ /**
3089
+ * Format: int64
3090
+ * @description Local GGUF file size in bytes (present when the file is resolvable on disk)
3091
+ */
3092
+ size?: number | null;
2768
3093
  metadata?: null | components["schemas"]["ModelMetadata"];
2769
3094
  };
2770
3095
  UserInfo: {
@@ -2777,10 +3102,14 @@ export interface components {
2777
3102
  /** @example Doe */
2778
3103
  last_name?: string | null;
2779
3104
  role?: null | components["schemas"]["AppRole"];
3105
+ /** @description OIDC id_token for the active session, when present. Used by the frontend to
3106
+ * authenticate direct calls to the external reference API. Omitted for token/exchange auth. */
3107
+ id_token?: string | null;
2780
3108
  };
2781
3109
  /** @description Envelope wrapping UserResponse with additional session info */
2782
3110
  UserInfoEnvelope: components["schemas"]["UserResponse"] & {
2783
3111
  dashboard?: null | components["schemas"]["DashboardUser"];
3112
+ access?: null | components["schemas"]["ResourceAccessInfo"];
2784
3113
  };
2785
3114
  UserListResponse: {
2786
3115
  /** @example resource-abc123def456 */
@@ -2906,31 +3235,22 @@ export interface operations {
2906
3235
  };
2907
3236
  };
2908
3237
  };
2909
- listPendingAccessRequests: {
3238
+ listAppAccess: {
2910
3239
  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
- };
3240
+ query?: never;
2921
3241
  header?: never;
2922
3242
  path?: never;
2923
3243
  cookie?: never;
2924
3244
  };
2925
3245
  requestBody?: never;
2926
3246
  responses: {
2927
- /** @description Pending requests retrieved */
3247
+ /** @description Issued app tokens */
2928
3248
  200: {
2929
3249
  headers: {
2930
3250
  [name: string]: unknown;
2931
3251
  };
2932
3252
  content: {
2933
- "application/json": components["schemas"]["PaginatedUserAccessResponse"];
3253
+ "application/json": components["schemas"]["ListAppAccessResponse"];
2934
3254
  };
2935
3255
  };
2936
3256
  /** @description Invalid request parameters */
@@ -2971,21 +3291,86 @@ export interface operations {
2971
3291
  };
2972
3292
  };
2973
3293
  };
2974
- approveAppsAccessRequest: {
3294
+ listPendingAccessRequests: {
2975
3295
  parameters: {
2976
- query?: never;
2977
- header?: never;
2978
- path: {
2979
- /** @description Access request ID */
2980
- id: string;
3296
+ query?: {
3297
+ /** @description Page number (1-based indexing) */
3298
+ page?: number;
3299
+ /** @description Number of items to return per page (maximum 100) */
3300
+ page_size?: number;
3301
+ /** @description Field to sort by. Common values: repo, filename, size, updated_at, snapshot, created_at */
3302
+ sort?: string;
3303
+ /** @description Sort order: 'asc' for ascending, 'desc' for descending */
3304
+ sort_order?: string;
2981
3305
  };
3306
+ header?: never;
3307
+ path?: never;
2982
3308
  cookie?: never;
2983
3309
  };
2984
- /** @description Approval details with tool selections */
2985
- requestBody: {
2986
- content: {
2987
- "application/json": components["schemas"]["ApproveAccessRequest"];
2988
- };
3310
+ requestBody?: never;
3311
+ responses: {
3312
+ /** @description Pending requests retrieved */
3313
+ 200: {
3314
+ headers: {
3315
+ [name: string]: unknown;
3316
+ };
3317
+ content: {
3318
+ "application/json": components["schemas"]["PaginatedUserAccessResponse"];
3319
+ };
3320
+ };
3321
+ /** @description Invalid request parameters */
3322
+ 400: {
3323
+ headers: {
3324
+ [name: string]: unknown;
3325
+ };
3326
+ content: {
3327
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3328
+ };
3329
+ };
3330
+ /** @description Not authenticated */
3331
+ 401: {
3332
+ headers: {
3333
+ [name: string]: unknown;
3334
+ };
3335
+ content: {
3336
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3337
+ };
3338
+ };
3339
+ /** @description Insufficient permissions */
3340
+ 403: {
3341
+ headers: {
3342
+ [name: string]: unknown;
3343
+ };
3344
+ content: {
3345
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3346
+ };
3347
+ };
3348
+ /** @description Internal server error */
3349
+ 500: {
3350
+ headers: {
3351
+ [name: string]: unknown;
3352
+ };
3353
+ content: {
3354
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3355
+ };
3356
+ };
3357
+ };
3358
+ };
3359
+ approveAppsAccessRequest: {
3360
+ parameters: {
3361
+ query?: never;
3362
+ header?: never;
3363
+ path: {
3364
+ /** @description Access request ID */
3365
+ id: string;
3366
+ };
3367
+ cookie?: never;
3368
+ };
3369
+ /** @description Approval details with tool selections */
3370
+ requestBody: {
3371
+ content: {
3372
+ "application/json": components["schemas"]["ApproveAccessRequest"];
3373
+ };
2989
3374
  };
2990
3375
  responses: {
2991
3376
  /** @description Request approved */
@@ -3344,6 +3729,83 @@ export interface operations {
3344
3729
  };
3345
3730
  };
3346
3731
  };
3732
+ revokeAppAccess: {
3733
+ parameters: {
3734
+ query?: never;
3735
+ header?: never;
3736
+ path: {
3737
+ /** @description Access request ID */
3738
+ id: string;
3739
+ };
3740
+ cookie?: never;
3741
+ };
3742
+ requestBody?: never;
3743
+ responses: {
3744
+ /** @description Grant revoked */
3745
+ 200: {
3746
+ headers: {
3747
+ [name: string]: unknown;
3748
+ };
3749
+ content: {
3750
+ "application/json": components["schemas"]["AppAccessSummary"];
3751
+ };
3752
+ };
3753
+ /** @description Invalid request parameters */
3754
+ 400: {
3755
+ headers: {
3756
+ [name: string]: unknown;
3757
+ };
3758
+ content: {
3759
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3760
+ };
3761
+ };
3762
+ /** @description Not authenticated */
3763
+ 401: {
3764
+ headers: {
3765
+ [name: string]: unknown;
3766
+ };
3767
+ content: {
3768
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3769
+ };
3770
+ };
3771
+ /** @description Insufficient permissions */
3772
+ 403: {
3773
+ headers: {
3774
+ [name: string]: unknown;
3775
+ };
3776
+ content: {
3777
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3778
+ };
3779
+ };
3780
+ /** @description Not found */
3781
+ 404: {
3782
+ headers: {
3783
+ [name: string]: unknown;
3784
+ };
3785
+ content: {
3786
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3787
+ };
3788
+ };
3789
+ /** @description Not in a revocable state */
3790
+ 409: {
3791
+ headers: {
3792
+ [name: string]: unknown;
3793
+ };
3794
+ content: {
3795
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3796
+ };
3797
+ };
3798
+ /** @description Internal server error */
3799
+ 500: {
3800
+ headers: {
3801
+ [name: string]: unknown;
3802
+ };
3803
+ content: {
3804
+ "application/json": components["schemas"]["BodhiErrorResponse"];
3805
+ };
3806
+ };
3807
+ };
3808
+ };
3347
3809
  getAccessRequestStatus: {
3348
3810
  parameters: {
3349
3811
  query: {
@@ -5353,6 +5815,22 @@ export interface operations {
5353
5815
  sort?: string;
5354
5816
  /** @description Sort order: 'asc' for ascending, 'desc' for descending */
5355
5817
  sort_order?: string;
5818
+ /** @description Alias type facet (comma-separated): `local_file`, `model_alias`, `api_model`, `fallback`. */
5819
+ type?: string;
5820
+ /** @description API-format facet (comma-separated), API rows only: `openai`, `responses`, `anthropic`,
5821
+ * `gemini`, `liberty`. `anthropic` matches both anthropic and anthropic_oauth aliases. */
5822
+ api_format?: string;
5823
+ /** @description Minimum local-file size in bytes (inclusive). Applies to local rows with a known size;
5824
+ * rows without a size (API/router) are not filtered out by size. */
5825
+ size_min?: number;
5826
+ /** @description Maximum local-file size in bytes (inclusive). See `size_min`. */
5827
+ size_max?: number;
5828
+ /** @description Capability facet (comma-separated), local rows only: `vision`, `tool_use`, `reasoning`.
5829
+ * A row passes only if it has metadata with every requested capability set true. */
5830
+ capability?: string;
5831
+ /** @description Free-text search (case-insensitive substring) over a row's identifying fields — alias/name,
5832
+ * repo, filename for local rows; id, name, base_url for API rows; alias for routers. */
5833
+ search?: string;
5356
5834
  };
5357
5835
  header?: never;
5358
5836
  path?: never;
@@ -6607,39 +7085,25 @@ export interface operations {
6607
7085
  };
6608
7086
  };
6609
7087
  };
6610
- refreshModelMetadata: {
7088
+ archiveDownload: {
6611
7089
  parameters: {
6612
7090
  query?: never;
6613
7091
  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"];
7092
+ path: {
7093
+ /** @description Unique identifier of the download request */
7094
+ id: string;
6621
7095
  };
7096
+ cookie?: never;
6622
7097
  };
7098
+ requestBody?: never;
6623
7099
  responses: {
6624
- /** @description Metadata refreshed successfully (sync mode) */
7100
+ /** @description Download request archived */
6625
7101
  200: {
6626
7102
  headers: {
6627
7103
  [name: string]: unknown;
6628
7104
  };
6629
7105
  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"];
7106
+ "application/json": components["schemas"]["DownloadRequest"];
6643
7107
  };
6644
7108
  };
6645
7109
  /** @description Invalid request parameters */
@@ -6669,12 +7133,14 @@ export interface operations {
6669
7133
  "application/json": components["schemas"]["BodhiErrorResponse"];
6670
7134
  };
6671
7135
  };
6672
- /** @description Model alias not found for specified repo/filename/snapshot */
7136
+ /** @description Download request not found */
6673
7137
  404: {
6674
7138
  headers: {
6675
7139
  [name: string]: unknown;
6676
7140
  };
6677
- content?: never;
7141
+ content: {
7142
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7143
+ };
6678
7144
  };
6679
7145
  /** @description Internal server error */
6680
7146
  500: {
@@ -6687,25 +7153,25 @@ export interface operations {
6687
7153
  };
6688
7154
  };
6689
7155
  };
6690
- getAlias: {
7156
+ retryDownload: {
6691
7157
  parameters: {
6692
7158
  query?: never;
6693
7159
  header?: never;
6694
7160
  path: {
6695
- /** @description UUID of the alias */
7161
+ /** @description Unique identifier of the download request */
6696
7162
  id: string;
6697
7163
  };
6698
7164
  cookie?: never;
6699
7165
  };
6700
7166
  requestBody?: never;
6701
7167
  responses: {
6702
- /** @description Model alias details */
7168
+ /** @description Download request reset and re-started */
6703
7169
  200: {
6704
7170
  headers: {
6705
7171
  [name: string]: unknown;
6706
7172
  };
6707
7173
  content: {
6708
- "application/json": components["schemas"]["UserAliasResponse"];
7174
+ "application/json": components["schemas"]["DownloadRequest"];
6709
7175
  };
6710
7176
  };
6711
7177
  /** @description Invalid request parameters */
@@ -6735,19 +7201,12 @@ export interface operations {
6735
7201
  "application/json": components["schemas"]["BodhiErrorResponse"];
6736
7202
  };
6737
7203
  };
6738
- /** @description Alias not found */
7204
+ /** @description Download request not found */
6739
7205
  404: {
6740
7206
  headers: {
6741
7207
  [name: string]: unknown;
6742
7208
  };
6743
7209
  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
7210
  "application/json": components["schemas"]["BodhiErrorResponse"];
6752
7211
  };
6753
7212
  };
@@ -6762,25 +7221,39 @@ export interface operations {
6762
7221
  };
6763
7222
  };
6764
7223
  };
6765
- getQueueStatus: {
7224
+ refreshModelMetadata: {
6766
7225
  parameters: {
6767
7226
  query?: never;
6768
7227
  header?: never;
6769
7228
  path?: never;
6770
7229
  cookie?: never;
6771
7230
  };
6772
- requestBody?: never;
7231
+ /** @description Refresh request - either bulk (source='all') or single model (source='model' with identifiers) */
7232
+ requestBody: {
7233
+ content: {
7234
+ "application/json": components["schemas"]["RefreshRequest"];
7235
+ };
7236
+ };
6773
7237
  responses: {
6774
- /** @description Queue status retrieved successfully */
7238
+ /** @description Metadata refreshed successfully (sync mode) */
6775
7239
  200: {
7240
+ headers: {
7241
+ [name: string]: unknown;
7242
+ };
7243
+ content: {
7244
+ "application/json": components["schemas"]["ModelAliasResponse"];
7245
+ };
7246
+ };
7247
+ /** @description Metadata refresh queued in background (bulk mode) */
7248
+ 202: {
6776
7249
  headers: {
6777
7250
  [name: string]: unknown;
6778
7251
  };
6779
7252
  content: {
6780
7253
  /** @example {
6781
- * "status": "idle"
7254
+ * "num_queued": "all"
6782
7255
  * } */
6783
- "application/json": components["schemas"]["QueueStatusResponse"];
7256
+ "application/json": components["schemas"]["RefreshResponse"];
6784
7257
  };
6785
7258
  };
6786
7259
  /** @description Invalid request parameters */
@@ -6810,6 +7283,13 @@ export interface operations {
6810
7283
  "application/json": components["schemas"]["BodhiErrorResponse"];
6811
7284
  };
6812
7285
  };
7286
+ /** @description Model alias not found for specified repo/filename/snapshot */
7287
+ 404: {
7288
+ headers: {
7289
+ [name: string]: unknown;
7290
+ };
7291
+ content?: never;
7292
+ };
6813
7293
  /** @description Internal server error */
6814
7294
  500: {
6815
7295
  headers: {
@@ -6821,51 +7301,26 @@ export interface operations {
6821
7301
  };
6822
7302
  };
6823
7303
  };
6824
- listSettings: {
7304
+ createModelRouter: {
6825
7305
  parameters: {
6826
7306
  query?: never;
6827
7307
  header?: never;
6828
7308
  path?: never;
6829
7309
  cookie?: never;
6830
7310
  };
6831
- requestBody?: never;
7311
+ requestBody: {
7312
+ content: {
7313
+ "application/json": components["schemas"]["ModelRouterRequest"];
7314
+ };
7315
+ };
6832
7316
  responses: {
6833
- /** @description Application settings retrieved successfully */
6834
- 200: {
7317
+ /** @description Model-router created */
7318
+ 201: {
6835
7319
  headers: {
6836
7320
  [name: string]: unknown;
6837
7321
  };
6838
7322
  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"][];
7323
+ "application/json": components["schemas"]["ModelRouterResponse"];
6869
7324
  };
6870
7325
  };
6871
7326
  /** @description Invalid request parameters */
@@ -6906,12 +7361,437 @@ export interface operations {
6906
7361
  };
6907
7362
  };
6908
7363
  };
6909
- updateSetting: {
7364
+ getModelRouter: {
6910
7365
  parameters: {
6911
7366
  query?: never;
6912
7367
  header?: never;
6913
7368
  path: {
6914
- /**
7369
+ /** @description Unique identifier for the model-router alias */
7370
+ id: string;
7371
+ };
7372
+ cookie?: never;
7373
+ };
7374
+ requestBody?: never;
7375
+ responses: {
7376
+ /** @description Model-router configuration retrieved */
7377
+ 200: {
7378
+ headers: {
7379
+ [name: string]: unknown;
7380
+ };
7381
+ content: {
7382
+ "application/json": components["schemas"]["ModelRouterResponse"];
7383
+ };
7384
+ };
7385
+ /** @description Invalid request parameters */
7386
+ 400: {
7387
+ headers: {
7388
+ [name: string]: unknown;
7389
+ };
7390
+ content: {
7391
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7392
+ };
7393
+ };
7394
+ /** @description Not authenticated */
7395
+ 401: {
7396
+ headers: {
7397
+ [name: string]: unknown;
7398
+ };
7399
+ content: {
7400
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7401
+ };
7402
+ };
7403
+ /** @description Insufficient permissions */
7404
+ 403: {
7405
+ headers: {
7406
+ [name: string]: unknown;
7407
+ };
7408
+ content: {
7409
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7410
+ };
7411
+ };
7412
+ /** @description Model-router with specified ID not found */
7413
+ 404: {
7414
+ headers: {
7415
+ [name: string]: unknown;
7416
+ };
7417
+ content: {
7418
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7419
+ };
7420
+ };
7421
+ /** @description Internal server error */
7422
+ 500: {
7423
+ headers: {
7424
+ [name: string]: unknown;
7425
+ };
7426
+ content: {
7427
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7428
+ };
7429
+ };
7430
+ };
7431
+ };
7432
+ updateModelRouter: {
7433
+ parameters: {
7434
+ query?: never;
7435
+ header?: never;
7436
+ path: {
7437
+ /** @description Model-router ID */
7438
+ id: string;
7439
+ };
7440
+ cookie?: never;
7441
+ };
7442
+ requestBody: {
7443
+ content: {
7444
+ "application/json": components["schemas"]["ModelRouterRequest"];
7445
+ };
7446
+ };
7447
+ responses: {
7448
+ /** @description Model-router updated */
7449
+ 200: {
7450
+ headers: {
7451
+ [name: string]: unknown;
7452
+ };
7453
+ content: {
7454
+ "application/json": components["schemas"]["ModelRouterResponse"];
7455
+ };
7456
+ };
7457
+ /** @description Invalid request parameters */
7458
+ 400: {
7459
+ headers: {
7460
+ [name: string]: unknown;
7461
+ };
7462
+ content: {
7463
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7464
+ };
7465
+ };
7466
+ /** @description Not authenticated */
7467
+ 401: {
7468
+ headers: {
7469
+ [name: string]: unknown;
7470
+ };
7471
+ content: {
7472
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7473
+ };
7474
+ };
7475
+ /** @description Insufficient permissions */
7476
+ 403: {
7477
+ headers: {
7478
+ [name: string]: unknown;
7479
+ };
7480
+ content: {
7481
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7482
+ };
7483
+ };
7484
+ /** @description Model-router not found */
7485
+ 404: {
7486
+ headers: {
7487
+ [name: string]: unknown;
7488
+ };
7489
+ content: {
7490
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7491
+ };
7492
+ };
7493
+ /** @description Internal server error */
7494
+ 500: {
7495
+ headers: {
7496
+ [name: string]: unknown;
7497
+ };
7498
+ content: {
7499
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7500
+ };
7501
+ };
7502
+ };
7503
+ };
7504
+ deleteModelRouter: {
7505
+ parameters: {
7506
+ query?: never;
7507
+ header?: never;
7508
+ path: {
7509
+ /** @description Model-router ID */
7510
+ id: string;
7511
+ };
7512
+ cookie?: never;
7513
+ };
7514
+ requestBody?: never;
7515
+ responses: {
7516
+ /** @description Model-router deleted */
7517
+ 204: {
7518
+ headers: {
7519
+ [name: string]: unknown;
7520
+ };
7521
+ content?: never;
7522
+ };
7523
+ /** @description Invalid request parameters */
7524
+ 400: {
7525
+ headers: {
7526
+ [name: string]: unknown;
7527
+ };
7528
+ content: {
7529
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7530
+ };
7531
+ };
7532
+ /** @description Not authenticated */
7533
+ 401: {
7534
+ headers: {
7535
+ [name: string]: unknown;
7536
+ };
7537
+ content: {
7538
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7539
+ };
7540
+ };
7541
+ /** @description Insufficient permissions */
7542
+ 403: {
7543
+ headers: {
7544
+ [name: string]: unknown;
7545
+ };
7546
+ content: {
7547
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7548
+ };
7549
+ };
7550
+ /** @description Model-router not found */
7551
+ 404: {
7552
+ headers: {
7553
+ [name: string]: unknown;
7554
+ };
7555
+ content: {
7556
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7557
+ };
7558
+ };
7559
+ /** @description Internal server error */
7560
+ 500: {
7561
+ headers: {
7562
+ [name: string]: unknown;
7563
+ };
7564
+ content: {
7565
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7566
+ };
7567
+ };
7568
+ };
7569
+ };
7570
+ getAlias: {
7571
+ parameters: {
7572
+ query?: never;
7573
+ header?: never;
7574
+ path: {
7575
+ /** @description UUID of the alias */
7576
+ id: string;
7577
+ };
7578
+ cookie?: never;
7579
+ };
7580
+ requestBody?: never;
7581
+ responses: {
7582
+ /** @description Model alias details */
7583
+ 200: {
7584
+ headers: {
7585
+ [name: string]: unknown;
7586
+ };
7587
+ content: {
7588
+ "application/json": components["schemas"]["UserAliasResponse"];
7589
+ };
7590
+ };
7591
+ /** @description Invalid request parameters */
7592
+ 400: {
7593
+ headers: {
7594
+ [name: string]: unknown;
7595
+ };
7596
+ content: {
7597
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7598
+ };
7599
+ };
7600
+ /** @description Not authenticated */
7601
+ 401: {
7602
+ headers: {
7603
+ [name: string]: unknown;
7604
+ };
7605
+ content: {
7606
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7607
+ };
7608
+ };
7609
+ /** @description Insufficient permissions */
7610
+ 403: {
7611
+ headers: {
7612
+ [name: string]: unknown;
7613
+ };
7614
+ content: {
7615
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7616
+ };
7617
+ };
7618
+ /** @description Alias not found */
7619
+ 404: {
7620
+ headers: {
7621
+ [name: string]: unknown;
7622
+ };
7623
+ content: {
7624
+ /** @example {
7625
+ * "error": {
7626
+ * "code": "alias_not_found",
7627
+ * "message": "Alias 'unknown:model' not found",
7628
+ * "type": "not_found_error"
7629
+ * }
7630
+ * } */
7631
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7632
+ };
7633
+ };
7634
+ /** @description Internal server error */
7635
+ 500: {
7636
+ headers: {
7637
+ [name: string]: unknown;
7638
+ };
7639
+ content: {
7640
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7641
+ };
7642
+ };
7643
+ };
7644
+ };
7645
+ getQueueStatus: {
7646
+ parameters: {
7647
+ query?: never;
7648
+ header?: never;
7649
+ path?: never;
7650
+ cookie?: never;
7651
+ };
7652
+ requestBody?: never;
7653
+ responses: {
7654
+ /** @description Queue status retrieved successfully */
7655
+ 200: {
7656
+ headers: {
7657
+ [name: string]: unknown;
7658
+ };
7659
+ content: {
7660
+ /** @example {
7661
+ * "status": "idle"
7662
+ * } */
7663
+ "application/json": components["schemas"]["QueueStatusResponse"];
7664
+ };
7665
+ };
7666
+ /** @description Invalid request parameters */
7667
+ 400: {
7668
+ headers: {
7669
+ [name: string]: unknown;
7670
+ };
7671
+ content: {
7672
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7673
+ };
7674
+ };
7675
+ /** @description Not authenticated */
7676
+ 401: {
7677
+ headers: {
7678
+ [name: string]: unknown;
7679
+ };
7680
+ content: {
7681
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7682
+ };
7683
+ };
7684
+ /** @description Insufficient permissions */
7685
+ 403: {
7686
+ headers: {
7687
+ [name: string]: unknown;
7688
+ };
7689
+ content: {
7690
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7691
+ };
7692
+ };
7693
+ /** @description Internal server error */
7694
+ 500: {
7695
+ headers: {
7696
+ [name: string]: unknown;
7697
+ };
7698
+ content: {
7699
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7700
+ };
7701
+ };
7702
+ };
7703
+ };
7704
+ listSettings: {
7705
+ parameters: {
7706
+ query?: never;
7707
+ header?: never;
7708
+ path?: never;
7709
+ cookie?: never;
7710
+ };
7711
+ requestBody?: never;
7712
+ responses: {
7713
+ /** @description Application settings retrieved successfully */
7714
+ 200: {
7715
+ headers: {
7716
+ [name: string]: unknown;
7717
+ };
7718
+ content: {
7719
+ /** @example [
7720
+ * {
7721
+ * "current_value": "info",
7722
+ * "default_value": "warn",
7723
+ * "key": "BODHI_LOG_LEVEL",
7724
+ * "metadata": {
7725
+ * "options": [
7726
+ * "error",
7727
+ * "warn",
7728
+ * "info",
7729
+ * "debug",
7730
+ * "trace"
7731
+ * ],
7732
+ * "type": "option"
7733
+ * },
7734
+ * "source": "environment"
7735
+ * },
7736
+ * {
7737
+ * "current_value": 1135,
7738
+ * "default_value": 1135,
7739
+ * "key": "BODHI_PORT",
7740
+ * "metadata": {
7741
+ * "max": 65535,
7742
+ * "min": 1025,
7743
+ * "type": "number"
7744
+ * },
7745
+ * "source": "default"
7746
+ * }
7747
+ * ] */
7748
+ "application/json": components["schemas"]["SettingInfo"][];
7749
+ };
7750
+ };
7751
+ /** @description Invalid request parameters */
7752
+ 400: {
7753
+ headers: {
7754
+ [name: string]: unknown;
7755
+ };
7756
+ content: {
7757
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7758
+ };
7759
+ };
7760
+ /** @description Not authenticated */
7761
+ 401: {
7762
+ headers: {
7763
+ [name: string]: unknown;
7764
+ };
7765
+ content: {
7766
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7767
+ };
7768
+ };
7769
+ /** @description Insufficient permissions */
7770
+ 403: {
7771
+ headers: {
7772
+ [name: string]: unknown;
7773
+ };
7774
+ content: {
7775
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7776
+ };
7777
+ };
7778
+ /** @description Internal server error */
7779
+ 500: {
7780
+ headers: {
7781
+ [name: string]: unknown;
7782
+ };
7783
+ content: {
7784
+ "application/json": components["schemas"]["BodhiErrorResponse"];
7785
+ };
7786
+ };
7787
+ };
7788
+ };
7789
+ updateSetting: {
7790
+ parameters: {
7791
+ query?: never;
7792
+ header?: never;
7793
+ path: {
7794
+ /**
6915
7795
  * @description Setting key identifier (e.g., BODHI_LOG_LEVEL, BODHI_PORT)
6916
7796
  * @example BODHI_LOG_LEVEL
6917
7797
  */
@@ -6926,7 +7806,7 @@ export interface operations {
6926
7806
  * "value": "debug"
6927
7807
  * } */
6928
7808
  "application/json": {
6929
- /** @description New value for the setting (type depends on setting metadata) */
7809
+ /** @description type depends on setting metadata */
6930
7810
  value: unknown;
6931
7811
  };
6932
7812
  };
@@ -7585,6 +8465,75 @@ export interface operations {
7585
8465
  };
7586
8466
  };
7587
8467
  };
8468
+ deleteApiToken: {
8469
+ parameters: {
8470
+ query?: never;
8471
+ header?: never;
8472
+ path: {
8473
+ /**
8474
+ * @description Unique identifier of the API token to delete
8475
+ * @example 550e8400-e29b-41d4-a716-446655440000
8476
+ */
8477
+ id: string;
8478
+ };
8479
+ cookie?: never;
8480
+ };
8481
+ requestBody?: never;
8482
+ responses: {
8483
+ /** @description Token deleted successfully */
8484
+ 204: {
8485
+ headers: {
8486
+ [name: string]: unknown;
8487
+ };
8488
+ content?: never;
8489
+ };
8490
+ /** @description Invalid request parameters */
8491
+ 400: {
8492
+ headers: {
8493
+ [name: string]: unknown;
8494
+ };
8495
+ content: {
8496
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8497
+ };
8498
+ };
8499
+ /** @description Not authenticated */
8500
+ 401: {
8501
+ headers: {
8502
+ [name: string]: unknown;
8503
+ };
8504
+ content: {
8505
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8506
+ };
8507
+ };
8508
+ /** @description Insufficient permissions */
8509
+ 403: {
8510
+ headers: {
8511
+ [name: string]: unknown;
8512
+ };
8513
+ content: {
8514
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8515
+ };
8516
+ };
8517
+ /** @description Token not found */
8518
+ 404: {
8519
+ headers: {
8520
+ [name: string]: unknown;
8521
+ };
8522
+ content: {
8523
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8524
+ };
8525
+ };
8526
+ /** @description Internal server error */
8527
+ 500: {
8528
+ headers: {
8529
+ [name: string]: unknown;
8530
+ };
8531
+ content: {
8532
+ "application/json": components["schemas"]["BodhiErrorResponse"];
8533
+ };
8534
+ };
8535
+ };
8536
+ };
7588
8537
  getCurrentUser: {
7589
8538
  parameters: {
7590
8539
  query?: never;