@featureflip/mcp 0.1.7 → 0.1.8

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.
@@ -443,7 +443,8 @@ export interface paths {
443
443
  * computed from the query result rather than an in-memory count. `type` is parsed
444
444
  * leniently — an unrecognized value degrades to "no type filter" (matching
445
445
  * Decode's "garbage input degrades gracefully" precedent)
446
- * rather than a 400, since it's a non-critical list filter, not a mutation.
446
+ * rather than a 400, since it's a non-critical list filter, not a mutation. `owner` filters
447
+ * by owner: an email (an active member, case-insensitive) or `none` for unowned flags.
447
448
  */
448
449
  get: {
449
450
  parameters: {
@@ -454,6 +455,7 @@ export interface paths {
454
455
  archived?: boolean;
455
456
  limit?: number;
456
457
  cursor?: string;
458
+ owner?: string;
457
459
  };
458
460
  header?: never;
459
461
  path: {
@@ -980,7 +982,7 @@ export interface paths {
980
982
  patch?: never;
981
983
  trace?: never;
982
984
  };
983
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/archive": {
985
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/expiry": {
984
986
  parameters: {
985
987
  query?: never;
986
988
  header?: never;
@@ -988,21 +990,16 @@ export interface paths {
988
990
  cookie?: never;
989
991
  };
990
992
  get?: never;
991
- put?: never;
992
993
  /**
993
- * Archives a flag.
994
- * @description Requires at least Member.
994
+ * Sets the flag's advisory expiry date.
995
+ * @description Evaluation never changes when it passes — the flag is
996
+ * reported stale so it can be cleaned up. Requires at least Member. The date must be in the
997
+ * future (400 `EXPIRY_IN_PAST`) and the flag-expiration feature must be enabled
998
+ * (400 `FEATURE_NOT_ENABLED`).
995
999
  */
996
- post: {
1000
+ put: {
997
1001
  parameters: {
998
- query?: {
999
- /**
1000
- * @description Archive even though live traffic is still evaluating the flag. Without it the request is
1001
- * refused with `FLAG_RECENTLY_EVALUATED` naming the environments still reading it — which
1002
- * usually means the removal has merged but not yet deployed.
1003
- */
1004
- force?: boolean;
1005
- };
1002
+ query?: never;
1006
1003
  header?: never;
1007
1004
  path: {
1008
1005
  org: string;
@@ -1011,7 +1008,13 @@ export interface paths {
1011
1008
  };
1012
1009
  cookie?: never;
1013
1010
  };
1014
- requestBody?: never;
1011
+ requestBody?: {
1012
+ content: {
1013
+ "application/json": components["schemas"]["PublicSetFlagExpiryRequest"];
1014
+ "text/json": components["schemas"]["PublicSetFlagExpiryRequest"];
1015
+ "application/*+json": components["schemas"]["PublicSetFlagExpiryRequest"];
1016
+ };
1017
+ };
1015
1018
  responses: {
1016
1019
  /** @description No Content */
1017
1020
  204: {
@@ -1087,26 +1090,13 @@ export interface paths {
1087
1090
  };
1088
1091
  };
1089
1092
  };
1090
- delete?: never;
1091
- options?: never;
1092
- head?: never;
1093
- patch?: never;
1094
- trace?: never;
1095
- };
1096
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/restore": {
1097
- parameters: {
1098
- query?: never;
1099
- header?: never;
1100
- path?: never;
1101
- cookie?: never;
1102
- };
1103
- get?: never;
1104
- put?: never;
1093
+ post?: never;
1105
1094
  /**
1106
- * Restores a previously archived flag.
1107
- * @description Requires at least Member.
1095
+ * Removes the flag's expiry date.
1096
+ * @description Requires at least Member. Always allowed, even when
1097
+ * the flag-expiration feature is disabled.
1108
1098
  */
1109
- post: {
1099
+ delete: {
1110
1100
  parameters: {
1111
1101
  query?: never;
1112
1102
  header?: never;
@@ -1181,21 +1171,26 @@ export interface paths {
1181
1171
  };
1182
1172
  };
1183
1173
  };
1184
- delete?: never;
1185
1174
  options?: never;
1186
1175
  head?: never;
1187
1176
  patch?: never;
1188
1177
  trace?: never;
1189
1178
  };
1190
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments": {
1179
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/owner": {
1191
1180
  parameters: {
1192
1181
  query?: never;
1193
1182
  header?: never;
1194
1183
  path?: never;
1195
1184
  cookie?: never;
1196
1185
  };
1197
- /** Gets the resolved flag's config in every environment of the resolved project. */
1198
- get: {
1186
+ get?: never;
1187
+ /**
1188
+ * Assigns the flag's owner by email.
1189
+ * @description Requires at least Member. The email must belong to an
1190
+ * active member of the organization (400 `OWNER_NOT_MEMBER`) and the flag-ownership feature
1191
+ * must be enabled (400 `FEATURE_NOT_ENABLED`).
1192
+ */
1193
+ put: {
1199
1194
  parameters: {
1200
1195
  query?: never;
1201
1196
  header?: never;
@@ -1206,10 +1201,26 @@ export interface paths {
1206
1201
  };
1207
1202
  cookie?: never;
1208
1203
  };
1209
- requestBody?: never;
1204
+ requestBody?: {
1205
+ content: {
1206
+ "application/json": components["schemas"]["PublicSetFlagOwnerRequest"];
1207
+ "text/json": components["schemas"]["PublicSetFlagOwnerRequest"];
1208
+ "application/*+json": components["schemas"]["PublicSetFlagOwnerRequest"];
1209
+ };
1210
+ };
1210
1211
  responses: {
1211
- /** @description OK */
1212
- 200: {
1212
+ /** @description No Content */
1213
+ 204: {
1214
+ headers: {
1215
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1216
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1217
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1218
+ [name: string]: unknown;
1219
+ };
1220
+ content?: never;
1221
+ };
1222
+ /** @description Bad Request */
1223
+ 400: {
1213
1224
  headers: {
1214
1225
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1215
1226
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -1217,7 +1228,7 @@ export interface paths {
1217
1228
  [name: string]: unknown;
1218
1229
  };
1219
1230
  content: {
1220
- "application/json": components["schemas"]["PublicFlagEnvConfigResponse"][];
1231
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1221
1232
  };
1222
1233
  };
1223
1234
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -1232,6 +1243,18 @@ export interface paths {
1232
1243
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1233
1244
  };
1234
1245
  };
1246
+ /** @description Forbidden */
1247
+ 403: {
1248
+ headers: {
1249
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1250
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1251
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1252
+ [name: string]: unknown;
1253
+ };
1254
+ content: {
1255
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1256
+ };
1257
+ };
1235
1258
  /** @description Not Found */
1236
1259
  404: {
1237
1260
  headers: {
@@ -1260,29 +1283,13 @@ export interface paths {
1260
1283
  };
1261
1284
  };
1262
1285
  };
1263
- put?: never;
1264
1286
  post?: never;
1265
- delete?: never;
1266
- options?: never;
1267
- head?: never;
1268
- patch?: never;
1269
- trace?: never;
1270
- };
1271
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}": {
1272
- parameters: {
1273
- query?: never;
1274
- header?: never;
1275
- path?: never;
1276
- cookie?: never;
1277
- };
1278
1287
  /**
1279
- * Gets the resolved flag's config in a single resolved environment.
1280
- * @description There is no
1281
- * single-environment query on the Application side, so this dispatches the same
1282
- * GetFlagEnvironmentConfigurationsQuery as GetAll and finds the
1283
- * resolved environment by id.
1288
+ * Leaves the flag unowned.
1289
+ * @description Requires at least Member. Always allowed, even when the
1290
+ * flag-ownership feature is disabled.
1284
1291
  */
1285
- get: {
1292
+ delete: {
1286
1293
  parameters: {
1287
1294
  query?: never;
1288
1295
  header?: never;
@@ -1290,23 +1297,20 @@ export interface paths {
1290
1297
  org: string;
1291
1298
  project: string;
1292
1299
  flag: string;
1293
- env: string;
1294
1300
  };
1295
1301
  cookie?: never;
1296
1302
  };
1297
1303
  requestBody?: never;
1298
1304
  responses: {
1299
- /** @description OK */
1300
- 200: {
1305
+ /** @description No Content */
1306
+ 204: {
1301
1307
  headers: {
1302
1308
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1303
1309
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1304
1310
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1305
1311
  [name: string]: unknown;
1306
1312
  };
1307
- content: {
1308
- "application/json": components["schemas"]["PublicFlagEnvConfigResponse"];
1309
- };
1313
+ content?: never;
1310
1314
  };
1311
1315
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
1312
1316
  401: {
@@ -1320,6 +1324,18 @@ export interface paths {
1320
1324
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1321
1325
  };
1322
1326
  };
1327
+ /** @description Forbidden */
1328
+ 403: {
1329
+ headers: {
1330
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1331
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1332
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1333
+ [name: string]: unknown;
1334
+ };
1335
+ content: {
1336
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1337
+ };
1338
+ };
1323
1339
  /** @description Not Found */
1324
1340
  404: {
1325
1341
  headers: {
@@ -1348,31 +1364,43 @@ export interface paths {
1348
1364
  };
1349
1365
  };
1350
1366
  };
1367
+ options?: never;
1368
+ head?: never;
1369
+ patch?: never;
1370
+ trace?: never;
1371
+ };
1372
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/archive": {
1373
+ parameters: {
1374
+ query?: never;
1375
+ header?: never;
1376
+ path?: never;
1377
+ cookie?: never;
1378
+ };
1379
+ get?: never;
1380
+ put?: never;
1351
1381
  /**
1352
- * Updates the resolved flag's default variation, strategy, and (optionally) prerequisites in a resolved environment.
1353
- * @description Requires at least Member. A null
1354
- * Prerequisites leaves prerequisites untouched;
1355
- * a non-null list replaces them wholesale.
1382
+ * Archives a flag.
1383
+ * @description Requires at least Member.
1356
1384
  */
1357
- put: {
1385
+ post: {
1358
1386
  parameters: {
1359
- query?: never;
1387
+ query?: {
1388
+ /**
1389
+ * @description Archive even though live traffic is still evaluating the flag. Without it the request is
1390
+ * refused with `FLAG_RECENTLY_EVALUATED` naming the environments still reading it — which
1391
+ * usually means the removal has merged but not yet deployed.
1392
+ */
1393
+ force?: boolean;
1394
+ };
1360
1395
  header?: never;
1361
1396
  path: {
1362
1397
  org: string;
1363
1398
  project: string;
1364
1399
  flag: string;
1365
- env: string;
1366
1400
  };
1367
1401
  cookie?: never;
1368
1402
  };
1369
- requestBody?: {
1370
- content: {
1371
- "application/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1372
- "text/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1373
- "application/*+json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1374
- };
1375
- };
1403
+ requestBody?: never;
1376
1404
  responses: {
1377
1405
  /** @description No Content */
1378
1406
  204: {
@@ -1448,14 +1476,13 @@ export interface paths {
1448
1476
  };
1449
1477
  };
1450
1478
  };
1451
- post?: never;
1452
1479
  delete?: never;
1453
1480
  options?: never;
1454
1481
  head?: never;
1455
1482
  patch?: never;
1456
1483
  trace?: never;
1457
1484
  };
1458
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/toggle": {
1485
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/restore": {
1459
1486
  parameters: {
1460
1487
  query?: never;
1461
1488
  header?: never;
@@ -1465,7 +1492,7 @@ export interface paths {
1465
1492
  get?: never;
1466
1493
  put?: never;
1467
1494
  /**
1468
- * Enables or disables the resolved flag in a resolved environment.
1495
+ * Restores a previously archived flag.
1469
1496
  * @description Requires at least Member.
1470
1497
  */
1471
1498
  post: {
@@ -1476,17 +1503,10 @@ export interface paths {
1476
1503
  org: string;
1477
1504
  project: string;
1478
1505
  flag: string;
1479
- env: string;
1480
1506
  };
1481
1507
  cookie?: never;
1482
1508
  };
1483
- requestBody?: {
1484
- content: {
1485
- "application/json": components["schemas"]["PublicToggleFlagRequest"];
1486
- "text/json": components["schemas"]["PublicToggleFlagRequest"];
1487
- "application/*+json": components["schemas"]["PublicToggleFlagRequest"];
1488
- };
1489
- };
1509
+ requestBody?: never;
1490
1510
  responses: {
1491
1511
  /** @description No Content */
1492
1512
  204: {
@@ -1498,18 +1518,6 @@ export interface paths {
1498
1518
  };
1499
1519
  content?: never;
1500
1520
  };
1501
- /** @description Bad Request */
1502
- 400: {
1503
- headers: {
1504
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1505
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1506
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1507
- [name: string]: unknown;
1508
- };
1509
- content: {
1510
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1511
- };
1512
- };
1513
1521
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
1514
1522
  401: {
1515
1523
  headers: {
@@ -1568,20 +1576,14 @@ export interface paths {
1568
1576
  patch?: never;
1569
1577
  trace?: never;
1570
1578
  };
1571
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/targeting": {
1579
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments": {
1572
1580
  parameters: {
1573
1581
  query?: never;
1574
1582
  header?: never;
1575
1583
  path?: never;
1576
1584
  cookie?: never;
1577
1585
  };
1578
- /**
1579
- * Gets the resolved flag's full targeting configuration (enabled flag + ordered rules) in the resolved environment.
1580
- * @description GetTargetingConfigurationQuery returns null when
1581
- * no `FlagEnvironmentConfiguration` exists yet for this flag/environment pair — treated
1582
- * as 404 here (rather than an empty PublicTargetingConfigResponse) for
1583
- * consistency with every other resolved-resource 404 on this surface.
1584
- */
1586
+ /** Gets the resolved flag's config in every environment of the resolved project. */
1585
1587
  get: {
1586
1588
  parameters: {
1587
1589
  query?: never;
@@ -1590,7 +1592,6 @@ export interface paths {
1590
1592
  org: string;
1591
1593
  project: string;
1592
1594
  flag: string;
1593
- env: string;
1594
1595
  };
1595
1596
  cookie?: never;
1596
1597
  };
@@ -1605,7 +1606,7 @@ export interface paths {
1605
1606
  [name: string]: unknown;
1606
1607
  };
1607
1608
  content: {
1608
- "application/json": components["schemas"]["PublicTargetingConfigResponse"];
1609
+ "application/json": components["schemas"]["PublicFlagEnvConfigResponse"][];
1609
1610
  };
1610
1611
  };
1611
1612
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -1648,13 +1649,29 @@ export interface paths {
1648
1649
  };
1649
1650
  };
1650
1651
  };
1652
+ put?: never;
1653
+ post?: never;
1654
+ delete?: never;
1655
+ options?: never;
1656
+ head?: never;
1657
+ patch?: never;
1658
+ trace?: never;
1659
+ };
1660
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}": {
1661
+ parameters: {
1662
+ query?: never;
1663
+ header?: never;
1664
+ path?: never;
1665
+ cookie?: never;
1666
+ };
1651
1667
  /**
1652
- * Declaratively replaces the resolved flag's entire targeting rule set in the resolved environment.
1653
- * @description The ordered Rules list is applied in
1654
- * array order (= evaluation order); an empty or omitted list clears all rules. Segment-scoped
1655
- * rules are supported. The replace is atomic. Requires at least Member.
1668
+ * Gets the resolved flag's config in a single resolved environment.
1669
+ * @description There is no
1670
+ * single-environment query on the Application side, so this dispatches the same
1671
+ * GetFlagEnvironmentConfigurationsQuery as GetAll and finds the
1672
+ * resolved environment by id.
1656
1673
  */
1657
- put: {
1674
+ get: {
1658
1675
  parameters: {
1659
1676
  query?: never;
1660
1677
  header?: never;
@@ -1666,26 +1683,10 @@ export interface paths {
1666
1683
  };
1667
1684
  cookie?: never;
1668
1685
  };
1669
- requestBody?: {
1670
- content: {
1671
- "application/json": components["schemas"]["PublicPutTargetingRequest"];
1672
- "text/json": components["schemas"]["PublicPutTargetingRequest"];
1673
- "application/*+json": components["schemas"]["PublicPutTargetingRequest"];
1674
- };
1675
- };
1686
+ requestBody?: never;
1676
1687
  responses: {
1677
- /** @description No Content */
1678
- 204: {
1679
- headers: {
1680
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1681
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1682
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1683
- [name: string]: unknown;
1684
- };
1685
- content?: never;
1686
- };
1687
- /** @description Bad Request */
1688
- 400: {
1688
+ /** @description OK */
1689
+ 200: {
1689
1690
  headers: {
1690
1691
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1691
1692
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -1693,7 +1694,7 @@ export interface paths {
1693
1694
  [name: string]: unknown;
1694
1695
  };
1695
1696
  content: {
1696
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1697
+ "application/json": components["schemas"]["PublicFlagEnvConfigResponse"];
1697
1698
  };
1698
1699
  };
1699
1700
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -1708,20 +1709,8 @@ export interface paths {
1708
1709
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1709
1710
  };
1710
1711
  };
1711
- /** @description Forbidden */
1712
- 403: {
1713
- headers: {
1714
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1715
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1716
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1717
- [name: string]: unknown;
1718
- };
1719
- content: {
1720
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1721
- };
1722
- };
1723
- /** @description Not Found */
1724
- 404: {
1712
+ /** @description Not Found */
1713
+ 404: {
1725
1714
  headers: {
1726
1715
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1727
1716
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -1748,30 +1737,13 @@ export interface paths {
1748
1737
  };
1749
1738
  };
1750
1739
  };
1751
- post?: never;
1752
- delete?: never;
1753
- options?: never;
1754
- head?: never;
1755
- patch?: never;
1756
- trace?: never;
1757
- };
1758
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules": {
1759
- parameters: {
1760
- query?: never;
1761
- header?: never;
1762
- path?: never;
1763
- cookie?: never;
1764
- };
1765
- get?: never;
1766
- put?: never;
1767
1740
  /**
1768
- * Creates a targeting rule on the resolved flag in the resolved environment.
1769
- * @description Requires at
1770
- * least Member. Re-fetches via GetTargetingRuleQuery using the id returned
1771
- * from CreateTargetingRuleCommand so the response reflects exactly what was
1772
- * persisted (e.g. server-assigned priority and condition/group ids).
1741
+ * Updates the resolved flag's default variation, strategy, and (optionally) prerequisites in a resolved environment.
1742
+ * @description Requires at least Member. A null
1743
+ * Prerequisites leaves prerequisites untouched;
1744
+ * a non-null list replaces them wholesale.
1773
1745
  */
1774
- post: {
1746
+ put: {
1775
1747
  parameters: {
1776
1748
  query?: never;
1777
1749
  header?: never;
@@ -1785,23 +1757,21 @@ export interface paths {
1785
1757
  };
1786
1758
  requestBody?: {
1787
1759
  content: {
1788
- "application/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
1789
- "text/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
1790
- "application/*+json": components["schemas"]["PublicCreateTargetingRuleRequest"];
1760
+ "application/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1761
+ "text/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1762
+ "application/*+json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1791
1763
  };
1792
1764
  };
1793
1765
  responses: {
1794
- /** @description Created */
1795
- 201: {
1766
+ /** @description No Content */
1767
+ 204: {
1796
1768
  headers: {
1797
1769
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1798
1770
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1799
1771
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1800
1772
  [name: string]: unknown;
1801
1773
  };
1802
- content: {
1803
- "application/json": components["schemas"]["PublicTargetingRuleResponse"];
1804
- };
1774
+ content?: never;
1805
1775
  };
1806
1776
  /** @description Bad Request */
1807
1777
  400: {
@@ -1867,92 +1837,27 @@ export interface paths {
1867
1837
  };
1868
1838
  };
1869
1839
  };
1840
+ post?: never;
1870
1841
  delete?: never;
1871
1842
  options?: never;
1872
1843
  head?: never;
1873
1844
  patch?: never;
1874
1845
  trace?: never;
1875
1846
  };
1876
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/{ruleId}": {
1847
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/toggle": {
1877
1848
  parameters: {
1878
1849
  query?: never;
1879
1850
  header?: never;
1880
1851
  path?: never;
1881
1852
  cookie?: never;
1882
1853
  };
1883
- /** Gets a single targeting rule on the resolved flag in the resolved environment by id. */
1884
- get: {
1885
- parameters: {
1886
- query?: never;
1887
- header?: never;
1888
- path: {
1889
- org: string;
1890
- project: string;
1891
- flag: string;
1892
- env: string;
1893
- ruleId: string;
1894
- };
1895
- cookie?: never;
1896
- };
1897
- requestBody?: never;
1898
- responses: {
1899
- /** @description OK */
1900
- 200: {
1901
- headers: {
1902
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1903
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1904
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1905
- [name: string]: unknown;
1906
- };
1907
- content: {
1908
- "application/json": components["schemas"]["PublicTargetingRuleResponse"];
1909
- };
1910
- };
1911
- /** @description Authentication is required, or the supplied API token is invalid or expired. */
1912
- 401: {
1913
- headers: {
1914
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1915
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1916
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1917
- [name: string]: unknown;
1918
- };
1919
- content: {
1920
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1921
- };
1922
- };
1923
- /** @description Not Found */
1924
- 404: {
1925
- headers: {
1926
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1927
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1928
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1929
- [name: string]: unknown;
1930
- };
1931
- content: {
1932
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1933
- };
1934
- };
1935
- /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
1936
- 429: {
1937
- headers: {
1938
- /** @description Number of seconds to wait before retrying the request. */
1939
- "Retry-After"?: number;
1940
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1941
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1942
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1943
- [name: string]: unknown;
1944
- };
1945
- content: {
1946
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1947
- };
1948
- };
1949
- };
1950
- };
1854
+ get?: never;
1855
+ put?: never;
1951
1856
  /**
1952
- * Updates a targeting rule's variation/description/rollout/segment/conditions wholesale.
1857
+ * Enables or disables the resolved flag in a resolved environment.
1953
1858
  * @description Requires at least Member.
1954
1859
  */
1955
- put: {
1860
+ post: {
1956
1861
  parameters: {
1957
1862
  query?: never;
1958
1863
  header?: never;
@@ -1961,15 +1866,14 @@ export interface paths {
1961
1866
  project: string;
1962
1867
  flag: string;
1963
1868
  env: string;
1964
- ruleId: string;
1965
1869
  };
1966
1870
  cookie?: never;
1967
1871
  };
1968
1872
  requestBody?: {
1969
1873
  content: {
1970
- "application/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
1971
- "text/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
1972
- "application/*+json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
1874
+ "application/json": components["schemas"]["PublicToggleFlagRequest"];
1875
+ "text/json": components["schemas"]["PublicToggleFlagRequest"];
1876
+ "application/*+json": components["schemas"]["PublicToggleFlagRequest"];
1973
1877
  };
1974
1878
  };
1975
1879
  responses: {
@@ -2047,12 +1951,27 @@ export interface paths {
2047
1951
  };
2048
1952
  };
2049
1953
  };
2050
- post?: never;
1954
+ delete?: never;
1955
+ options?: never;
1956
+ head?: never;
1957
+ patch?: never;
1958
+ trace?: never;
1959
+ };
1960
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/targeting": {
1961
+ parameters: {
1962
+ query?: never;
1963
+ header?: never;
1964
+ path?: never;
1965
+ cookie?: never;
1966
+ };
2051
1967
  /**
2052
- * Deletes a targeting rule from the resolved flag in the resolved environment.
2053
- * @description Requires at least Member.
1968
+ * Gets the resolved flag's full targeting configuration (enabled flag + ordered rules) in the resolved environment.
1969
+ * @description GetTargetingConfigurationQuery returns null when
1970
+ * no `FlagEnvironmentConfiguration` exists yet for this flag/environment pair — treated
1971
+ * as 404 here (rather than an empty PublicTargetingConfigResponse) for
1972
+ * consistency with every other resolved-resource 404 on this surface.
2054
1973
  */
2055
- delete: {
1974
+ get: {
2056
1975
  parameters: {
2057
1976
  query?: never;
2058
1977
  header?: never;
@@ -2061,24 +1980,13 @@ export interface paths {
2061
1980
  project: string;
2062
1981
  flag: string;
2063
1982
  env: string;
2064
- ruleId: string;
2065
1983
  };
2066
1984
  cookie?: never;
2067
1985
  };
2068
1986
  requestBody?: never;
2069
1987
  responses: {
2070
- /** @description No Content */
2071
- 204: {
2072
- headers: {
2073
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2074
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2075
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2076
- [name: string]: unknown;
2077
- };
2078
- content?: never;
2079
- };
2080
- /** @description Authentication is required, or the supplied API token is invalid or expired. */
2081
- 401: {
1988
+ /** @description OK */
1989
+ 200: {
2082
1990
  headers: {
2083
1991
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2084
1992
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -2086,11 +1994,11 @@ export interface paths {
2086
1994
  [name: string]: unknown;
2087
1995
  };
2088
1996
  content: {
2089
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1997
+ "application/json": components["schemas"]["PublicTargetingConfigResponse"];
2090
1998
  };
2091
1999
  };
2092
- /** @description Forbidden */
2093
- 403: {
2000
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2001
+ 401: {
2094
2002
  headers: {
2095
2003
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2096
2004
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -2129,23 +2037,11 @@ export interface paths {
2129
2037
  };
2130
2038
  };
2131
2039
  };
2132
- options?: never;
2133
- head?: never;
2134
- patch?: never;
2135
- trace?: never;
2136
- };
2137
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/reorder": {
2138
- parameters: {
2139
- query?: never;
2140
- header?: never;
2141
- path?: never;
2142
- cookie?: never;
2143
- };
2144
- get?: never;
2145
2040
  /**
2146
- * Reorders the resolved flag's targeting rules in the resolved environment by priority.
2147
- * @description Requires at least Member. Must include every existing rule id exactly once — see the
2148
- * type-level remarks on the dup/omission 500 wart.
2041
+ * Declaratively replaces the resolved flag's entire targeting rule set in the resolved environment.
2042
+ * @description The ordered Rules list is applied in
2043
+ * array order (= evaluation order); an empty or omitted list clears all rules. Segment-scoped
2044
+ * rules are supported. The replace is atomic. Requires at least Member.
2149
2045
  */
2150
2046
  put: {
2151
2047
  parameters: {
@@ -2161,9 +2057,9 @@ export interface paths {
2161
2057
  };
2162
2058
  requestBody?: {
2163
2059
  content: {
2164
- "application/json": components["schemas"]["PublicReorderRulesRequest"];
2165
- "text/json": components["schemas"]["PublicReorderRulesRequest"];
2166
- "application/*+json": components["schemas"]["PublicReorderRulesRequest"];
2060
+ "application/json": components["schemas"]["PublicPutTargetingRequest"];
2061
+ "text/json": components["schemas"]["PublicPutTargetingRequest"];
2062
+ "application/*+json": components["schemas"]["PublicPutTargetingRequest"];
2167
2063
  };
2168
2064
  };
2169
2065
  responses: {
@@ -2177,6 +2073,18 @@ export interface paths {
2177
2073
  };
2178
2074
  content?: never;
2179
2075
  };
2076
+ /** @description Bad Request */
2077
+ 400: {
2078
+ headers: {
2079
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2080
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2081
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2082
+ [name: string]: unknown;
2083
+ };
2084
+ content: {
2085
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2086
+ };
2087
+ };
2180
2088
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
2181
2089
  401: {
2182
2090
  headers: {
@@ -2236,7 +2144,7 @@ export interface paths {
2236
2144
  patch?: never;
2237
2145
  trace?: never;
2238
2146
  };
2239
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations": {
2147
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules": {
2240
2148
  parameters: {
2241
2149
  query?: never;
2242
2150
  header?: never;
@@ -2246,10 +2154,11 @@ export interface paths {
2246
2154
  get?: never;
2247
2155
  put?: never;
2248
2156
  /**
2249
- * Adds a variation to the resolved flag.
2250
- * @description Requires at least Member. Re-fetches the flag via
2251
- * GetFeatureFlagQuery and locates the new variation by the id returned from
2252
- * AddVariationCommand so the response reflects exactly what was persisted.
2157
+ * Creates a targeting rule on the resolved flag in the resolved environment.
2158
+ * @description Requires at
2159
+ * least Member. Re-fetches via GetTargetingRuleQuery using the id returned
2160
+ * from CreateTargetingRuleCommand so the response reflects exactly what was
2161
+ * persisted (e.g. server-assigned priority and condition/group ids).
2253
2162
  */
2254
2163
  post: {
2255
2164
  parameters: {
@@ -2259,14 +2168,15 @@ export interface paths {
2259
2168
  org: string;
2260
2169
  project: string;
2261
2170
  flag: string;
2171
+ env: string;
2262
2172
  };
2263
2173
  cookie?: never;
2264
2174
  };
2265
2175
  requestBody?: {
2266
2176
  content: {
2267
- "application/json": components["schemas"]["PublicAddVariationRequest"];
2268
- "text/json": components["schemas"]["PublicAddVariationRequest"];
2269
- "application/*+json": components["schemas"]["PublicAddVariationRequest"];
2177
+ "application/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
2178
+ "text/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
2179
+ "application/*+json": components["schemas"]["PublicCreateTargetingRuleRequest"];
2270
2180
  };
2271
2181
  };
2272
2182
  responses: {
@@ -2279,7 +2189,7 @@ export interface paths {
2279
2189
  [name: string]: unknown;
2280
2190
  };
2281
2191
  content: {
2282
- "application/json": components["schemas"]["PublicVariationResponse"];
2192
+ "application/json": components["schemas"]["PublicTargetingRuleResponse"];
2283
2193
  };
2284
2194
  };
2285
2195
  /** @description Bad Request */
@@ -2352,19 +2262,15 @@ export interface paths {
2352
2262
  patch?: never;
2353
2263
  trace?: never;
2354
2264
  };
2355
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations/{variationId}": {
2265
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/{ruleId}": {
2356
2266
  parameters: {
2357
2267
  query?: never;
2358
2268
  header?: never;
2359
2269
  path?: never;
2360
2270
  cookie?: never;
2361
2271
  };
2362
- get?: never;
2363
- /**
2364
- * Updates a variation's name/value/description.
2365
- * @description Requires at least Member. The variation's key is immutable via this endpoint.
2366
- */
2367
- put: {
2272
+ /** Gets a single targeting rule on the resolved flag in the resolved environment by id. */
2273
+ get: {
2368
2274
  parameters: {
2369
2275
  query?: never;
2370
2276
  header?: never;
@@ -2372,14 +2278,497 @@ export interface paths {
2372
2278
  org: string;
2373
2279
  project: string;
2374
2280
  flag: string;
2375
- variationId: string;
2281
+ env: string;
2282
+ ruleId: string;
2376
2283
  };
2377
2284
  cookie?: never;
2378
2285
  };
2379
- requestBody?: {
2380
- content: {
2381
- "application/json": components["schemas"]["PublicUpdateVariationRequest"];
2382
- "text/json": components["schemas"]["PublicUpdateVariationRequest"];
2286
+ requestBody?: never;
2287
+ responses: {
2288
+ /** @description OK */
2289
+ 200: {
2290
+ headers: {
2291
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2292
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2293
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2294
+ [name: string]: unknown;
2295
+ };
2296
+ content: {
2297
+ "application/json": components["schemas"]["PublicTargetingRuleResponse"];
2298
+ };
2299
+ };
2300
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2301
+ 401: {
2302
+ headers: {
2303
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2304
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2305
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2306
+ [name: string]: unknown;
2307
+ };
2308
+ content: {
2309
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2310
+ };
2311
+ };
2312
+ /** @description Not Found */
2313
+ 404: {
2314
+ headers: {
2315
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2316
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2317
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2318
+ [name: string]: unknown;
2319
+ };
2320
+ content: {
2321
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2322
+ };
2323
+ };
2324
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2325
+ 429: {
2326
+ headers: {
2327
+ /** @description Number of seconds to wait before retrying the request. */
2328
+ "Retry-After"?: number;
2329
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2330
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2331
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2332
+ [name: string]: unknown;
2333
+ };
2334
+ content: {
2335
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2336
+ };
2337
+ };
2338
+ };
2339
+ };
2340
+ /**
2341
+ * Updates a targeting rule's variation/description/rollout/segment/conditions wholesale.
2342
+ * @description Requires at least Member.
2343
+ */
2344
+ put: {
2345
+ parameters: {
2346
+ query?: never;
2347
+ header?: never;
2348
+ path: {
2349
+ org: string;
2350
+ project: string;
2351
+ flag: string;
2352
+ env: string;
2353
+ ruleId: string;
2354
+ };
2355
+ cookie?: never;
2356
+ };
2357
+ requestBody?: {
2358
+ content: {
2359
+ "application/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
2360
+ "text/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
2361
+ "application/*+json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
2362
+ };
2363
+ };
2364
+ responses: {
2365
+ /** @description No Content */
2366
+ 204: {
2367
+ headers: {
2368
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2369
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2370
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2371
+ [name: string]: unknown;
2372
+ };
2373
+ content?: never;
2374
+ };
2375
+ /** @description Bad Request */
2376
+ 400: {
2377
+ headers: {
2378
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2379
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2380
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2381
+ [name: string]: unknown;
2382
+ };
2383
+ content: {
2384
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2385
+ };
2386
+ };
2387
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2388
+ 401: {
2389
+ headers: {
2390
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2391
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2392
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2393
+ [name: string]: unknown;
2394
+ };
2395
+ content: {
2396
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2397
+ };
2398
+ };
2399
+ /** @description Forbidden */
2400
+ 403: {
2401
+ headers: {
2402
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2403
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2404
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2405
+ [name: string]: unknown;
2406
+ };
2407
+ content: {
2408
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2409
+ };
2410
+ };
2411
+ /** @description Not Found */
2412
+ 404: {
2413
+ headers: {
2414
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2415
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2416
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2417
+ [name: string]: unknown;
2418
+ };
2419
+ content: {
2420
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2421
+ };
2422
+ };
2423
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2424
+ 429: {
2425
+ headers: {
2426
+ /** @description Number of seconds to wait before retrying the request. */
2427
+ "Retry-After"?: number;
2428
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2429
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2430
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2431
+ [name: string]: unknown;
2432
+ };
2433
+ content: {
2434
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2435
+ };
2436
+ };
2437
+ };
2438
+ };
2439
+ post?: never;
2440
+ /**
2441
+ * Deletes a targeting rule from the resolved flag in the resolved environment.
2442
+ * @description Requires at least Member.
2443
+ */
2444
+ delete: {
2445
+ parameters: {
2446
+ query?: never;
2447
+ header?: never;
2448
+ path: {
2449
+ org: string;
2450
+ project: string;
2451
+ flag: string;
2452
+ env: string;
2453
+ ruleId: string;
2454
+ };
2455
+ cookie?: never;
2456
+ };
2457
+ requestBody?: never;
2458
+ responses: {
2459
+ /** @description No Content */
2460
+ 204: {
2461
+ headers: {
2462
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2463
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2464
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2465
+ [name: string]: unknown;
2466
+ };
2467
+ content?: never;
2468
+ };
2469
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2470
+ 401: {
2471
+ headers: {
2472
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2473
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2474
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2475
+ [name: string]: unknown;
2476
+ };
2477
+ content: {
2478
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2479
+ };
2480
+ };
2481
+ /** @description Forbidden */
2482
+ 403: {
2483
+ headers: {
2484
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2485
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2486
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2487
+ [name: string]: unknown;
2488
+ };
2489
+ content: {
2490
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2491
+ };
2492
+ };
2493
+ /** @description Not Found */
2494
+ 404: {
2495
+ headers: {
2496
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2497
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2498
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2499
+ [name: string]: unknown;
2500
+ };
2501
+ content: {
2502
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2503
+ };
2504
+ };
2505
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2506
+ 429: {
2507
+ headers: {
2508
+ /** @description Number of seconds to wait before retrying the request. */
2509
+ "Retry-After"?: number;
2510
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2511
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2512
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2513
+ [name: string]: unknown;
2514
+ };
2515
+ content: {
2516
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2517
+ };
2518
+ };
2519
+ };
2520
+ };
2521
+ options?: never;
2522
+ head?: never;
2523
+ patch?: never;
2524
+ trace?: never;
2525
+ };
2526
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/reorder": {
2527
+ parameters: {
2528
+ query?: never;
2529
+ header?: never;
2530
+ path?: never;
2531
+ cookie?: never;
2532
+ };
2533
+ get?: never;
2534
+ /**
2535
+ * Reorders the resolved flag's targeting rules in the resolved environment by priority.
2536
+ * @description Requires at least Member. Must include every existing rule id exactly once — see the
2537
+ * type-level remarks on the dup/omission 500 wart.
2538
+ */
2539
+ put: {
2540
+ parameters: {
2541
+ query?: never;
2542
+ header?: never;
2543
+ path: {
2544
+ org: string;
2545
+ project: string;
2546
+ flag: string;
2547
+ env: string;
2548
+ };
2549
+ cookie?: never;
2550
+ };
2551
+ requestBody?: {
2552
+ content: {
2553
+ "application/json": components["schemas"]["PublicReorderRulesRequest"];
2554
+ "text/json": components["schemas"]["PublicReorderRulesRequest"];
2555
+ "application/*+json": components["schemas"]["PublicReorderRulesRequest"];
2556
+ };
2557
+ };
2558
+ responses: {
2559
+ /** @description No Content */
2560
+ 204: {
2561
+ headers: {
2562
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2563
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2564
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2565
+ [name: string]: unknown;
2566
+ };
2567
+ content?: never;
2568
+ };
2569
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2570
+ 401: {
2571
+ headers: {
2572
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2573
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2574
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2575
+ [name: string]: unknown;
2576
+ };
2577
+ content: {
2578
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2579
+ };
2580
+ };
2581
+ /** @description Forbidden */
2582
+ 403: {
2583
+ headers: {
2584
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2585
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2586
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2587
+ [name: string]: unknown;
2588
+ };
2589
+ content: {
2590
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2591
+ };
2592
+ };
2593
+ /** @description Not Found */
2594
+ 404: {
2595
+ headers: {
2596
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2597
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2598
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2599
+ [name: string]: unknown;
2600
+ };
2601
+ content: {
2602
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2603
+ };
2604
+ };
2605
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2606
+ 429: {
2607
+ headers: {
2608
+ /** @description Number of seconds to wait before retrying the request. */
2609
+ "Retry-After"?: number;
2610
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2611
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2612
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2613
+ [name: string]: unknown;
2614
+ };
2615
+ content: {
2616
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2617
+ };
2618
+ };
2619
+ };
2620
+ };
2621
+ post?: never;
2622
+ delete?: never;
2623
+ options?: never;
2624
+ head?: never;
2625
+ patch?: never;
2626
+ trace?: never;
2627
+ };
2628
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations": {
2629
+ parameters: {
2630
+ query?: never;
2631
+ header?: never;
2632
+ path?: never;
2633
+ cookie?: never;
2634
+ };
2635
+ get?: never;
2636
+ put?: never;
2637
+ /**
2638
+ * Adds a variation to the resolved flag.
2639
+ * @description Requires at least Member. Re-fetches the flag via
2640
+ * GetFeatureFlagQuery and locates the new variation by the id returned from
2641
+ * AddVariationCommand so the response reflects exactly what was persisted.
2642
+ */
2643
+ post: {
2644
+ parameters: {
2645
+ query?: never;
2646
+ header?: never;
2647
+ path: {
2648
+ org: string;
2649
+ project: string;
2650
+ flag: string;
2651
+ };
2652
+ cookie?: never;
2653
+ };
2654
+ requestBody?: {
2655
+ content: {
2656
+ "application/json": components["schemas"]["PublicAddVariationRequest"];
2657
+ "text/json": components["schemas"]["PublicAddVariationRequest"];
2658
+ "application/*+json": components["schemas"]["PublicAddVariationRequest"];
2659
+ };
2660
+ };
2661
+ responses: {
2662
+ /** @description Created */
2663
+ 201: {
2664
+ headers: {
2665
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2666
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2667
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2668
+ [name: string]: unknown;
2669
+ };
2670
+ content: {
2671
+ "application/json": components["schemas"]["PublicVariationResponse"];
2672
+ };
2673
+ };
2674
+ /** @description Bad Request */
2675
+ 400: {
2676
+ headers: {
2677
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2678
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2679
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2680
+ [name: string]: unknown;
2681
+ };
2682
+ content: {
2683
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2684
+ };
2685
+ };
2686
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2687
+ 401: {
2688
+ headers: {
2689
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2690
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2691
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2692
+ [name: string]: unknown;
2693
+ };
2694
+ content: {
2695
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2696
+ };
2697
+ };
2698
+ /** @description Forbidden */
2699
+ 403: {
2700
+ headers: {
2701
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2702
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2703
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2704
+ [name: string]: unknown;
2705
+ };
2706
+ content: {
2707
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2708
+ };
2709
+ };
2710
+ /** @description Not Found */
2711
+ 404: {
2712
+ headers: {
2713
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2714
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2715
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2716
+ [name: string]: unknown;
2717
+ };
2718
+ content: {
2719
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2720
+ };
2721
+ };
2722
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2723
+ 429: {
2724
+ headers: {
2725
+ /** @description Number of seconds to wait before retrying the request. */
2726
+ "Retry-After"?: number;
2727
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2728
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2729
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2730
+ [name: string]: unknown;
2731
+ };
2732
+ content: {
2733
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2734
+ };
2735
+ };
2736
+ };
2737
+ };
2738
+ delete?: never;
2739
+ options?: never;
2740
+ head?: never;
2741
+ patch?: never;
2742
+ trace?: never;
2743
+ };
2744
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations/{variationId}": {
2745
+ parameters: {
2746
+ query?: never;
2747
+ header?: never;
2748
+ path?: never;
2749
+ cookie?: never;
2750
+ };
2751
+ get?: never;
2752
+ /**
2753
+ * Updates a variation's name/value/description.
2754
+ * @description Requires at least Member. The variation's key is immutable via this endpoint.
2755
+ */
2756
+ put: {
2757
+ parameters: {
2758
+ query?: never;
2759
+ header?: never;
2760
+ path: {
2761
+ org: string;
2762
+ project: string;
2763
+ flag: string;
2764
+ variationId: string;
2765
+ };
2766
+ cookie?: never;
2767
+ };
2768
+ requestBody?: {
2769
+ content: {
2770
+ "application/json": components["schemas"]["PublicUpdateVariationRequest"];
2771
+ "text/json": components["schemas"]["PublicUpdateVariationRequest"];
2383
2772
  "application/*+json": components["schemas"]["PublicUpdateVariationRequest"];
2384
2773
  };
2385
2774
  };
@@ -2448,37 +2837,819 @@ export interface paths {
2448
2837
  };
2449
2838
  post?: never;
2450
2839
  /**
2451
- * Removes a variation from the resolved flag.
2452
- * @description Requires at least Member. A variation with
2453
- * dependents (used as default variation, referenced by a targeting rule, or flagged
2454
- * `VARIATION_HAS_DEPENDENTS`) throws the existing
2455
- * ValidationException, which the
2456
- * exception filter maps to a 400 `validation_failed` envelope — this action doesn't
2457
- * special-case it.
2840
+ * Removes a variation from the resolved flag.
2841
+ * @description Requires at least Member. A variation with
2842
+ * dependents (used as default variation, referenced by a targeting rule, or flagged
2843
+ * `VARIATION_HAS_DEPENDENTS`) throws the existing
2844
+ * ValidationException, which the
2845
+ * exception filter maps to a 400 `validation_failed` envelope — this action doesn't
2846
+ * special-case it.
2847
+ */
2848
+ delete: {
2849
+ parameters: {
2850
+ query?: never;
2851
+ header?: never;
2852
+ path: {
2853
+ org: string;
2854
+ project: string;
2855
+ flag: string;
2856
+ variationId: string;
2857
+ };
2858
+ cookie?: never;
2859
+ };
2860
+ requestBody?: never;
2861
+ responses: {
2862
+ /** @description No Content */
2863
+ 204: {
2864
+ headers: {
2865
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2866
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2867
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2868
+ [name: string]: unknown;
2869
+ };
2870
+ content?: never;
2871
+ };
2872
+ /** @description Bad Request */
2873
+ 400: {
2874
+ headers: {
2875
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2876
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2877
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2878
+ [name: string]: unknown;
2879
+ };
2880
+ content: {
2881
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2882
+ };
2883
+ };
2884
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2885
+ 401: {
2886
+ headers: {
2887
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2888
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2889
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2890
+ [name: string]: unknown;
2891
+ };
2892
+ content: {
2893
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2894
+ };
2895
+ };
2896
+ /** @description Forbidden */
2897
+ 403: {
2898
+ headers: {
2899
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2900
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2901
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2902
+ [name: string]: unknown;
2903
+ };
2904
+ content: {
2905
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2906
+ };
2907
+ };
2908
+ /** @description Not Found */
2909
+ 404: {
2910
+ headers: {
2911
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2912
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2913
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2914
+ [name: string]: unknown;
2915
+ };
2916
+ content: {
2917
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2918
+ };
2919
+ };
2920
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2921
+ 429: {
2922
+ headers: {
2923
+ /** @description Number of seconds to wait before retrying the request. */
2924
+ "Retry-After"?: number;
2925
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2926
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2927
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2928
+ [name: string]: unknown;
2929
+ };
2930
+ content: {
2931
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2932
+ };
2933
+ };
2934
+ };
2935
+ };
2936
+ options?: never;
2937
+ head?: never;
2938
+ patch?: never;
2939
+ trace?: never;
2940
+ };
2941
+ "/api/v1/me": {
2942
+ parameters: {
2943
+ query?: never;
2944
+ header?: never;
2945
+ path?: never;
2946
+ cookie?: never;
2947
+ };
2948
+ /** Returns the authenticated caller's public identity (see MeResponse). */
2949
+ get: {
2950
+ parameters: {
2951
+ query?: never;
2952
+ header?: never;
2953
+ path?: never;
2954
+ cookie?: never;
2955
+ };
2956
+ requestBody?: never;
2957
+ responses: {
2958
+ /** @description OK */
2959
+ 200: {
2960
+ headers: {
2961
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2962
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2963
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2964
+ [name: string]: unknown;
2965
+ };
2966
+ content: {
2967
+ "application/json": components["schemas"]["MeResponse"];
2968
+ };
2969
+ };
2970
+ /** @description Unauthorized */
2971
+ 401: {
2972
+ headers: {
2973
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2974
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2975
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2976
+ [name: string]: unknown;
2977
+ };
2978
+ content: {
2979
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2980
+ };
2981
+ };
2982
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2983
+ 429: {
2984
+ headers: {
2985
+ /** @description Number of seconds to wait before retrying the request. */
2986
+ "Retry-After"?: number;
2987
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2988
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2989
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2990
+ [name: string]: unknown;
2991
+ };
2992
+ content: {
2993
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2994
+ };
2995
+ };
2996
+ };
2997
+ };
2998
+ put?: never;
2999
+ post?: never;
3000
+ delete?: never;
3001
+ options?: never;
3002
+ head?: never;
3003
+ patch?: never;
3004
+ trace?: never;
3005
+ };
3006
+ "/api/v1/orgs": {
3007
+ parameters: {
3008
+ query?: never;
3009
+ header?: never;
3010
+ path?: never;
3011
+ cookie?: never;
3012
+ };
3013
+ /** Lists the caller's organizations, cursor-paginated. */
3014
+ get: {
3015
+ parameters: {
3016
+ query?: {
3017
+ limit?: number;
3018
+ cursor?: string;
3019
+ };
3020
+ header?: never;
3021
+ path?: never;
3022
+ cookie?: never;
3023
+ };
3024
+ requestBody?: never;
3025
+ responses: {
3026
+ /** @description OK */
3027
+ 200: {
3028
+ headers: {
3029
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3030
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3031
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3032
+ [name: string]: unknown;
3033
+ };
3034
+ content: {
3035
+ "application/json": components["schemas"]["OrganizationResponsePagedResult"];
3036
+ };
3037
+ };
3038
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3039
+ 401: {
3040
+ headers: {
3041
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3042
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3043
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3044
+ [name: string]: unknown;
3045
+ };
3046
+ content: {
3047
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3048
+ };
3049
+ };
3050
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3051
+ 429: {
3052
+ headers: {
3053
+ /** @description Number of seconds to wait before retrying the request. */
3054
+ "Retry-After"?: number;
3055
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3056
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3057
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3058
+ [name: string]: unknown;
3059
+ };
3060
+ content: {
3061
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3062
+ };
3063
+ };
3064
+ };
3065
+ };
3066
+ put?: never;
3067
+ post?: never;
3068
+ delete?: never;
3069
+ options?: never;
3070
+ head?: never;
3071
+ patch?: never;
3072
+ trace?: never;
3073
+ };
3074
+ "/api/v1/orgs/{org}": {
3075
+ parameters: {
3076
+ query?: never;
3077
+ header?: never;
3078
+ path?: never;
3079
+ cookie?: never;
3080
+ };
3081
+ /** Gets one of the caller's organizations by slug or id. */
3082
+ get: {
3083
+ parameters: {
3084
+ query?: never;
3085
+ header?: never;
3086
+ path: {
3087
+ org: string;
3088
+ };
3089
+ cookie?: never;
3090
+ };
3091
+ requestBody?: never;
3092
+ responses: {
3093
+ /** @description OK */
3094
+ 200: {
3095
+ headers: {
3096
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3097
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3098
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3099
+ [name: string]: unknown;
3100
+ };
3101
+ content: {
3102
+ "application/json": components["schemas"]["OrganizationResponse"];
3103
+ };
3104
+ };
3105
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3106
+ 401: {
3107
+ headers: {
3108
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3109
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3110
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3111
+ [name: string]: unknown;
3112
+ };
3113
+ content: {
3114
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3115
+ };
3116
+ };
3117
+ /** @description Not Found */
3118
+ 404: {
3119
+ headers: {
3120
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3121
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3122
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3123
+ [name: string]: unknown;
3124
+ };
3125
+ content: {
3126
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3127
+ };
3128
+ };
3129
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3130
+ 429: {
3131
+ headers: {
3132
+ /** @description Number of seconds to wait before retrying the request. */
3133
+ "Retry-After"?: number;
3134
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3135
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3136
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3137
+ [name: string]: unknown;
3138
+ };
3139
+ content: {
3140
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3141
+ };
3142
+ };
3143
+ };
3144
+ };
3145
+ put?: never;
3146
+ post?: never;
3147
+ delete?: never;
3148
+ options?: never;
3149
+ head?: never;
3150
+ patch?: never;
3151
+ trace?: never;
3152
+ };
3153
+ "/api/v1/orgs/{org}/projects": {
3154
+ parameters: {
3155
+ query?: never;
3156
+ header?: never;
3157
+ path?: never;
3158
+ cookie?: never;
3159
+ };
3160
+ /** Lists projects in the resolved organization, cursor-paginated. */
3161
+ get: {
3162
+ parameters: {
3163
+ query?: {
3164
+ limit?: number;
3165
+ cursor?: string;
3166
+ };
3167
+ header?: never;
3168
+ path: {
3169
+ org: string;
3170
+ };
3171
+ cookie?: never;
3172
+ };
3173
+ requestBody?: never;
3174
+ responses: {
3175
+ /** @description OK */
3176
+ 200: {
3177
+ headers: {
3178
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3179
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3180
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3181
+ [name: string]: unknown;
3182
+ };
3183
+ content: {
3184
+ "application/json": components["schemas"]["ProjectResponsePagedResult"];
3185
+ };
3186
+ };
3187
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3188
+ 401: {
3189
+ headers: {
3190
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3191
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3192
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3193
+ [name: string]: unknown;
3194
+ };
3195
+ content: {
3196
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3197
+ };
3198
+ };
3199
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3200
+ 429: {
3201
+ headers: {
3202
+ /** @description Number of seconds to wait before retrying the request. */
3203
+ "Retry-After"?: number;
3204
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3205
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3206
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3207
+ [name: string]: unknown;
3208
+ };
3209
+ content: {
3210
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3211
+ };
3212
+ };
3213
+ };
3214
+ };
3215
+ put?: never;
3216
+ /**
3217
+ * Creates a project in the resolved organization.
3218
+ * @description Requires at least Member.
3219
+ */
3220
+ post: {
3221
+ parameters: {
3222
+ query?: never;
3223
+ header?: never;
3224
+ path: {
3225
+ org: string;
3226
+ };
3227
+ cookie?: never;
3228
+ };
3229
+ requestBody?: {
3230
+ content: {
3231
+ "application/json": components["schemas"]["PublicCreateProjectRequest"];
3232
+ "text/json": components["schemas"]["PublicCreateProjectRequest"];
3233
+ "application/*+json": components["schemas"]["PublicCreateProjectRequest"];
3234
+ };
3235
+ };
3236
+ responses: {
3237
+ /** @description Created */
3238
+ 201: {
3239
+ headers: {
3240
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3241
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3242
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3243
+ [name: string]: unknown;
3244
+ };
3245
+ content: {
3246
+ "application/json": components["schemas"]["ProjectResponse"];
3247
+ };
3248
+ };
3249
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3250
+ 401: {
3251
+ headers: {
3252
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3253
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3254
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3255
+ [name: string]: unknown;
3256
+ };
3257
+ content: {
3258
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3259
+ };
3260
+ };
3261
+ /** @description Forbidden */
3262
+ 403: {
3263
+ headers: {
3264
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3265
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3266
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3267
+ [name: string]: unknown;
3268
+ };
3269
+ content: {
3270
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3271
+ };
3272
+ };
3273
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3274
+ 429: {
3275
+ headers: {
3276
+ /** @description Number of seconds to wait before retrying the request. */
3277
+ "Retry-After"?: number;
3278
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3279
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3280
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3281
+ [name: string]: unknown;
3282
+ };
3283
+ content: {
3284
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3285
+ };
3286
+ };
3287
+ };
3288
+ };
3289
+ delete?: never;
3290
+ options?: never;
3291
+ head?: never;
3292
+ patch?: never;
3293
+ trace?: never;
3294
+ };
3295
+ "/api/v1/orgs/{org}/projects/{project}": {
3296
+ parameters: {
3297
+ query?: never;
3298
+ header?: never;
3299
+ path?: never;
3300
+ cookie?: never;
3301
+ };
3302
+ /** Gets a project in the resolved organization by key or id. */
3303
+ get: {
3304
+ parameters: {
3305
+ query?: never;
3306
+ header?: never;
3307
+ path: {
3308
+ org: string;
3309
+ project: string;
3310
+ };
3311
+ cookie?: never;
3312
+ };
3313
+ requestBody?: never;
3314
+ responses: {
3315
+ /** @description OK */
3316
+ 200: {
3317
+ headers: {
3318
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3319
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3320
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3321
+ [name: string]: unknown;
3322
+ };
3323
+ content: {
3324
+ "application/json": components["schemas"]["ProjectResponse"];
3325
+ };
3326
+ };
3327
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3328
+ 401: {
3329
+ headers: {
3330
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3331
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3332
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3333
+ [name: string]: unknown;
3334
+ };
3335
+ content: {
3336
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3337
+ };
3338
+ };
3339
+ /** @description Not Found */
3340
+ 404: {
3341
+ headers: {
3342
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3343
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3344
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3345
+ [name: string]: unknown;
3346
+ };
3347
+ content: {
3348
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3349
+ };
3350
+ };
3351
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3352
+ 429: {
3353
+ headers: {
3354
+ /** @description Number of seconds to wait before retrying the request. */
3355
+ "Retry-After"?: number;
3356
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3357
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3358
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3359
+ [name: string]: unknown;
3360
+ };
3361
+ content: {
3362
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3363
+ };
3364
+ };
3365
+ };
3366
+ };
3367
+ /**
3368
+ * Updates a project's name/description.
3369
+ * @description Requires at least Member.
3370
+ */
3371
+ put: {
3372
+ parameters: {
3373
+ query?: never;
3374
+ header?: never;
3375
+ path: {
3376
+ org: string;
3377
+ project: string;
3378
+ };
3379
+ cookie?: never;
3380
+ };
3381
+ requestBody?: {
3382
+ content: {
3383
+ "application/json": components["schemas"]["PublicUpdateProjectRequest"];
3384
+ "text/json": components["schemas"]["PublicUpdateProjectRequest"];
3385
+ "application/*+json": components["schemas"]["PublicUpdateProjectRequest"];
3386
+ };
3387
+ };
3388
+ responses: {
3389
+ /** @description No Content */
3390
+ 204: {
3391
+ headers: {
3392
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3393
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3394
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3395
+ [name: string]: unknown;
3396
+ };
3397
+ content?: never;
3398
+ };
3399
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3400
+ 401: {
3401
+ headers: {
3402
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3403
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3404
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3405
+ [name: string]: unknown;
3406
+ };
3407
+ content: {
3408
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3409
+ };
3410
+ };
3411
+ /** @description Forbidden */
3412
+ 403: {
3413
+ headers: {
3414
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3415
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3416
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3417
+ [name: string]: unknown;
3418
+ };
3419
+ content: {
3420
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3421
+ };
3422
+ };
3423
+ /** @description Not Found */
3424
+ 404: {
3425
+ headers: {
3426
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3427
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3428
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3429
+ [name: string]: unknown;
3430
+ };
3431
+ content: {
3432
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3433
+ };
3434
+ };
3435
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3436
+ 429: {
3437
+ headers: {
3438
+ /** @description Number of seconds to wait before retrying the request. */
3439
+ "Retry-After"?: number;
3440
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3441
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3442
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3443
+ [name: string]: unknown;
3444
+ };
3445
+ content: {
3446
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3447
+ };
3448
+ };
3449
+ };
3450
+ };
3451
+ post?: never;
3452
+ /**
3453
+ * Deletes a project.
3454
+ * @description Requires at least Member.
3455
+ */
3456
+ delete: {
3457
+ parameters: {
3458
+ query?: never;
3459
+ header?: never;
3460
+ path: {
3461
+ org: string;
3462
+ project: string;
3463
+ };
3464
+ cookie?: never;
3465
+ };
3466
+ requestBody?: never;
3467
+ responses: {
3468
+ /** @description No Content */
3469
+ 204: {
3470
+ headers: {
3471
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3472
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3473
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3474
+ [name: string]: unknown;
3475
+ };
3476
+ content?: never;
3477
+ };
3478
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3479
+ 401: {
3480
+ headers: {
3481
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3482
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3483
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3484
+ [name: string]: unknown;
3485
+ };
3486
+ content: {
3487
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3488
+ };
3489
+ };
3490
+ /** @description Forbidden */
3491
+ 403: {
3492
+ headers: {
3493
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3494
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3495
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3496
+ [name: string]: unknown;
3497
+ };
3498
+ content: {
3499
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3500
+ };
3501
+ };
3502
+ /** @description Not Found */
3503
+ 404: {
3504
+ headers: {
3505
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3506
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3507
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3508
+ [name: string]: unknown;
3509
+ };
3510
+ content: {
3511
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3512
+ };
3513
+ };
3514
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3515
+ 429: {
3516
+ headers: {
3517
+ /** @description Number of seconds to wait before retrying the request. */
3518
+ "Retry-After"?: number;
3519
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3520
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3521
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3522
+ [name: string]: unknown;
3523
+ };
3524
+ content: {
3525
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3526
+ };
3527
+ };
3528
+ };
3529
+ };
3530
+ options?: never;
3531
+ head?: never;
3532
+ patch?: never;
3533
+ trace?: never;
3534
+ };
3535
+ "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys": {
3536
+ parameters: {
3537
+ query?: never;
3538
+ header?: never;
3539
+ path?: never;
3540
+ cookie?: never;
3541
+ };
3542
+ /**
3543
+ * Lists SDK keys in the resolved environment, cursor-paginated.
3544
+ * @description Like
3545
+ * List, ListSdkKeysQuery has no
3546
+ * `Skip`/`Take` (an environment's key count is small), so this fetches the full
3547
+ * set and pages in-memory to still expose the standard cursor contract.
3548
+ */
3549
+ get: {
3550
+ parameters: {
3551
+ query?: {
3552
+ limit?: number;
3553
+ cursor?: string;
3554
+ };
3555
+ header?: never;
3556
+ path: {
3557
+ org: string;
3558
+ project: string;
3559
+ env: string;
3560
+ };
3561
+ cookie?: never;
3562
+ };
3563
+ requestBody?: never;
3564
+ responses: {
3565
+ /** @description OK */
3566
+ 200: {
3567
+ headers: {
3568
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3569
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3570
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3571
+ [name: string]: unknown;
3572
+ };
3573
+ content: {
3574
+ "application/json": components["schemas"]["PublicSdkKeyResponsePagedResult"];
3575
+ };
3576
+ };
3577
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3578
+ 401: {
3579
+ headers: {
3580
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3581
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3582
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3583
+ [name: string]: unknown;
3584
+ };
3585
+ content: {
3586
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3587
+ };
3588
+ };
3589
+ /** @description Not Found */
3590
+ 404: {
3591
+ headers: {
3592
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3593
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3594
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3595
+ [name: string]: unknown;
3596
+ };
3597
+ content: {
3598
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3599
+ };
3600
+ };
3601
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3602
+ 429: {
3603
+ headers: {
3604
+ /** @description Number of seconds to wait before retrying the request. */
3605
+ "Retry-After"?: number;
3606
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3607
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3608
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3609
+ [name: string]: unknown;
3610
+ };
3611
+ content: {
3612
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3613
+ };
3614
+ };
3615
+ };
3616
+ };
3617
+ put?: never;
3618
+ /**
3619
+ * Creates an SDK key in the resolved environment.
3620
+ * @description Requires at least Member. Returns the
3621
+ * plaintext key exactly once — see the type-level remarks.
2458
3622
  */
2459
- delete: {
3623
+ post: {
2460
3624
  parameters: {
2461
3625
  query?: never;
2462
3626
  header?: never;
2463
3627
  path: {
2464
3628
  org: string;
2465
3629
  project: string;
2466
- flag: string;
2467
- variationId: string;
3630
+ env: string;
2468
3631
  };
2469
3632
  cookie?: never;
2470
3633
  };
2471
- requestBody?: never;
3634
+ requestBody?: {
3635
+ content: {
3636
+ "application/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3637
+ "text/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3638
+ "application/*+json": components["schemas"]["PublicCreateSdkKeyRequest"];
3639
+ };
3640
+ };
2472
3641
  responses: {
2473
- /** @description No Content */
2474
- 204: {
3642
+ /** @description Created */
3643
+ 201: {
2475
3644
  headers: {
2476
3645
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2477
3646
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2478
3647
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2479
3648
  [name: string]: unknown;
2480
3649
  };
2481
- content?: never;
3650
+ content: {
3651
+ "application/json": components["schemas"]["PublicCreateSdkKeyResponse"];
3652
+ };
2482
3653
  };
2483
3654
  /** @description Bad Request */
2484
3655
  400: {
@@ -2544,24 +3715,30 @@ export interface paths {
2544
3715
  };
2545
3716
  };
2546
3717
  };
3718
+ delete?: never;
2547
3719
  options?: never;
2548
3720
  head?: never;
2549
3721
  patch?: never;
2550
3722
  trace?: never;
2551
3723
  };
2552
- "/api/v1/me": {
3724
+ "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys/{sdkKey}": {
2553
3725
  parameters: {
2554
3726
  query?: never;
2555
3727
  header?: never;
2556
3728
  path?: never;
2557
3729
  cookie?: never;
2558
3730
  };
2559
- /** Returns the authenticated caller's public identity (see MeResponse). */
3731
+ /** Gets an SDK key in the resolved environment by id (guid-only — see the type-level remarks). */
2560
3732
  get: {
2561
3733
  parameters: {
2562
3734
  query?: never;
2563
3735
  header?: never;
2564
- path?: never;
3736
+ path: {
3737
+ org: string;
3738
+ project: string;
3739
+ env: string;
3740
+ sdkKey: string;
3741
+ };
2565
3742
  cookie?: never;
2566
3743
  };
2567
3744
  requestBody?: never;
@@ -2575,10 +3752,10 @@ export interface paths {
2575
3752
  [name: string]: unknown;
2576
3753
  };
2577
3754
  content: {
2578
- "application/json": components["schemas"]["MeResponse"];
3755
+ "application/json": components["schemas"]["PublicSdkKeyResponse"];
2579
3756
  };
2580
3757
  };
2581
- /** @description Unauthorized */
3758
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2582
3759
  401: {
2583
3760
  headers: {
2584
3761
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
@@ -2590,6 +3767,18 @@ export interface paths {
2590
3767
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2591
3768
  };
2592
3769
  };
3770
+ /** @description Not Found */
3771
+ 404: {
3772
+ headers: {
3773
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3774
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3775
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3776
+ [name: string]: unknown;
3777
+ };
3778
+ content: {
3779
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3780
+ };
3781
+ };
2593
3782
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2594
3783
  429: {
2595
3784
  headers: {
@@ -2606,45 +3795,39 @@ export interface paths {
2606
3795
  };
2607
3796
  };
2608
3797
  };
2609
- put?: never;
2610
- post?: never;
2611
- delete?: never;
2612
- options?: never;
2613
- head?: never;
2614
- patch?: never;
2615
- trace?: never;
2616
- };
2617
- "/api/v1/orgs": {
2618
- parameters: {
2619
- query?: never;
2620
- header?: never;
2621
- path?: never;
2622
- cookie?: never;
2623
- };
2624
- /** Lists the caller's organizations, cursor-paginated. */
2625
- get: {
3798
+ /**
3799
+ * Updates an SDK key's name/description.
3800
+ * @description Requires at least Member. Type and key material are immutable via this endpoint.
3801
+ */
3802
+ put: {
2626
3803
  parameters: {
2627
- query?: {
2628
- limit?: number;
2629
- cursor?: string;
2630
- };
3804
+ query?: never;
2631
3805
  header?: never;
2632
- path?: never;
3806
+ path: {
3807
+ org: string;
3808
+ project: string;
3809
+ env: string;
3810
+ sdkKey: string;
3811
+ };
2633
3812
  cookie?: never;
2634
3813
  };
2635
- requestBody?: never;
3814
+ requestBody?: {
3815
+ content: {
3816
+ "application/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
3817
+ "text/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
3818
+ "application/*+json": components["schemas"]["PublicUpdateSdkKeyRequest"];
3819
+ };
3820
+ };
2636
3821
  responses: {
2637
- /** @description OK */
2638
- 200: {
3822
+ /** @description No Content */
3823
+ 204: {
2639
3824
  headers: {
2640
3825
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2641
3826
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2642
3827
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2643
3828
  [name: string]: unknown;
2644
3829
  };
2645
- content: {
2646
- "application/json": components["schemas"]["OrganizationResponsePagedResult"];
2647
- };
3830
+ content?: never;
2648
3831
  };
2649
3832
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
2650
3833
  401: {
@@ -2658,6 +3841,30 @@ export interface paths {
2658
3841
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2659
3842
  };
2660
3843
  };
3844
+ /** @description Forbidden */
3845
+ 403: {
3846
+ headers: {
3847
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3848
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3849
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3850
+ [name: string]: unknown;
3851
+ };
3852
+ content: {
3853
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3854
+ };
3855
+ };
3856
+ /** @description Not Found */
3857
+ 404: {
3858
+ headers: {
3859
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3860
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3861
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3862
+ [name: string]: unknown;
3863
+ };
3864
+ content: {
3865
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3866
+ };
3867
+ };
2661
3868
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2662
3869
  429: {
2663
3870
  headers: {
@@ -2674,7 +3881,6 @@ export interface paths {
2674
3881
  };
2675
3882
  };
2676
3883
  };
2677
- put?: never;
2678
3884
  post?: never;
2679
3885
  delete?: never;
2680
3886
  options?: never;
@@ -2682,36 +3888,42 @@ export interface paths {
2682
3888
  patch?: never;
2683
3889
  trace?: never;
2684
3890
  };
2685
- "/api/v1/orgs/{org}": {
3891
+ "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys/{sdkKey}/revoke": {
2686
3892
  parameters: {
2687
3893
  query?: never;
2688
3894
  header?: never;
2689
3895
  path?: never;
2690
3896
  cookie?: never;
2691
3897
  };
2692
- /** Gets one of the caller's organizations by slug or id. */
2693
- get: {
3898
+ get?: never;
3899
+ put?: never;
3900
+ /**
3901
+ * Revokes an SDK key.
3902
+ * @description Requires at least Member.
3903
+ */
3904
+ post: {
2694
3905
  parameters: {
2695
3906
  query?: never;
2696
3907
  header?: never;
2697
3908
  path: {
2698
3909
  org: string;
3910
+ project: string;
3911
+ env: string;
3912
+ sdkKey: string;
2699
3913
  };
2700
3914
  cookie?: never;
2701
3915
  };
2702
3916
  requestBody?: never;
2703
3917
  responses: {
2704
- /** @description OK */
2705
- 200: {
3918
+ /** @description No Content */
3919
+ 204: {
2706
3920
  headers: {
2707
3921
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2708
3922
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2709
3923
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2710
3924
  [name: string]: unknown;
2711
3925
  };
2712
- content: {
2713
- "application/json": components["schemas"]["OrganizationResponse"];
2714
- };
3926
+ content?: never;
2715
3927
  };
2716
3928
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
2717
3929
  401: {
@@ -2725,6 +3937,18 @@ export interface paths {
2725
3937
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2726
3938
  };
2727
3939
  };
3940
+ /** @description Forbidden */
3941
+ 403: {
3942
+ headers: {
3943
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3944
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3945
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3946
+ [name: string]: unknown;
3947
+ };
3948
+ content: {
3949
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3950
+ };
3951
+ };
2728
3952
  /** @description Not Found */
2729
3953
  404: {
2730
3954
  headers: {
@@ -2753,22 +3977,26 @@ export interface paths {
2753
3977
  };
2754
3978
  };
2755
3979
  };
2756
- put?: never;
2757
- post?: never;
2758
3980
  delete?: never;
2759
3981
  options?: never;
2760
3982
  head?: never;
2761
3983
  patch?: never;
2762
3984
  trace?: never;
2763
3985
  };
2764
- "/api/v1/orgs/{org}/projects": {
3986
+ "/api/v1/orgs/{org}/projects/{project}/segments": {
2765
3987
  parameters: {
2766
3988
  query?: never;
2767
3989
  header?: never;
2768
3990
  path?: never;
2769
3991
  cookie?: never;
2770
3992
  };
2771
- /** Lists projects in the resolved organization, cursor-paginated. */
3993
+ /**
3994
+ * Lists user segments in the resolved project, cursor-paginated.
3995
+ * @description Like
3996
+ * List, ListUserSegmentsQuery has no
3997
+ * `Skip`/`Take` (a project's segment count is small), so this fetches the full set
3998
+ * and pages in-memory to still expose the standard cursor contract.
3999
+ */
2772
4000
  get: {
2773
4001
  parameters: {
2774
4002
  query?: {
@@ -2778,6 +4006,7 @@ export interface paths {
2778
4006
  header?: never;
2779
4007
  path: {
2780
4008
  org: string;
4009
+ project: string;
2781
4010
  };
2782
4011
  cookie?: never;
2783
4012
  };
@@ -2792,7 +4021,7 @@ export interface paths {
2792
4021
  [name: string]: unknown;
2793
4022
  };
2794
4023
  content: {
2795
- "application/json": components["schemas"]["ProjectResponsePagedResult"];
4024
+ "application/json": components["schemas"]["PublicSegmentResponsePagedResult"];
2796
4025
  };
2797
4026
  };
2798
4027
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -2807,6 +4036,18 @@ export interface paths {
2807
4036
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2808
4037
  };
2809
4038
  };
4039
+ /** @description Not Found */
4040
+ 404: {
4041
+ headers: {
4042
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4043
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4044
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4045
+ [name: string]: unknown;
4046
+ };
4047
+ content: {
4048
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4049
+ };
4050
+ };
2810
4051
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2811
4052
  429: {
2812
4053
  headers: {
@@ -2825,8 +4066,12 @@ export interface paths {
2825
4066
  };
2826
4067
  put?: never;
2827
4068
  /**
2828
- * Creates a project in the resolved organization.
2829
- * @description Requires at least Member.
4069
+ * Creates a user segment in the resolved project.
4070
+ * @description Requires at least Member. Re-fetches via
4071
+ * ListUserSegmentsQuery (there is no single-segment query) and locates the new
4072
+ * segment by the id returned from CreateUserSegmentCommand so the response
4073
+ * reflects exactly what was persisted (e.g. server-assigned condition ids, folded into the
4074
+ * public shape via FromDto).
2830
4075
  */
2831
4076
  post: {
2832
4077
  parameters: {
@@ -2834,14 +4079,15 @@ export interface paths {
2834
4079
  header?: never;
2835
4080
  path: {
2836
4081
  org: string;
4082
+ project: string;
2837
4083
  };
2838
4084
  cookie?: never;
2839
4085
  };
2840
4086
  requestBody?: {
2841
4087
  content: {
2842
- "application/json": components["schemas"]["PublicCreateProjectRequest"];
2843
- "text/json": components["schemas"]["PublicCreateProjectRequest"];
2844
- "application/*+json": components["schemas"]["PublicCreateProjectRequest"];
4088
+ "application/json": components["schemas"]["PublicCreateSegmentRequest"];
4089
+ "text/json": components["schemas"]["PublicCreateSegmentRequest"];
4090
+ "application/*+json": components["schemas"]["PublicCreateSegmentRequest"];
2845
4091
  };
2846
4092
  };
2847
4093
  responses: {
@@ -2854,7 +4100,19 @@ export interface paths {
2854
4100
  [name: string]: unknown;
2855
4101
  };
2856
4102
  content: {
2857
- "application/json": components["schemas"]["ProjectResponse"];
4103
+ "application/json": components["schemas"]["PublicSegmentResponse"];
4104
+ };
4105
+ };
4106
+ /** @description Bad Request */
4107
+ 400: {
4108
+ headers: {
4109
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4110
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4111
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4112
+ [name: string]: unknown;
4113
+ };
4114
+ content: {
4115
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2858
4116
  };
2859
4117
  };
2860
4118
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -2881,6 +4139,18 @@ export interface paths {
2881
4139
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2882
4140
  };
2883
4141
  };
4142
+ /** @description Not Found */
4143
+ 404: {
4144
+ headers: {
4145
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4146
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4147
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4148
+ [name: string]: unknown;
4149
+ };
4150
+ content: {
4151
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4152
+ };
4153
+ };
2884
4154
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2885
4155
  429: {
2886
4156
  headers: {
@@ -2903,14 +4173,20 @@ export interface paths {
2903
4173
  patch?: never;
2904
4174
  trace?: never;
2905
4175
  };
2906
- "/api/v1/orgs/{org}/projects/{project}": {
4176
+ "/api/v1/orgs/{org}/projects/{project}/segments/{segment}": {
2907
4177
  parameters: {
2908
4178
  query?: never;
2909
4179
  header?: never;
2910
4180
  path?: never;
2911
4181
  cookie?: never;
2912
4182
  };
2913
- /** Gets a project in the resolved organization by key or id. */
4183
+ /**
4184
+ * Gets a user segment in the resolved project by key or id.
4185
+ * @description There is no
4186
+ * ListUserSegments-adjacent single-item
4187
+ * query, so this resolves `{segment}` then dispatches ListUserSegmentsQuery
4188
+ * and finds the match — see the type-level remarks for why a list+find is acceptable here.
4189
+ */
2914
4190
  get: {
2915
4191
  parameters: {
2916
4192
  query?: never;
@@ -2918,6 +4194,7 @@ export interface paths {
2918
4194
  path: {
2919
4195
  org: string;
2920
4196
  project: string;
4197
+ segment: string;
2921
4198
  };
2922
4199
  cookie?: never;
2923
4200
  };
@@ -2932,7 +4209,7 @@ export interface paths {
2932
4209
  [name: string]: unknown;
2933
4210
  };
2934
4211
  content: {
2935
- "application/json": components["schemas"]["ProjectResponse"];
4212
+ "application/json": components["schemas"]["PublicSegmentResponse"];
2936
4213
  };
2937
4214
  };
2938
4215
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -2976,8 +4253,8 @@ export interface paths {
2976
4253
  };
2977
4254
  };
2978
4255
  /**
2979
- * Updates a project's name/description.
2980
- * @description Requires at least Member.
4256
+ * Updates a segment's name/description/conditions.
4257
+ * @description Requires at least Member. The segment's key is immutable via this endpoint.
2981
4258
  */
2982
4259
  put: {
2983
4260
  parameters: {
@@ -2986,14 +4263,15 @@ export interface paths {
2986
4263
  path: {
2987
4264
  org: string;
2988
4265
  project: string;
4266
+ segment: string;
2989
4267
  };
2990
4268
  cookie?: never;
2991
4269
  };
2992
- requestBody?: {
2993
- content: {
2994
- "application/json": components["schemas"]["PublicUpdateProjectRequest"];
2995
- "text/json": components["schemas"]["PublicUpdateProjectRequest"];
2996
- "application/*+json": components["schemas"]["PublicUpdateProjectRequest"];
4270
+ requestBody?: {
4271
+ content: {
4272
+ "application/json": components["schemas"]["PublicUpdateSegmentRequest"];
4273
+ "text/json": components["schemas"]["PublicUpdateSegmentRequest"];
4274
+ "application/*+json": components["schemas"]["PublicUpdateSegmentRequest"];
2997
4275
  };
2998
4276
  };
2999
4277
  responses: {
@@ -3007,6 +4285,18 @@ export interface paths {
3007
4285
  };
3008
4286
  content?: never;
3009
4287
  };
4288
+ /** @description Bad Request */
4289
+ 400: {
4290
+ headers: {
4291
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4292
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4293
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4294
+ [name: string]: unknown;
4295
+ };
4296
+ content: {
4297
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4298
+ };
4299
+ };
3010
4300
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
3011
4301
  401: {
3012
4302
  headers: {
@@ -3061,7 +4351,7 @@ export interface paths {
3061
4351
  };
3062
4352
  post?: never;
3063
4353
  /**
3064
- * Deletes a project.
4354
+ * Deletes a user segment.
3065
4355
  * @description Requires at least Member.
3066
4356
  */
3067
4357
  delete: {
@@ -3071,6 +4361,7 @@ export interface paths {
3071
4361
  path: {
3072
4362
  org: string;
3073
4363
  project: string;
4364
+ segment: string;
3074
4365
  };
3075
4366
  cookie?: never;
3076
4367
  };
@@ -3143,7 +4434,7 @@ export interface paths {
3143
4434
  patch?: never;
3144
4435
  trace?: never;
3145
4436
  };
3146
- "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys": {
4437
+ "/api/v1/orgs/{org}/webhooks": {
3147
4438
  parameters: {
3148
4439
  query?: never;
3149
4440
  header?: never;
@@ -3151,11 +4442,8 @@ export interface paths {
3151
4442
  cookie?: never;
3152
4443
  };
3153
4444
  /**
3154
- * Lists SDK keys in the resolved environment, cursor-paginated.
3155
- * @description Like
3156
- * List, ListSdkKeysQuery has no
3157
- * `Skip`/`Take` (an environment's key count is small), so this fetches the full
3158
- * set and pages in-memory to still expose the standard cursor contract.
4445
+ * Lists the organization's webhook subscriptions, oldest first.
4446
+ * @description Requires Admin.
3159
4447
  */
3160
4448
  get: {
3161
4449
  parameters: {
@@ -3166,8 +4454,6 @@ export interface paths {
3166
4454
  header?: never;
3167
4455
  path: {
3168
4456
  org: string;
3169
- project: string;
3170
- env: string;
3171
4457
  };
3172
4458
  cookie?: never;
3173
4459
  };
@@ -3182,7 +4468,7 @@ export interface paths {
3182
4468
  [name: string]: unknown;
3183
4469
  };
3184
4470
  content: {
3185
- "application/json": components["schemas"]["PublicSdkKeyResponsePagedResult"];
4471
+ "application/json": components["schemas"]["PublicWebhookSubscriptionResponsePagedResult"];
3186
4472
  };
3187
4473
  };
3188
4474
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3197,6 +4483,18 @@ export interface paths {
3197
4483
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3198
4484
  };
3199
4485
  };
4486
+ /** @description Forbidden */
4487
+ 403: {
4488
+ headers: {
4489
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4490
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4491
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4492
+ [name: string]: unknown;
4493
+ };
4494
+ content: {
4495
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4496
+ };
4497
+ };
3200
4498
  /** @description Not Found */
3201
4499
  404: {
3202
4500
  headers: {
@@ -3227,9 +4525,9 @@ export interface paths {
3227
4525
  };
3228
4526
  put?: never;
3229
4527
  /**
3230
- * Creates an SDK key in the resolved environment.
3231
- * @description Requires at least Member. Returns the
3232
- * plaintext key exactly once — see the type-level remarks.
4528
+ * Creates a webhook subscription.
4529
+ * @description Requires Admin. The response carries the signing secret,
4530
+ * which is never shown again. Supports the `Idempotency-Key` header.
3233
4531
  */
3234
4532
  post: {
3235
4533
  parameters: {
@@ -3237,16 +4535,14 @@ export interface paths {
3237
4535
  header?: never;
3238
4536
  path: {
3239
4537
  org: string;
3240
- project: string;
3241
- env: string;
3242
4538
  };
3243
4539
  cookie?: never;
3244
4540
  };
3245
4541
  requestBody?: {
3246
4542
  content: {
3247
- "application/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3248
- "text/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3249
- "application/*+json": components["schemas"]["PublicCreateSdkKeyRequest"];
4543
+ "application/json": components["schemas"]["PublicCreateWebhookSubscriptionRequest"];
4544
+ "text/json": components["schemas"]["PublicCreateWebhookSubscriptionRequest"];
4545
+ "application/*+json": components["schemas"]["PublicCreateWebhookSubscriptionRequest"];
3250
4546
  };
3251
4547
  };
3252
4548
  responses: {
@@ -3259,7 +4555,7 @@ export interface paths {
3259
4555
  [name: string]: unknown;
3260
4556
  };
3261
4557
  content: {
3262
- "application/json": components["schemas"]["PublicCreateSdkKeyResponse"];
4558
+ "application/json": components["schemas"]["PublicCreateWebhookSubscriptionResponse"];
3263
4559
  };
3264
4560
  };
3265
4561
  /** @description Bad Request */
@@ -3332,23 +4628,23 @@ export interface paths {
3332
4628
  patch?: never;
3333
4629
  trace?: never;
3334
4630
  };
3335
- "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys/{sdkKey}": {
4631
+ "/api/v1/orgs/{org}/webhooks/event-types": {
3336
4632
  parameters: {
3337
4633
  query?: never;
3338
4634
  header?: never;
3339
4635
  path?: never;
3340
4636
  cookie?: never;
3341
4637
  };
3342
- /** Gets an SDK key in the resolved environment by id (guid-only — see the type-level remarks). */
4638
+ /**
4639
+ * Lists the event types a subscription can filter on.
4640
+ * @description Requires Admin.
4641
+ */
3343
4642
  get: {
3344
4643
  parameters: {
3345
4644
  query?: never;
3346
4645
  header?: never;
3347
4646
  path: {
3348
4647
  org: string;
3349
- project: string;
3350
- env: string;
3351
- sdkKey: string;
3352
4648
  };
3353
4649
  cookie?: never;
3354
4650
  };
@@ -3363,7 +4659,7 @@ export interface paths {
3363
4659
  [name: string]: unknown;
3364
4660
  };
3365
4661
  content: {
3366
- "application/json": components["schemas"]["PublicSdkKeyResponse"];
4662
+ "application/json": string[];
3367
4663
  };
3368
4664
  };
3369
4665
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3378,6 +4674,18 @@ export interface paths {
3378
4674
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3379
4675
  };
3380
4676
  };
4677
+ /** @description Forbidden */
4678
+ 403: {
4679
+ headers: {
4680
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4681
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4682
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4683
+ [name: string]: unknown;
4684
+ };
4685
+ content: {
4686
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4687
+ };
4688
+ };
3381
4689
  /** @description Not Found */
3382
4690
  404: {
3383
4691
  headers: {
@@ -3406,9 +4714,105 @@ export interface paths {
3406
4714
  };
3407
4715
  };
3408
4716
  };
4717
+ put?: never;
4718
+ post?: never;
4719
+ delete?: never;
4720
+ options?: never;
4721
+ head?: never;
4722
+ patch?: never;
4723
+ trace?: never;
4724
+ };
4725
+ "/api/v1/orgs/{org}/webhooks/{id}": {
4726
+ parameters: {
4727
+ query?: never;
4728
+ header?: never;
4729
+ path?: never;
4730
+ cookie?: never;
4731
+ };
3409
4732
  /**
3410
- * Updates an SDK key's name/description.
3411
- * @description Requires at least Member. Type and key material are immutable via this endpoint.
4733
+ * Gets a webhook subscription by id.
4734
+ * @description Requires Admin. Never returns secret values.
4735
+ */
4736
+ get: {
4737
+ parameters: {
4738
+ query?: never;
4739
+ header?: never;
4740
+ path: {
4741
+ org: string;
4742
+ id: string;
4743
+ };
4744
+ cookie?: never;
4745
+ };
4746
+ requestBody?: never;
4747
+ responses: {
4748
+ /** @description OK */
4749
+ 200: {
4750
+ headers: {
4751
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4752
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4753
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4754
+ [name: string]: unknown;
4755
+ };
4756
+ content: {
4757
+ "application/json": components["schemas"]["PublicWebhookSubscriptionResponse"];
4758
+ };
4759
+ };
4760
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
4761
+ 401: {
4762
+ headers: {
4763
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4764
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4765
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4766
+ [name: string]: unknown;
4767
+ };
4768
+ content: {
4769
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4770
+ };
4771
+ };
4772
+ /** @description Forbidden */
4773
+ 403: {
4774
+ headers: {
4775
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4776
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4777
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4778
+ [name: string]: unknown;
4779
+ };
4780
+ content: {
4781
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4782
+ };
4783
+ };
4784
+ /** @description Not Found */
4785
+ 404: {
4786
+ headers: {
4787
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4788
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4789
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4790
+ [name: string]: unknown;
4791
+ };
4792
+ content: {
4793
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4794
+ };
4795
+ };
4796
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
4797
+ 429: {
4798
+ headers: {
4799
+ /** @description Number of seconds to wait before retrying the request. */
4800
+ "Retry-After"?: number;
4801
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4802
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4803
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4804
+ [name: string]: unknown;
4805
+ };
4806
+ content: {
4807
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4808
+ };
4809
+ };
4810
+ };
4811
+ };
4812
+ /**
4813
+ * Replaces a webhook subscription's configuration.
4814
+ * @description Requires Admin. Omitted lists become empty,
4815
+ * which means "all".
3412
4816
  */
3413
4817
  put: {
3414
4818
  parameters: {
@@ -3416,17 +4820,15 @@ export interface paths {
3416
4820
  header?: never;
3417
4821
  path: {
3418
4822
  org: string;
3419
- project: string;
3420
- env: string;
3421
- sdkKey: string;
4823
+ id: string;
3422
4824
  };
3423
4825
  cookie?: never;
3424
4826
  };
3425
4827
  requestBody?: {
3426
4828
  content: {
3427
- "application/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
3428
- "text/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
3429
- "application/*+json": components["schemas"]["PublicUpdateSdkKeyRequest"];
4829
+ "application/json": components["schemas"]["PublicUpdateWebhookSubscriptionRequest"];
4830
+ "text/json": components["schemas"]["PublicUpdateWebhookSubscriptionRequest"];
4831
+ "application/*+json": components["schemas"]["PublicUpdateWebhookSubscriptionRequest"];
3430
4832
  };
3431
4833
  };
3432
4834
  responses: {
@@ -3440,6 +4842,18 @@ export interface paths {
3440
4842
  };
3441
4843
  content?: never;
3442
4844
  };
4845
+ /** @description Bad Request */
4846
+ 400: {
4847
+ headers: {
4848
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4849
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4850
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4851
+ [name: string]: unknown;
4852
+ };
4853
+ content: {
4854
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4855
+ };
4856
+ };
3443
4857
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
3444
4858
  401: {
3445
4859
  headers: {
@@ -3493,34 +4907,17 @@ export interface paths {
3493
4907
  };
3494
4908
  };
3495
4909
  post?: never;
3496
- delete?: never;
3497
- options?: never;
3498
- head?: never;
3499
- patch?: never;
3500
- trace?: never;
3501
- };
3502
- "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys/{sdkKey}/revoke": {
3503
- parameters: {
3504
- query?: never;
3505
- header?: never;
3506
- path?: never;
3507
- cookie?: never;
3508
- };
3509
- get?: never;
3510
- put?: never;
3511
4910
  /**
3512
- * Revokes an SDK key.
3513
- * @description Requires at least Member.
4911
+ * Deletes a webhook subscription with its secrets and delivery log.
4912
+ * @description Requires Admin.
3514
4913
  */
3515
- post: {
4914
+ delete: {
3516
4915
  parameters: {
3517
4916
  query?: never;
3518
4917
  header?: never;
3519
4918
  path: {
3520
4919
  org: string;
3521
- project: string;
3522
- env: string;
3523
- sdkKey: string;
4920
+ id: string;
3524
4921
  };
3525
4922
  cookie?: never;
3526
4923
  };
@@ -3588,43 +4985,41 @@ export interface paths {
3588
4985
  };
3589
4986
  };
3590
4987
  };
3591
- delete?: never;
3592
4988
  options?: never;
3593
4989
  head?: never;
3594
4990
  patch?: never;
3595
4991
  trace?: never;
3596
4992
  };
3597
- "/api/v1/orgs/{org}/projects/{project}/segments": {
4993
+ "/api/v1/orgs/{org}/webhooks/{id}/secrets": {
3598
4994
  parameters: {
3599
4995
  query?: never;
3600
4996
  header?: never;
3601
4997
  path?: never;
3602
4998
  cookie?: never;
3603
4999
  };
5000
+ get?: never;
5001
+ put?: never;
3604
5002
  /**
3605
- * Lists user segments in the resolved project, cursor-paginated.
3606
- * @description Like
3607
- * List, ListUserSegmentsQuery has no
3608
- * `Skip`/`Take` (a project's segment count is small), so this fetches the full set
3609
- * and pages in-memory to still expose the standard cursor contract.
5003
+ * Adds a new active signing secret.
5004
+ * @description Requires Admin. The previous secret keeps signing until
5005
+ * you retire it, so receivers can switch over without dropping deliveries. The response
5006
+ * carries the new secret, which is never shown again. Supports the `Idempotency-Key`
5007
+ * header.
3610
5008
  */
3611
- get: {
5009
+ post: {
3612
5010
  parameters: {
3613
- query?: {
3614
- limit?: number;
3615
- cursor?: string;
3616
- };
5011
+ query?: never;
3617
5012
  header?: never;
3618
5013
  path: {
3619
5014
  org: string;
3620
- project: string;
5015
+ id: string;
3621
5016
  };
3622
5017
  cookie?: never;
3623
5018
  };
3624
5019
  requestBody?: never;
3625
5020
  responses: {
3626
- /** @description OK */
3627
- 200: {
5021
+ /** @description Created */
5022
+ 201: {
3628
5023
  headers: {
3629
5024
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3630
5025
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -3632,7 +5027,7 @@ export interface paths {
3632
5027
  [name: string]: unknown;
3633
5028
  };
3634
5029
  content: {
3635
- "application/json": components["schemas"]["PublicSegmentResponsePagedResult"];
5030
+ "application/json": components["schemas"]["PublicRotateWebhookSecretResponse"];
3636
5031
  };
3637
5032
  };
3638
5033
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3647,6 +5042,18 @@ export interface paths {
3647
5042
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3648
5043
  };
3649
5044
  };
5045
+ /** @description Forbidden */
5046
+ 403: {
5047
+ headers: {
5048
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5049
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5050
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5051
+ [name: string]: unknown;
5052
+ };
5053
+ content: {
5054
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5055
+ };
5056
+ };
3650
5057
  /** @description Not Found */
3651
5058
  404: {
3652
5059
  headers: {
@@ -3675,44 +5082,49 @@ export interface paths {
3675
5082
  };
3676
5083
  };
3677
5084
  };
5085
+ delete?: never;
5086
+ options?: never;
5087
+ head?: never;
5088
+ patch?: never;
5089
+ trace?: never;
5090
+ };
5091
+ "/api/v1/orgs/{org}/webhooks/{id}/secrets/{secretId}": {
5092
+ parameters: {
5093
+ query?: never;
5094
+ header?: never;
5095
+ path?: never;
5096
+ cookie?: never;
5097
+ };
5098
+ get?: never;
3678
5099
  put?: never;
3679
- /**
3680
- * Creates a user segment in the resolved project.
3681
- * @description Requires at least Member. Re-fetches via
3682
- * ListUserSegmentsQuery (there is no single-segment query) and locates the new
3683
- * segment by the id returned from CreateUserSegmentCommand so the response
3684
- * reflects exactly what was persisted (e.g. server-assigned condition ids, folded into the
3685
- * public shape via FromDto).
5100
+ post?: never;
5101
+ /**
5102
+ * Retires a signing secret.
5103
+ * @description Requires Admin. Refused with a 400 when it is the subscription's
5104
+ * last active secret — rotate first.
3686
5105
  */
3687
- post: {
5106
+ delete: {
3688
5107
  parameters: {
3689
5108
  query?: never;
3690
5109
  header?: never;
3691
5110
  path: {
3692
5111
  org: string;
3693
- project: string;
5112
+ id: string;
5113
+ secretId: string;
3694
5114
  };
3695
5115
  cookie?: never;
3696
5116
  };
3697
- requestBody?: {
3698
- content: {
3699
- "application/json": components["schemas"]["PublicCreateSegmentRequest"];
3700
- "text/json": components["schemas"]["PublicCreateSegmentRequest"];
3701
- "application/*+json": components["schemas"]["PublicCreateSegmentRequest"];
3702
- };
3703
- };
5117
+ requestBody?: never;
3704
5118
  responses: {
3705
- /** @description Created */
3706
- 201: {
5119
+ /** @description No Content */
5120
+ 204: {
3707
5121
  headers: {
3708
5122
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3709
5123
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3710
5124
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3711
5125
  [name: string]: unknown;
3712
5126
  };
3713
- content: {
3714
- "application/json": components["schemas"]["PublicSegmentResponse"];
3715
- };
5127
+ content?: never;
3716
5128
  };
3717
5129
  /** @description Bad Request */
3718
5130
  400: {
@@ -3778,41 +5190,40 @@ export interface paths {
3778
5190
  };
3779
5191
  };
3780
5192
  };
3781
- delete?: never;
3782
5193
  options?: never;
3783
5194
  head?: never;
3784
5195
  patch?: never;
3785
5196
  trace?: never;
3786
5197
  };
3787
- "/api/v1/orgs/{org}/projects/{project}/segments/{segment}": {
5198
+ "/api/v1/orgs/{org}/webhooks/{id}/test": {
3788
5199
  parameters: {
3789
5200
  query?: never;
3790
5201
  header?: never;
3791
5202
  path?: never;
3792
5203
  cookie?: never;
3793
5204
  };
5205
+ get?: never;
5206
+ put?: never;
3794
5207
  /**
3795
- * Gets a user segment in the resolved project by key or id.
3796
- * @description There is no
3797
- * ListUserSegments-adjacent single-item
3798
- * query, so this resolves `{segment}` then dispatches ListUserSegmentsQuery
3799
- * and finds the match — see the type-level remarks for why a list+find is acceptable here.
5208
+ * Queues one synthetic `flag.toggled` event for this subscription alone.
5209
+ * @description Requires Admin.
5210
+ * Delivery is asynchronous — read the delivery log for the outcome. Refused with a 400 when
5211
+ * the subscription is disabled.
3800
5212
  */
3801
- get: {
5213
+ post: {
3802
5214
  parameters: {
3803
5215
  query?: never;
3804
5216
  header?: never;
3805
5217
  path: {
3806
5218
  org: string;
3807
- project: string;
3808
- segment: string;
5219
+ id: string;
3809
5220
  };
3810
5221
  cookie?: never;
3811
5222
  };
3812
5223
  requestBody?: never;
3813
5224
  responses: {
3814
- /** @description OK */
3815
- 200: {
5225
+ /** @description Accepted */
5226
+ 202: {
3816
5227
  headers: {
3817
5228
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3818
5229
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -3820,7 +5231,19 @@ export interface paths {
3820
5231
  [name: string]: unknown;
3821
5232
  };
3822
5233
  content: {
3823
- "application/json": components["schemas"]["PublicSegmentResponse"];
5234
+ "application/json": components["schemas"]["PublicTestWebhookSubscriptionResponse"];
5235
+ };
5236
+ };
5237
+ /** @description Bad Request */
5238
+ 400: {
5239
+ headers: {
5240
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5241
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5242
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5243
+ [name: string]: unknown;
5244
+ };
5245
+ content: {
5246
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3824
5247
  };
3825
5248
  };
3826
5249
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3835,6 +5258,18 @@ export interface paths {
3835
5258
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3836
5259
  };
3837
5260
  };
5261
+ /** @description Forbidden */
5262
+ 403: {
5263
+ headers: {
5264
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5265
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5266
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5267
+ [name: string]: unknown;
5268
+ };
5269
+ content: {
5270
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5271
+ };
5272
+ };
3838
5273
  /** @description Not Found */
3839
5274
  404: {
3840
5275
  headers: {
@@ -3863,41 +5298,40 @@ export interface paths {
3863
5298
  };
3864
5299
  };
3865
5300
  };
5301
+ delete?: never;
5302
+ options?: never;
5303
+ head?: never;
5304
+ patch?: never;
5305
+ trace?: never;
5306
+ };
5307
+ "/api/v1/orgs/{org}/webhooks/{id}/deliveries": {
5308
+ parameters: {
5309
+ query?: never;
5310
+ header?: never;
5311
+ path?: never;
5312
+ cookie?: never;
5313
+ };
3866
5314
  /**
3867
- * Updates a segment's name/description/conditions.
3868
- * @description Requires at least Member. The segment's key is immutable via this endpoint.
5315
+ * Lists a subscription's delivery attempts, most recent first.
5316
+ * @description Requires Admin.
3869
5317
  */
3870
- put: {
5318
+ get: {
3871
5319
  parameters: {
3872
- query?: never;
5320
+ query?: {
5321
+ limit?: number;
5322
+ cursor?: string;
5323
+ };
3873
5324
  header?: never;
3874
5325
  path: {
3875
5326
  org: string;
3876
- project: string;
3877
- segment: string;
5327
+ id: string;
3878
5328
  };
3879
5329
  cookie?: never;
3880
5330
  };
3881
- requestBody?: {
3882
- content: {
3883
- "application/json": components["schemas"]["PublicUpdateSegmentRequest"];
3884
- "text/json": components["schemas"]["PublicUpdateSegmentRequest"];
3885
- "application/*+json": components["schemas"]["PublicUpdateSegmentRequest"];
3886
- };
3887
- };
5331
+ requestBody?: never;
3888
5332
  responses: {
3889
- /** @description No Content */
3890
- 204: {
3891
- headers: {
3892
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3893
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3894
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3895
- [name: string]: unknown;
3896
- };
3897
- content?: never;
3898
- };
3899
- /** @description Bad Request */
3900
- 400: {
5333
+ /** @description OK */
5334
+ 200: {
3901
5335
  headers: {
3902
5336
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3903
5337
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -3905,7 +5339,7 @@ export interface paths {
3905
5339
  [name: string]: unknown;
3906
5340
  };
3907
5341
  content: {
3908
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5342
+ "application/json": components["schemas"]["PublicWebhookDeliveryResponsePagedResult"];
3909
5343
  };
3910
5344
  };
3911
5345
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3960,19 +5394,37 @@ export interface paths {
3960
5394
  };
3961
5395
  };
3962
5396
  };
5397
+ put?: never;
3963
5398
  post?: never;
5399
+ delete?: never;
5400
+ options?: never;
5401
+ head?: never;
5402
+ patch?: never;
5403
+ trace?: never;
5404
+ };
5405
+ "/api/v1/orgs/{org}/webhooks/{id}/deliveries/{deliveryId}/redeliver": {
5406
+ parameters: {
5407
+ query?: never;
5408
+ header?: never;
5409
+ path?: never;
5410
+ cookie?: never;
5411
+ };
5412
+ get?: never;
5413
+ put?: never;
3964
5414
  /**
3965
- * Deletes a user segment.
3966
- * @description Requires at least Member.
5415
+ * Queues a finished delivery (succeeded or dead-lettered) to be sent again, restarting its retry schedule.
5416
+ * @description Requires Admin. Refused with a 400 when the delivery is still pending, when
5417
+ * the subscription is disabled, or when the delivery's event belongs to a project the
5418
+ * subscription no longer covers.
3967
5419
  */
3968
- delete: {
5420
+ post: {
3969
5421
  parameters: {
3970
5422
  query?: never;
3971
5423
  header?: never;
3972
5424
  path: {
3973
5425
  org: string;
3974
- project: string;
3975
- segment: string;
5426
+ id: string;
5427
+ deliveryId: string;
3976
5428
  };
3977
5429
  cookie?: never;
3978
5430
  };
@@ -3988,6 +5440,18 @@ export interface paths {
3988
5440
  };
3989
5441
  content?: never;
3990
5442
  };
5443
+ /** @description Bad Request */
5444
+ 400: {
5445
+ headers: {
5446
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5447
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5448
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5449
+ [name: string]: unknown;
5450
+ };
5451
+ content: {
5452
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5453
+ };
5454
+ };
3991
5455
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
3992
5456
  401: {
3993
5457
  headers: {
@@ -4040,6 +5504,7 @@ export interface paths {
4040
5504
  };
4041
5505
  };
4042
5506
  };
5507
+ delete?: never;
4043
5508
  options?: never;
4044
5509
  head?: never;
4045
5510
  patch?: never;
@@ -4290,7 +5755,12 @@ export interface components {
4290
5755
  * schemaId-collision rationale (both controllers share one Swagger document). Type
4291
5756
  * is passed through verbatim to Type, which itself takes a
4292
5757
  * bare string (Boolean/String/Number/Json) rather than the domain enum — invalid values surface
4293
- * as the handler's own validation failure, not a controller-level 400.
5758
+ * as the handler's own validation failure, not a controller-level 400. ExpiresAtUtc is
5759
+ * optional and advisory; it must be in the future and requires the flag-expiration feature
5760
+ * (400 `EXPIRY_IN_PAST` / `FEATURE_NOT_ENABLED`). OwnerEmail optionally names
5761
+ * the owner (an active member, matched case-insensitively; requires the flag-ownership feature —
5762
+ * 400 `OWNER_NOT_MEMBER` / `FEATURE_NOT_ENABLED`). Omitted, the owner is the caller when
5763
+ * the caller is a member, so a service token creates an unowned flag.
4294
5764
  * @example {
4295
5765
  * "key": "new-checkout-flow",
4296
5766
  * "name": "New Checkout Flow",
@@ -4329,6 +5799,9 @@ export interface components {
4329
5799
  tags?: string[] | null;
4330
5800
  initialVariations?: components["schemas"]["PublicCreateVariationDto"][] | null;
4331
5801
  clientSideVisible?: boolean;
5802
+ /** Format: date-time */
5803
+ expiresAtUtc?: string | null;
5804
+ ownerEmail?: string | null;
4332
5805
  };
4333
5806
  /**
4334
5807
  * @description Request body for `POST /api/v1/orgs/{org}/projects`. Named distinctly from the
@@ -4479,6 +5952,53 @@ export interface components {
4479
5952
  value?: string | null;
4480
5953
  description?: string | null;
4481
5954
  };
5955
+ /**
5956
+ * @description Creates a webhook subscription. `provider` is `GenericHttp`. Omit `eventTypes`,
5957
+ * `projectIds` or `environmentIds` (or send an empty list) to receive every event,
5958
+ * project or environment. A token restricted to specific projects must list at least one project,
5959
+ * all of them within its allowlist.
5960
+ * @example {
5961
+ * "name": "Checkout flag changes to Slack relay",
5962
+ * "url": "https://hooks.acme.example/featureflip",
5963
+ * "provider": "GenericHttp",
5964
+ * "eventTypes": [
5965
+ * "flag.toggled",
5966
+ * "flag.updated"
5967
+ * ],
5968
+ * "projectIds": [
5969
+ * "0197b69f-1a2b-7c3d-8e4f-5a6b7c8d9e0f"
5970
+ * ],
5971
+ * "environmentIds": [
5972
+ * "0197b69f-2b3c-7d4e-9f5a-6b7c8d9e0f1a"
5973
+ * ]
5974
+ * }
5975
+ */
5976
+ PublicCreateWebhookSubscriptionRequest: {
5977
+ name?: string | null;
5978
+ url?: string | null;
5979
+ /**
5980
+ * @description Allowed values: GenericHttp.
5981
+ * @enum {string|null}
5982
+ */
5983
+ provider?: "GenericHttp" | null;
5984
+ eventTypes?: string[] | null;
5985
+ projectIds?: string[] | null;
5986
+ environmentIds?: string[] | null;
5987
+ };
5988
+ /**
5989
+ * @description The created subscription's id and its signing secret. The secret is shown only here.
5990
+ * @example {
5991
+ * "id": "0197b6a4-6f7a-7b8c-9d0e-1f2a3b4c5d6e",
5992
+ * "secret": "whsec_q2Vb8XJ1s0mYpZ4tK7wRr3uN9cL6aD5eF1gH2iJ3kL4=",
5993
+ * "warning": "Store this secret securely — it will not be shown again."
5994
+ * }
5995
+ */
5996
+ PublicCreateWebhookSubscriptionResponse: {
5997
+ /** Format: uuid */
5998
+ id?: string;
5999
+ secret?: string | null;
6000
+ warning?: string | null;
6001
+ };
4482
6002
  /**
4483
6003
  * @description Public representation of an environment, returned by
4484
6004
  * `GET /api/v1/orgs/{org}/projects/{project}/environments` (list),
@@ -4588,6 +6108,9 @@ export interface components {
4588
6108
  createdAt?: string;
4589
6109
  /** Format: date-time */
4590
6110
  updatedAt?: string;
6111
+ /** Format: date-time */
6112
+ expiresAtUtc?: string | null;
6113
+ owner?: components["schemas"]["PublicFlagOwner"];
4591
6114
  };
4592
6115
  /**
4593
6116
  * @description A page of results plus an opaque cursor for the next page, or null when this is the last
@@ -4621,6 +6144,13 @@ export interface components {
4621
6144
  [key: string]: components["schemas"]["ActionCapability"];
4622
6145
  };
4623
6146
  };
6147
+ /** @description A flag's owner as returned on flag reads. Null means the flag is unowned. */
6148
+ PublicFlagOwner: {
6149
+ /** Format: uuid */
6150
+ id?: string;
6151
+ email?: string | null;
6152
+ name?: string | null;
6153
+ };
4624
6154
  /**
4625
6155
  * @description One dead flag the Featureflip Flag Cleanup Action should remove, returned by
4626
6156
  * `GET .../flags/removal-candidates`. `Treatment` is the kill decision: true → keep the
@@ -4701,6 +6231,9 @@ export interface components {
4701
6231
  createdAt?: string;
4702
6232
  /** Format: date-time */
4703
6233
  updatedAt?: string;
6234
+ /** Format: date-time */
6235
+ expiresAtUtc?: string | null;
6236
+ owner?: components["schemas"]["PublicFlagOwner"];
4704
6237
  /** @description Capability hints: which operations the authenticated caller may perform on this resource, each with allowed + optional reason. Computed from the caller's role and the resource's state. Injected at runtime; safe to ignore. Present only on top-level resource responses — nested occurrences (e.g. a rule inside a targeting-config response) do not carry it. */
4705
6238
  _actions?: {
4706
6239
  [key: string]: components["schemas"]["ActionCapability"];
@@ -4738,6 +6271,13 @@ export interface components {
4738
6271
  PublicReorderRulesRequest: {
4739
6272
  ruleIds?: string[] | null;
4740
6273
  };
6274
+ /** @description A newly added signing secret. The secret is shown only here. */
6275
+ PublicRotateWebhookSecretResponse: {
6276
+ /** Format: uuid */
6277
+ secretId?: string;
6278
+ secret?: string | null;
6279
+ warning?: string | null;
6280
+ };
4741
6281
  /**
4742
6282
  * @description Public representation of an SDK key, returned by
4743
6283
  * `GET /api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys` (list) and
@@ -4862,6 +6402,25 @@ export interface components {
4862
6402
  [key: string]: components["schemas"]["ActionCapability"];
4863
6403
  };
4864
6404
  };
6405
+ /**
6406
+ * @description Request body for `PUT /api/v1/orgs/{org}/projects/{project}/flags/{flag}/expiry`. Expiry is a
6407
+ * dedicated sub-resource, deliberately NOT a field on PublicUpdateFeatureFlagRequest: that
6408
+ * PUT is a full replace, so a new nullable field there would let any client that doesn't know about
6409
+ * expiry (the Terraform provider included) wipe it on every update.
6410
+ */
6411
+ PublicSetFlagExpiryRequest: {
6412
+ /** Format: date-time */
6413
+ expiresAtUtc?: string;
6414
+ };
6415
+ /**
6416
+ * @description Request body for `PUT /api/v1/orgs/{org}/projects/{project}/flags/{flag}/owner`. A dedicated
6417
+ * sub-resource for the same reason as expiry: the main flag PUT is a full replace, so an owner field
6418
+ * there would let every client that doesn't know about owners wipe one. `email` must belong
6419
+ * to an active member of the organization (case-insensitive).
6420
+ */
6421
+ PublicSetFlagOwnerRequest: {
6422
+ email?: string | null;
6423
+ };
4865
6424
  /**
4866
6425
  * @description The full targeting configuration for a flag in a single environment, returned by
4867
6426
  * `GET .../targeting`. Maps 1:1 onto TargetingConfigurationDto — including
@@ -4925,6 +6484,13 @@ export interface components {
4925
6484
  [key: string]: components["schemas"]["ActionCapability"];
4926
6485
  };
4927
6486
  };
6487
+ /** @description The queued test event and its delivery. Poll the delivery log for the outcome. */
6488
+ PublicTestWebhookSubscriptionResponse: {
6489
+ /** Format: uuid */
6490
+ webhookEventId?: string;
6491
+ /** Format: uuid */
6492
+ webhookDeliveryId?: string;
6493
+ };
4928
6494
  /**
4929
6495
  * @description Request body for `POST .../flags/{flag}/environments/{env}/toggle`. Named distinctly from
4930
6496
  * the dashboard's own `ToggleFlagInEnvironmentRequest`
@@ -5049,6 +6615,18 @@ export interface components {
5049
6615
  value?: string | null;
5050
6616
  description?: string | null;
5051
6617
  };
6618
+ /**
6619
+ * @description Replaces a subscription's configuration (full replace — omitted lists become empty, meaning
6620
+ * "all"). `isEnabled` is required. The provider cannot be changed.
6621
+ */
6622
+ PublicUpdateWebhookSubscriptionRequest: {
6623
+ name?: string | null;
6624
+ url?: string | null;
6625
+ eventTypes?: string[] | null;
6626
+ projectIds?: string[] | null;
6627
+ environmentIds?: string[] | null;
6628
+ isEnabled?: boolean | null;
6629
+ };
5052
6630
  /**
5053
6631
  * @description A single variation on a flag, as returned in Variations.
5054
6632
  * @example {
@@ -5071,6 +6649,121 @@ export interface components {
5071
6649
  [key: string]: components["schemas"]["ActionCapability"];
5072
6650
  };
5073
6651
  };
6652
+ /**
6653
+ * @description One delivery attempt record. `status` is `Pending` (awaiting its first attempt,
6654
+ * backing off, or in flight), `Succeeded` or `DeadLettered`.
6655
+ */
6656
+ PublicWebhookDeliveryResponse: {
6657
+ /** Format: uuid */
6658
+ id?: string;
6659
+ /** Format: uuid */
6660
+ webhookEventId?: string;
6661
+ /**
6662
+ * @description Allowed values: Pending, Succeeded, DeadLettered.
6663
+ * @enum {string|null}
6664
+ */
6665
+ status?: "Pending" | "Succeeded" | "DeadLettered" | null;
6666
+ /** Format: int32 */
6667
+ attemptCount?: number;
6668
+ /** Format: date-time */
6669
+ nextAttemptAt?: string;
6670
+ /** Format: int32 */
6671
+ lastResponseStatusCode?: number | null;
6672
+ lastError?: string | null;
6673
+ /** Format: date-time */
6674
+ completedAt?: string | null;
6675
+ /** Format: date-time */
6676
+ createdAt?: string;
6677
+ };
6678
+ /**
6679
+ * @description A page of results plus an opaque cursor for the next page, or null when this is the last
6680
+ * page. Wire keys are frozen: `items` (already lowercase under the camelCase policy) and
6681
+ * `next_cursor` (pinned explicitly — the policy alone would emit `nextCursor`).
6682
+ */
6683
+ PublicWebhookDeliveryResponsePagedResult: {
6684
+ items?: components["schemas"]["PublicWebhookDeliveryResponse"][] | null;
6685
+ next_cursor?: string | null;
6686
+ };
6687
+ /** @description A signing secret's id and lifecycle. A secret with no `retiredAt` is active and signs every delivery. */
6688
+ PublicWebhookSecretResponse: {
6689
+ /** Format: uuid */
6690
+ id?: string;
6691
+ /** Format: date-time */
6692
+ createdAt?: string;
6693
+ /** Format: date-time */
6694
+ retiredAt?: string | null;
6695
+ };
6696
+ /**
6697
+ * @description A webhook subscription. Never carries secret material: signing secrets are listed by id and
6698
+ * lifecycle only — the value itself is returned once, when it is created or rotated.
6699
+ * @example {
6700
+ * "id": "0197b6a4-6f7a-7b8c-9d0e-1f2a3b4c5d6e",
6701
+ * "name": "Checkout flag changes to Slack relay",
6702
+ * "url": "https://hooks.acme.example/featureflip",
6703
+ * "provider": "GenericHttp",
6704
+ * "isEnabled": true,
6705
+ * "eventTypes": [
6706
+ * "flag.toggled",
6707
+ * "flag.updated"
6708
+ * ],
6709
+ * "projectIds": [
6710
+ * "0197b69f-1a2b-7c3d-8e4f-5a6b7c8d9e0f"
6711
+ * ],
6712
+ * "environmentIds": [
6713
+ * "0197b69f-2b3c-7d4e-9f5a-6b7c8d9e0f1a"
6714
+ * ],
6715
+ * "consecutiveFailureCount": 0,
6716
+ * "createdAt": "2026-06-01T12:00:00Z",
6717
+ * "updatedAt": "2026-06-15T08:30:00Z",
6718
+ * "secrets": [
6719
+ * {
6720
+ * "id": "0197b6a4-7a8b-7c9d-8e0f-2a3b4c5d6e7f",
6721
+ * "createdAt": "2026-06-01T12:00:00Z"
6722
+ * }
6723
+ * ]
6724
+ * }
6725
+ */
6726
+ PublicWebhookSubscriptionResponse: {
6727
+ /** Format: uuid */
6728
+ id?: string;
6729
+ name?: string | null;
6730
+ url?: string | null;
6731
+ /**
6732
+ * @description Allowed values: GenericHttp.
6733
+ * @enum {string|null}
6734
+ */
6735
+ provider?: "GenericHttp" | null;
6736
+ isEnabled?: boolean;
6737
+ eventTypes?: string[] | null;
6738
+ projectIds?: string[] | null;
6739
+ environmentIds?: string[] | null;
6740
+ /** Format: int32 */
6741
+ consecutiveFailureCount?: number;
6742
+ /** Format: date-time */
6743
+ autoDisabledAt?: string | null;
6744
+ /** Format: date-time */
6745
+ createdAt?: string;
6746
+ /** Format: date-time */
6747
+ updatedAt?: string;
6748
+ secrets?: components["schemas"]["PublicWebhookSecretResponse"][] | null;
6749
+ /** @description Capability hints: which operations the authenticated caller may perform on this resource, each with allowed + optional reason. Computed from the caller's role and the resource's state. Injected at runtime; safe to ignore. Present only on top-level resource responses — nested occurrences (e.g. a rule inside a targeting-config response) do not carry it. */
6750
+ _actions?: {
6751
+ [key: string]: components["schemas"]["ActionCapability"];
6752
+ };
6753
+ };
6754
+ /**
6755
+ * @description A page of results plus an opaque cursor for the next page, or null when this is the last
6756
+ * page. Wire keys are frozen: `items` (already lowercase under the camelCase policy) and
6757
+ * `next_cursor` (pinned explicitly — the policy alone would emit `nextCursor`).
6758
+ */
6759
+ PublicWebhookSubscriptionResponsePagedResult: {
6760
+ items?: components["schemas"]["PublicWebhookSubscriptionResponse"][] | null;
6761
+ next_cursor?: string | null;
6762
+ /** @description Capability hints: which operations the authenticated caller may perform on this resource, each with allowed + optional reason. Computed from the caller's role and the resource's state. Injected at runtime; safe to ignore. Present only on top-level resource responses — nested occurrences (e.g. a rule inside a targeting-config response) do not carry it. */
6763
+ _actions?: {
6764
+ [key: string]: components["schemas"]["ActionCapability"];
6765
+ };
6766
+ };
5074
6767
  };
5075
6768
  responses: never;
5076
6769
  parameters: never;