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