@featureflip/mcp 0.1.7 → 0.1.9

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,18 @@ 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. `expiresAtUtc` takes a
997
+ * date (`2026-12-01`), which means the end of that day in UTC, the same as picking it in the
998
+ * dashboard, or a full ISO-8601 timestamp, which is stored exactly. It must be in the future
999
+ * (400 `EXPIRY_IN_PAST`), so today's date is accepted, and the flag-expiration feature must
1000
+ * be enabled (400 `FEATURE_NOT_ENABLED`).
995
1001
  */
996
- post: {
1002
+ put: {
997
1003
  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
- };
1004
+ query?: never;
1006
1005
  header?: never;
1007
1006
  path: {
1008
1007
  org: string;
@@ -1011,7 +1010,13 @@ export interface paths {
1011
1010
  };
1012
1011
  cookie?: never;
1013
1012
  };
1014
- requestBody?: never;
1013
+ requestBody?: {
1014
+ content: {
1015
+ "application/json": components["schemas"]["PublicSetFlagExpiryRequest"];
1016
+ "text/json": components["schemas"]["PublicSetFlagExpiryRequest"];
1017
+ "application/*+json": components["schemas"]["PublicSetFlagExpiryRequest"];
1018
+ };
1019
+ };
1015
1020
  responses: {
1016
1021
  /** @description No Content */
1017
1022
  204: {
@@ -1087,26 +1092,13 @@ export interface paths {
1087
1092
  };
1088
1093
  };
1089
1094
  };
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;
1095
+ post?: never;
1105
1096
  /**
1106
- * Restores a previously archived flag.
1107
- * @description Requires at least Member.
1097
+ * Removes the flag's expiry date.
1098
+ * @description Requires at least Member. Always allowed, even when
1099
+ * the flag-expiration feature is disabled.
1108
1100
  */
1109
- post: {
1101
+ delete: {
1110
1102
  parameters: {
1111
1103
  query?: never;
1112
1104
  header?: never;
@@ -1181,21 +1173,26 @@ export interface paths {
1181
1173
  };
1182
1174
  };
1183
1175
  };
1184
- delete?: never;
1185
1176
  options?: never;
1186
1177
  head?: never;
1187
1178
  patch?: never;
1188
1179
  trace?: never;
1189
1180
  };
1190
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments": {
1181
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/owner": {
1191
1182
  parameters: {
1192
1183
  query?: never;
1193
1184
  header?: never;
1194
1185
  path?: never;
1195
1186
  cookie?: never;
1196
1187
  };
1197
- /** Gets the resolved flag's config in every environment of the resolved project. */
1198
- get: {
1188
+ get?: never;
1189
+ /**
1190
+ * Assigns the flag's owner by email.
1191
+ * @description Requires at least Member. The email must belong to an
1192
+ * active member of the organization (400 `OWNER_NOT_MEMBER`) and the flag-ownership feature
1193
+ * must be enabled (400 `FEATURE_NOT_ENABLED`).
1194
+ */
1195
+ put: {
1199
1196
  parameters: {
1200
1197
  query?: never;
1201
1198
  header?: never;
@@ -1206,10 +1203,26 @@ export interface paths {
1206
1203
  };
1207
1204
  cookie?: never;
1208
1205
  };
1209
- requestBody?: never;
1206
+ requestBody?: {
1207
+ content: {
1208
+ "application/json": components["schemas"]["PublicSetFlagOwnerRequest"];
1209
+ "text/json": components["schemas"]["PublicSetFlagOwnerRequest"];
1210
+ "application/*+json": components["schemas"]["PublicSetFlagOwnerRequest"];
1211
+ };
1212
+ };
1210
1213
  responses: {
1211
- /** @description OK */
1212
- 200: {
1214
+ /** @description No Content */
1215
+ 204: {
1216
+ headers: {
1217
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1218
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1219
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1220
+ [name: string]: unknown;
1221
+ };
1222
+ content?: never;
1223
+ };
1224
+ /** @description Bad Request */
1225
+ 400: {
1213
1226
  headers: {
1214
1227
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1215
1228
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -1217,7 +1230,7 @@ export interface paths {
1217
1230
  [name: string]: unknown;
1218
1231
  };
1219
1232
  content: {
1220
- "application/json": components["schemas"]["PublicFlagEnvConfigResponse"][];
1233
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1221
1234
  };
1222
1235
  };
1223
1236
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -1232,6 +1245,18 @@ export interface paths {
1232
1245
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1233
1246
  };
1234
1247
  };
1248
+ /** @description Forbidden */
1249
+ 403: {
1250
+ headers: {
1251
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1252
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1253
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1254
+ [name: string]: unknown;
1255
+ };
1256
+ content: {
1257
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1258
+ };
1259
+ };
1235
1260
  /** @description Not Found */
1236
1261
  404: {
1237
1262
  headers: {
@@ -1260,29 +1285,13 @@ export interface paths {
1260
1285
  };
1261
1286
  };
1262
1287
  };
1263
- put?: never;
1264
1288
  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
1289
  /**
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.
1290
+ * Leaves the flag unowned.
1291
+ * @description Requires at least Member. Always allowed, even when the
1292
+ * flag-ownership feature is disabled.
1284
1293
  */
1285
- get: {
1294
+ delete: {
1286
1295
  parameters: {
1287
1296
  query?: never;
1288
1297
  header?: never;
@@ -1290,23 +1299,20 @@ export interface paths {
1290
1299
  org: string;
1291
1300
  project: string;
1292
1301
  flag: string;
1293
- env: string;
1294
1302
  };
1295
1303
  cookie?: never;
1296
1304
  };
1297
1305
  requestBody?: never;
1298
1306
  responses: {
1299
- /** @description OK */
1300
- 200: {
1307
+ /** @description No Content */
1308
+ 204: {
1301
1309
  headers: {
1302
1310
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1303
1311
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1304
1312
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1305
1313
  [name: string]: unknown;
1306
1314
  };
1307
- content: {
1308
- "application/json": components["schemas"]["PublicFlagEnvConfigResponse"];
1309
- };
1315
+ content?: never;
1310
1316
  };
1311
1317
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
1312
1318
  401: {
@@ -1320,6 +1326,18 @@ export interface paths {
1320
1326
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1321
1327
  };
1322
1328
  };
1329
+ /** @description Forbidden */
1330
+ 403: {
1331
+ headers: {
1332
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1333
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1334
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1335
+ [name: string]: unknown;
1336
+ };
1337
+ content: {
1338
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1339
+ };
1340
+ };
1323
1341
  /** @description Not Found */
1324
1342
  404: {
1325
1343
  headers: {
@@ -1348,11 +1366,23 @@ export interface paths {
1348
1366
  };
1349
1367
  };
1350
1368
  };
1369
+ options?: never;
1370
+ head?: never;
1371
+ patch?: never;
1372
+ trace?: never;
1373
+ };
1374
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/removal-pr": {
1375
+ parameters: {
1376
+ query?: never;
1377
+ header?: never;
1378
+ path?: never;
1379
+ cookie?: never;
1380
+ };
1381
+ get?: never;
1351
1382
  /**
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.
1383
+ * Records the pull request that removes this flag from code, so the flag's owner is sent a link to it.
1384
+ * @description Called by the Featureflip Flag Cleanup Action. Requires at least Member. The URL
1385
+ * must be an https pull request URL (400 `validation_failed`).
1356
1386
  */
1357
1387
  put: {
1358
1388
  parameters: {
@@ -1362,15 +1392,14 @@ export interface paths {
1362
1392
  org: string;
1363
1393
  project: string;
1364
1394
  flag: string;
1365
- env: string;
1366
1395
  };
1367
1396
  cookie?: never;
1368
1397
  };
1369
1398
  requestBody?: {
1370
1399
  content: {
1371
- "application/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1372
- "text/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1373
- "application/*+json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1400
+ "application/json": components["schemas"]["PublicSetFlagRemovalPrRequest"];
1401
+ "text/json": components["schemas"]["PublicSetFlagRemovalPrRequest"];
1402
+ "application/*+json": components["schemas"]["PublicSetFlagRemovalPrRequest"];
1374
1403
  };
1375
1404
  };
1376
1405
  responses: {
@@ -1449,26 +1478,11 @@ export interface paths {
1449
1478
  };
1450
1479
  };
1451
1480
  post?: never;
1452
- delete?: never;
1453
- options?: never;
1454
- head?: never;
1455
- patch?: never;
1456
- trace?: never;
1457
- };
1458
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/toggle": {
1459
- parameters: {
1460
- query?: never;
1461
- header?: never;
1462
- path?: never;
1463
- cookie?: never;
1464
- };
1465
- get?: never;
1466
- put?: never;
1467
1481
  /**
1468
- * Enables or disables the resolved flag in a resolved environment.
1482
+ * Forgets the flag's removal pull request.
1469
1483
  * @description Requires at least Member.
1470
1484
  */
1471
- post: {
1485
+ delete: {
1472
1486
  parameters: {
1473
1487
  query?: never;
1474
1488
  header?: never;
@@ -1476,17 +1490,10 @@ export interface paths {
1476
1490
  org: string;
1477
1491
  project: string;
1478
1492
  flag: string;
1479
- env: string;
1480
1493
  };
1481
1494
  cookie?: never;
1482
1495
  };
1483
- requestBody?: {
1484
- content: {
1485
- "application/json": components["schemas"]["PublicToggleFlagRequest"];
1486
- "text/json": components["schemas"]["PublicToggleFlagRequest"];
1487
- "application/*+json": components["schemas"]["PublicToggleFlagRequest"];
1488
- };
1489
- };
1496
+ requestBody?: never;
1490
1497
  responses: {
1491
1498
  /** @description No Content */
1492
1499
  204: {
@@ -1498,18 +1505,6 @@ export interface paths {
1498
1505
  };
1499
1506
  content?: never;
1500
1507
  };
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
1508
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
1514
1509
  401: {
1515
1510
  headers: {
@@ -1562,42 +1557,56 @@ export interface paths {
1562
1557
  };
1563
1558
  };
1564
1559
  };
1565
- delete?: never;
1566
1560
  options?: never;
1567
1561
  head?: never;
1568
1562
  patch?: never;
1569
1563
  trace?: never;
1570
1564
  };
1571
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/targeting": {
1565
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/archive": {
1572
1566
  parameters: {
1573
1567
  query?: never;
1574
1568
  header?: never;
1575
1569
  path?: never;
1576
1570
  cookie?: never;
1577
1571
  };
1572
+ get?: never;
1573
+ put?: never;
1578
1574
  /**
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.
1575
+ * Archives a flag.
1576
+ * @description Requires at least Member.
1584
1577
  */
1585
- get: {
1578
+ post: {
1586
1579
  parameters: {
1587
- query?: never;
1580
+ query?: {
1581
+ /**
1582
+ * @description Archive even though live traffic is still evaluating the flag. Without it the request is
1583
+ * refused with `FLAG_RECENTLY_EVALUATED` naming the environments still reading it — which
1584
+ * usually means the removal has merged but not yet deployed.
1585
+ */
1586
+ force?: boolean;
1587
+ };
1588
1588
  header?: never;
1589
1589
  path: {
1590
1590
  org: string;
1591
1591
  project: string;
1592
1592
  flag: string;
1593
- env: string;
1594
1593
  };
1595
1594
  cookie?: never;
1596
1595
  };
1597
1596
  requestBody?: never;
1598
1597
  responses: {
1599
- /** @description OK */
1600
- 200: {
1598
+ /** @description No Content */
1599
+ 204: {
1600
+ headers: {
1601
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1602
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1603
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1604
+ [name: string]: unknown;
1605
+ };
1606
+ content?: never;
1607
+ };
1608
+ /** @description Bad Request */
1609
+ 400: {
1601
1610
  headers: {
1602
1611
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1603
1612
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -1605,7 +1614,7 @@ export interface paths {
1605
1614
  [name: string]: unknown;
1606
1615
  };
1607
1616
  content: {
1608
- "application/json": components["schemas"]["PublicTargetingConfigResponse"];
1617
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1609
1618
  };
1610
1619
  };
1611
1620
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -1620,6 +1629,18 @@ export interface paths {
1620
1629
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1621
1630
  };
1622
1631
  };
1632
+ /** @description Forbidden */
1633
+ 403: {
1634
+ headers: {
1635
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1636
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1637
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1638
+ [name: string]: unknown;
1639
+ };
1640
+ content: {
1641
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1642
+ };
1643
+ };
1623
1644
  /** @description Not Found */
1624
1645
  404: {
1625
1646
  headers: {
@@ -1648,13 +1669,26 @@ export interface paths {
1648
1669
  };
1649
1670
  };
1650
1671
  };
1672
+ delete?: never;
1673
+ options?: never;
1674
+ head?: never;
1675
+ patch?: never;
1676
+ trace?: never;
1677
+ };
1678
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/restore": {
1679
+ parameters: {
1680
+ query?: never;
1681
+ header?: never;
1682
+ path?: never;
1683
+ cookie?: never;
1684
+ };
1685
+ get?: never;
1686
+ put?: never;
1651
1687
  /**
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.
1688
+ * Restores a previously archived flag.
1689
+ * @description Requires at least Member.
1656
1690
  */
1657
- put: {
1691
+ post: {
1658
1692
  parameters: {
1659
1693
  query?: never;
1660
1694
  header?: never;
@@ -1662,17 +1696,10 @@ export interface paths {
1662
1696
  org: string;
1663
1697
  project: string;
1664
1698
  flag: string;
1665
- env: string;
1666
1699
  };
1667
1700
  cookie?: never;
1668
1701
  };
1669
- requestBody?: {
1670
- content: {
1671
- "application/json": components["schemas"]["PublicPutTargetingRequest"];
1672
- "text/json": components["schemas"]["PublicPutTargetingRequest"];
1673
- "application/*+json": components["schemas"]["PublicPutTargetingRequest"];
1674
- };
1675
- };
1702
+ requestBody?: never;
1676
1703
  responses: {
1677
1704
  /** @description No Content */
1678
1705
  204: {
@@ -1684,18 +1711,6 @@ export interface paths {
1684
1711
  };
1685
1712
  content?: never;
1686
1713
  };
1687
- /** @description Bad Request */
1688
- 400: {
1689
- headers: {
1690
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1691
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1692
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1693
- [name: string]: unknown;
1694
- };
1695
- content: {
1696
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1697
- };
1698
- };
1699
1714
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
1700
1715
  401: {
1701
1716
  headers: {
@@ -1748,30 +1763,21 @@ export interface paths {
1748
1763
  };
1749
1764
  };
1750
1765
  };
1751
- post?: never;
1752
1766
  delete?: never;
1753
1767
  options?: never;
1754
1768
  head?: never;
1755
1769
  patch?: never;
1756
1770
  trace?: never;
1757
1771
  };
1758
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules": {
1772
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments": {
1759
1773
  parameters: {
1760
1774
  query?: never;
1761
1775
  header?: never;
1762
1776
  path?: never;
1763
1777
  cookie?: never;
1764
1778
  };
1765
- get?: never;
1766
- put?: never;
1767
- /**
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).
1773
- */
1774
- post: {
1779
+ /** Gets the resolved flag's config in every environment of the resolved project. */
1780
+ get: {
1775
1781
  parameters: {
1776
1782
  query?: never;
1777
1783
  header?: never;
@@ -1779,32 +1785,13 @@ export interface paths {
1779
1785
  org: string;
1780
1786
  project: string;
1781
1787
  flag: string;
1782
- env: string;
1783
1788
  };
1784
1789
  cookie?: never;
1785
1790
  };
1786
- requestBody?: {
1787
- content: {
1788
- "application/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
1789
- "text/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
1790
- "application/*+json": components["schemas"]["PublicCreateTargetingRuleRequest"];
1791
- };
1792
- };
1791
+ requestBody?: never;
1793
1792
  responses: {
1794
- /** @description Created */
1795
- 201: {
1796
- headers: {
1797
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1798
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1799
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1800
- [name: string]: unknown;
1801
- };
1802
- content: {
1803
- "application/json": components["schemas"]["PublicTargetingRuleResponse"];
1804
- };
1805
- };
1806
- /** @description Bad Request */
1807
- 400: {
1793
+ /** @description OK */
1794
+ 200: {
1808
1795
  headers: {
1809
1796
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1810
1797
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -1812,7 +1799,7 @@ export interface paths {
1812
1799
  [name: string]: unknown;
1813
1800
  };
1814
1801
  content: {
1815
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1802
+ "application/json": components["schemas"]["PublicFlagEnvConfigResponse"][];
1816
1803
  };
1817
1804
  };
1818
1805
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -1827,18 +1814,6 @@ export interface paths {
1827
1814
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1828
1815
  };
1829
1816
  };
1830
- /** @description Forbidden */
1831
- 403: {
1832
- headers: {
1833
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
1834
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
1835
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
1836
- [name: string]: unknown;
1837
- };
1838
- content: {
1839
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
1840
- };
1841
- };
1842
1817
  /** @description Not Found */
1843
1818
  404: {
1844
1819
  headers: {
@@ -1867,20 +1842,28 @@ export interface paths {
1867
1842
  };
1868
1843
  };
1869
1844
  };
1845
+ put?: never;
1846
+ post?: never;
1870
1847
  delete?: never;
1871
1848
  options?: never;
1872
1849
  head?: never;
1873
1850
  patch?: never;
1874
1851
  trace?: never;
1875
1852
  };
1876
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/{ruleId}": {
1853
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}": {
1877
1854
  parameters: {
1878
1855
  query?: never;
1879
1856
  header?: never;
1880
1857
  path?: never;
1881
1858
  cookie?: never;
1882
1859
  };
1883
- /** Gets a single targeting rule on the resolved flag in the resolved environment by id. */
1860
+ /**
1861
+ * Gets the resolved flag's config in a single resolved environment.
1862
+ * @description There is no
1863
+ * single-environment query on the Application side, so this dispatches the same
1864
+ * GetFlagEnvironmentConfigurationsQuery as GetAll and finds the
1865
+ * resolved environment by id.
1866
+ */
1884
1867
  get: {
1885
1868
  parameters: {
1886
1869
  query?: never;
@@ -1890,7 +1873,6 @@ export interface paths {
1890
1873
  project: string;
1891
1874
  flag: string;
1892
1875
  env: string;
1893
- ruleId: string;
1894
1876
  };
1895
1877
  cookie?: never;
1896
1878
  };
@@ -1905,7 +1887,7 @@ export interface paths {
1905
1887
  [name: string]: unknown;
1906
1888
  };
1907
1889
  content: {
1908
- "application/json": components["schemas"]["PublicTargetingRuleResponse"];
1890
+ "application/json": components["schemas"]["PublicFlagEnvConfigResponse"];
1909
1891
  };
1910
1892
  };
1911
1893
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -1949,8 +1931,10 @@ export interface paths {
1949
1931
  };
1950
1932
  };
1951
1933
  /**
1952
- * Updates a targeting rule's variation/description/rollout/segment/conditions wholesale.
1953
- * @description Requires at least Member.
1934
+ * Updates the resolved flag's default variation, strategy, and (optionally) prerequisites in a resolved environment.
1935
+ * @description Requires at least Member. A null
1936
+ * Prerequisites leaves prerequisites untouched;
1937
+ * a non-null list replaces them wholesale.
1954
1938
  */
1955
1939
  put: {
1956
1940
  parameters: {
@@ -1961,15 +1945,14 @@ export interface paths {
1961
1945
  project: string;
1962
1946
  flag: string;
1963
1947
  env: string;
1964
- ruleId: string;
1965
1948
  };
1966
1949
  cookie?: never;
1967
1950
  };
1968
1951
  requestBody?: {
1969
1952
  content: {
1970
- "application/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
1971
- "text/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
1972
- "application/*+json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
1953
+ "application/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1954
+ "text/json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1955
+ "application/*+json": components["schemas"]["PublicUpdateFlagEnvConfigRequest"];
1973
1956
  };
1974
1957
  };
1975
1958
  responses: {
@@ -2048,11 +2031,26 @@ export interface paths {
2048
2031
  };
2049
2032
  };
2050
2033
  post?: never;
2034
+ delete?: never;
2035
+ options?: never;
2036
+ head?: never;
2037
+ patch?: never;
2038
+ trace?: never;
2039
+ };
2040
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/toggle": {
2041
+ parameters: {
2042
+ query?: never;
2043
+ header?: never;
2044
+ path?: never;
2045
+ cookie?: never;
2046
+ };
2047
+ get?: never;
2048
+ put?: never;
2051
2049
  /**
2052
- * Deletes a targeting rule from the resolved flag in the resolved environment.
2050
+ * Enables or disables the resolved flag in a resolved environment.
2053
2051
  * @description Requires at least Member.
2054
2052
  */
2055
- delete: {
2053
+ post: {
2056
2054
  parameters: {
2057
2055
  query?: never;
2058
2056
  header?: never;
@@ -2061,11 +2059,16 @@ export interface paths {
2061
2059
  project: string;
2062
2060
  flag: string;
2063
2061
  env: string;
2064
- ruleId: string;
2065
2062
  };
2066
2063
  cookie?: never;
2067
2064
  };
2068
- requestBody?: never;
2065
+ requestBody?: {
2066
+ content: {
2067
+ "application/json": components["schemas"]["PublicToggleFlagRequest"];
2068
+ "text/json": components["schemas"]["PublicToggleFlagRequest"];
2069
+ "application/*+json": components["schemas"]["PublicToggleFlagRequest"];
2070
+ };
2071
+ };
2069
2072
  responses: {
2070
2073
  /** @description No Content */
2071
2074
  204: {
@@ -2077,6 +2080,18 @@ export interface paths {
2077
2080
  };
2078
2081
  content?: never;
2079
2082
  };
2083
+ /** @description Bad Request */
2084
+ 400: {
2085
+ headers: {
2086
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2087
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2088
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2089
+ [name: string]: unknown;
2090
+ };
2091
+ content: {
2092
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2093
+ };
2094
+ };
2080
2095
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
2081
2096
  401: {
2082
2097
  headers: {
@@ -2129,25 +2144,27 @@ export interface paths {
2129
2144
  };
2130
2145
  };
2131
2146
  };
2147
+ delete?: never;
2132
2148
  options?: never;
2133
2149
  head?: never;
2134
2150
  patch?: never;
2135
2151
  trace?: never;
2136
2152
  };
2137
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/reorder": {
2153
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/targeting": {
2138
2154
  parameters: {
2139
2155
  query?: never;
2140
2156
  header?: never;
2141
2157
  path?: never;
2142
2158
  cookie?: never;
2143
2159
  };
2144
- get?: never;
2145
2160
  /**
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.
2161
+ * Gets the resolved flag's full targeting configuration (enabled flag + ordered rules) in the resolved environment.
2162
+ * @description GetTargetingConfigurationQuery returns null when
2163
+ * no `FlagEnvironmentConfiguration` exists yet for this flag/environment pair — treated
2164
+ * as 404 here (rather than an empty PublicTargetingConfigResponse) for
2165
+ * consistency with every other resolved-resource 404 on this surface.
2149
2166
  */
2150
- put: {
2167
+ get: {
2151
2168
  parameters: {
2152
2169
  query?: never;
2153
2170
  header?: never;
@@ -2159,26 +2176,10 @@ export interface paths {
2159
2176
  };
2160
2177
  cookie?: never;
2161
2178
  };
2162
- requestBody?: {
2163
- content: {
2164
- "application/json": components["schemas"]["PublicReorderRulesRequest"];
2165
- "text/json": components["schemas"]["PublicReorderRulesRequest"];
2166
- "application/*+json": components["schemas"]["PublicReorderRulesRequest"];
2167
- };
2168
- };
2179
+ requestBody?: never;
2169
2180
  responses: {
2170
- /** @description No Content */
2171
- 204: {
2172
- headers: {
2173
- "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2174
- "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2175
- "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2176
- [name: string]: unknown;
2177
- };
2178
- content?: never;
2179
- };
2180
- /** @description Authentication is required, or the supplied API token is invalid or expired. */
2181
- 401: {
2181
+ /** @description OK */
2182
+ 200: {
2182
2183
  headers: {
2183
2184
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2184
2185
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -2186,11 +2187,11 @@ export interface paths {
2186
2187
  [name: string]: unknown;
2187
2188
  };
2188
2189
  content: {
2189
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2190
+ "application/json": components["schemas"]["PublicTargetingConfigResponse"];
2190
2191
  };
2191
2192
  };
2192
- /** @description Forbidden */
2193
- 403: {
2193
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2194
+ 401: {
2194
2195
  headers: {
2195
2196
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2196
2197
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -2229,29 +2230,13 @@ export interface paths {
2229
2230
  };
2230
2231
  };
2231
2232
  };
2232
- post?: never;
2233
- delete?: never;
2234
- options?: never;
2235
- head?: never;
2236
- patch?: never;
2237
- trace?: never;
2238
- };
2239
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations": {
2240
- parameters: {
2241
- query?: never;
2242
- header?: never;
2243
- path?: never;
2244
- cookie?: never;
2245
- };
2246
- get?: never;
2247
- put?: never;
2248
2233
  /**
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.
2234
+ * Declaratively replaces the resolved flag's entire targeting rule set in the resolved environment.
2235
+ * @description The ordered Rules list is applied in
2236
+ * array order (= evaluation order); an empty or omitted list clears all rules. Segment-scoped
2237
+ * rules are supported. The replace is atomic. Requires at least Member.
2253
2238
  */
2254
- post: {
2239
+ put: {
2255
2240
  parameters: {
2256
2241
  query?: never;
2257
2242
  header?: never;
@@ -2259,28 +2244,27 @@ export interface paths {
2259
2244
  org: string;
2260
2245
  project: string;
2261
2246
  flag: string;
2247
+ env: string;
2262
2248
  };
2263
2249
  cookie?: never;
2264
2250
  };
2265
2251
  requestBody?: {
2266
2252
  content: {
2267
- "application/json": components["schemas"]["PublicAddVariationRequest"];
2268
- "text/json": components["schemas"]["PublicAddVariationRequest"];
2269
- "application/*+json": components["schemas"]["PublicAddVariationRequest"];
2253
+ "application/json": components["schemas"]["PublicPutTargetingRequest"];
2254
+ "text/json": components["schemas"]["PublicPutTargetingRequest"];
2255
+ "application/*+json": components["schemas"]["PublicPutTargetingRequest"];
2270
2256
  };
2271
2257
  };
2272
2258
  responses: {
2273
- /** @description Created */
2274
- 201: {
2259
+ /** @description No Content */
2260
+ 204: {
2275
2261
  headers: {
2276
2262
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2277
2263
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2278
2264
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2279
2265
  [name: string]: unknown;
2280
2266
  };
2281
- content: {
2282
- "application/json": components["schemas"]["PublicVariationResponse"];
2283
- };
2267
+ content?: never;
2284
2268
  };
2285
2269
  /** @description Bad Request */
2286
2270
  400: {
@@ -2346,13 +2330,14 @@ export interface paths {
2346
2330
  };
2347
2331
  };
2348
2332
  };
2333
+ post?: never;
2349
2334
  delete?: never;
2350
2335
  options?: never;
2351
2336
  head?: never;
2352
2337
  patch?: never;
2353
2338
  trace?: never;
2354
2339
  };
2355
- "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations/{variationId}": {
2340
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules": {
2356
2341
  parameters: {
2357
2342
  query?: never;
2358
2343
  header?: never;
@@ -2360,11 +2345,15 @@ export interface paths {
2360
2345
  cookie?: never;
2361
2346
  };
2362
2347
  get?: never;
2348
+ put?: never;
2363
2349
  /**
2364
- * Updates a variation's name/value/description.
2365
- * @description Requires at least Member. The variation's key is immutable via this endpoint.
2350
+ * Creates a targeting rule on the resolved flag in the resolved environment.
2351
+ * @description Requires at
2352
+ * least Member. Re-fetches via GetTargetingRuleQuery using the id returned
2353
+ * from CreateTargetingRuleCommand so the response reflects exactly what was
2354
+ * persisted (e.g. server-assigned priority and condition/group ids).
2366
2355
  */
2367
- put: {
2356
+ post: {
2368
2357
  parameters: {
2369
2358
  query?: never;
2370
2359
  header?: never;
@@ -2372,27 +2361,1233 @@ export interface paths {
2372
2361
  org: string;
2373
2362
  project: string;
2374
2363
  flag: string;
2375
- variationId: string;
2364
+ env: string;
2376
2365
  };
2377
2366
  cookie?: never;
2378
2367
  };
2379
2368
  requestBody?: {
2380
2369
  content: {
2381
- "application/json": components["schemas"]["PublicUpdateVariationRequest"];
2382
- "text/json": components["schemas"]["PublicUpdateVariationRequest"];
2383
- "application/*+json": components["schemas"]["PublicUpdateVariationRequest"];
2370
+ "application/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
2371
+ "text/json": components["schemas"]["PublicCreateTargetingRuleRequest"];
2372
+ "application/*+json": components["schemas"]["PublicCreateTargetingRuleRequest"];
2384
2373
  };
2385
2374
  };
2386
2375
  responses: {
2387
- /** @description No Content */
2388
- 204: {
2376
+ /** @description Created */
2377
+ 201: {
2389
2378
  headers: {
2390
2379
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2391
2380
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2392
2381
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2393
2382
  [name: string]: unknown;
2394
2383
  };
2395
- content?: never;
2384
+ content: {
2385
+ "application/json": components["schemas"]["PublicTargetingRuleResponse"];
2386
+ };
2387
+ };
2388
+ /** @description Bad Request */
2389
+ 400: {
2390
+ headers: {
2391
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2392
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2393
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2394
+ [name: string]: unknown;
2395
+ };
2396
+ content: {
2397
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2398
+ };
2399
+ };
2400
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2401
+ 401: {
2402
+ headers: {
2403
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2404
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2405
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2406
+ [name: string]: unknown;
2407
+ };
2408
+ content: {
2409
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2410
+ };
2411
+ };
2412
+ /** @description Forbidden */
2413
+ 403: {
2414
+ headers: {
2415
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2416
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2417
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2418
+ [name: string]: unknown;
2419
+ };
2420
+ content: {
2421
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2422
+ };
2423
+ };
2424
+ /** @description Not Found */
2425
+ 404: {
2426
+ headers: {
2427
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2428
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2429
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2430
+ [name: string]: unknown;
2431
+ };
2432
+ content: {
2433
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2434
+ };
2435
+ };
2436
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2437
+ 429: {
2438
+ headers: {
2439
+ /** @description Number of seconds to wait before retrying the request. */
2440
+ "Retry-After"?: number;
2441
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2442
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2443
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2444
+ [name: string]: unknown;
2445
+ };
2446
+ content: {
2447
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2448
+ };
2449
+ };
2450
+ };
2451
+ };
2452
+ delete?: never;
2453
+ options?: never;
2454
+ head?: never;
2455
+ patch?: never;
2456
+ trace?: never;
2457
+ };
2458
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/{ruleId}": {
2459
+ parameters: {
2460
+ query?: never;
2461
+ header?: never;
2462
+ path?: never;
2463
+ cookie?: never;
2464
+ };
2465
+ /** Gets a single targeting rule on the resolved flag in the resolved environment by id. */
2466
+ get: {
2467
+ parameters: {
2468
+ query?: never;
2469
+ header?: never;
2470
+ path: {
2471
+ org: string;
2472
+ project: string;
2473
+ flag: string;
2474
+ env: string;
2475
+ ruleId: string;
2476
+ };
2477
+ cookie?: never;
2478
+ };
2479
+ requestBody?: never;
2480
+ responses: {
2481
+ /** @description OK */
2482
+ 200: {
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"]["PublicTargetingRuleResponse"];
2491
+ };
2492
+ };
2493
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2494
+ 401: {
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 Not Found */
2506
+ 404: {
2507
+ headers: {
2508
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2509
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2510
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2511
+ [name: string]: unknown;
2512
+ };
2513
+ content: {
2514
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2515
+ };
2516
+ };
2517
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2518
+ 429: {
2519
+ headers: {
2520
+ /** @description Number of seconds to wait before retrying the request. */
2521
+ "Retry-After"?: number;
2522
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2523
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2524
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2525
+ [name: string]: unknown;
2526
+ };
2527
+ content: {
2528
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2529
+ };
2530
+ };
2531
+ };
2532
+ };
2533
+ /**
2534
+ * Updates a targeting rule's variation/description/rollout/segment/conditions wholesale.
2535
+ * @description Requires at least Member.
2536
+ */
2537
+ put: {
2538
+ parameters: {
2539
+ query?: never;
2540
+ header?: never;
2541
+ path: {
2542
+ org: string;
2543
+ project: string;
2544
+ flag: string;
2545
+ env: string;
2546
+ ruleId: string;
2547
+ };
2548
+ cookie?: never;
2549
+ };
2550
+ requestBody?: {
2551
+ content: {
2552
+ "application/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
2553
+ "text/json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
2554
+ "application/*+json": components["schemas"]["PublicUpdateTargetingRuleRequest"];
2555
+ };
2556
+ };
2557
+ responses: {
2558
+ /** @description No Content */
2559
+ 204: {
2560
+ headers: {
2561
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2562
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2563
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2564
+ [name: string]: unknown;
2565
+ };
2566
+ content?: never;
2567
+ };
2568
+ /** @description Bad Request */
2569
+ 400: {
2570
+ headers: {
2571
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2572
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2573
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2574
+ [name: string]: unknown;
2575
+ };
2576
+ content: {
2577
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2578
+ };
2579
+ };
2580
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2581
+ 401: {
2582
+ headers: {
2583
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2584
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2585
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2586
+ [name: string]: unknown;
2587
+ };
2588
+ content: {
2589
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2590
+ };
2591
+ };
2592
+ /** @description Forbidden */
2593
+ 403: {
2594
+ headers: {
2595
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2596
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2597
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2598
+ [name: string]: unknown;
2599
+ };
2600
+ content: {
2601
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2602
+ };
2603
+ };
2604
+ /** @description Not Found */
2605
+ 404: {
2606
+ headers: {
2607
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2608
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2609
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2610
+ [name: string]: unknown;
2611
+ };
2612
+ content: {
2613
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2614
+ };
2615
+ };
2616
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2617
+ 429: {
2618
+ headers: {
2619
+ /** @description Number of seconds to wait before retrying the request. */
2620
+ "Retry-After"?: number;
2621
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2622
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2623
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2624
+ [name: string]: unknown;
2625
+ };
2626
+ content: {
2627
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2628
+ };
2629
+ };
2630
+ };
2631
+ };
2632
+ post?: never;
2633
+ /**
2634
+ * Deletes a targeting rule from the resolved flag in the resolved environment.
2635
+ * @description Requires at least Member.
2636
+ */
2637
+ delete: {
2638
+ parameters: {
2639
+ query?: never;
2640
+ header?: never;
2641
+ path: {
2642
+ org: string;
2643
+ project: string;
2644
+ flag: string;
2645
+ env: string;
2646
+ ruleId: string;
2647
+ };
2648
+ cookie?: never;
2649
+ };
2650
+ requestBody?: never;
2651
+ responses: {
2652
+ /** @description No Content */
2653
+ 204: {
2654
+ headers: {
2655
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2656
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2657
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2658
+ [name: string]: unknown;
2659
+ };
2660
+ content?: never;
2661
+ };
2662
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2663
+ 401: {
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"]["PublicApiErrorEnvelope"];
2672
+ };
2673
+ };
2674
+ /** @description Forbidden */
2675
+ 403: {
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 Not Found */
2687
+ 404: {
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 Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2699
+ 429: {
2700
+ headers: {
2701
+ /** @description Number of seconds to wait before retrying the request. */
2702
+ "Retry-After"?: number;
2703
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2704
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2705
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2706
+ [name: string]: unknown;
2707
+ };
2708
+ content: {
2709
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2710
+ };
2711
+ };
2712
+ };
2713
+ };
2714
+ options?: never;
2715
+ head?: never;
2716
+ patch?: never;
2717
+ trace?: never;
2718
+ };
2719
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/environments/{env}/rules/reorder": {
2720
+ parameters: {
2721
+ query?: never;
2722
+ header?: never;
2723
+ path?: never;
2724
+ cookie?: never;
2725
+ };
2726
+ get?: never;
2727
+ /**
2728
+ * Reorders the resolved flag's targeting rules in the resolved environment by priority.
2729
+ * @description Requires at least Member. Must include every existing rule id exactly once — see the
2730
+ * type-level remarks on the dup/omission 500 wart.
2731
+ */
2732
+ put: {
2733
+ parameters: {
2734
+ query?: never;
2735
+ header?: never;
2736
+ path: {
2737
+ org: string;
2738
+ project: string;
2739
+ flag: string;
2740
+ env: string;
2741
+ };
2742
+ cookie?: never;
2743
+ };
2744
+ requestBody?: {
2745
+ content: {
2746
+ "application/json": components["schemas"]["PublicReorderRulesRequest"];
2747
+ "text/json": components["schemas"]["PublicReorderRulesRequest"];
2748
+ "application/*+json": components["schemas"]["PublicReorderRulesRequest"];
2749
+ };
2750
+ };
2751
+ responses: {
2752
+ /** @description No Content */
2753
+ 204: {
2754
+ headers: {
2755
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2756
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2757
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2758
+ [name: string]: unknown;
2759
+ };
2760
+ content?: never;
2761
+ };
2762
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2763
+ 401: {
2764
+ headers: {
2765
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2766
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2767
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2768
+ [name: string]: unknown;
2769
+ };
2770
+ content: {
2771
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2772
+ };
2773
+ };
2774
+ /** @description Forbidden */
2775
+ 403: {
2776
+ headers: {
2777
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2778
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2779
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2780
+ [name: string]: unknown;
2781
+ };
2782
+ content: {
2783
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2784
+ };
2785
+ };
2786
+ /** @description Not Found */
2787
+ 404: {
2788
+ headers: {
2789
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2790
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2791
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2792
+ [name: string]: unknown;
2793
+ };
2794
+ content: {
2795
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2796
+ };
2797
+ };
2798
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2799
+ 429: {
2800
+ headers: {
2801
+ /** @description Number of seconds to wait before retrying the request. */
2802
+ "Retry-After"?: number;
2803
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2804
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2805
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2806
+ [name: string]: unknown;
2807
+ };
2808
+ content: {
2809
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2810
+ };
2811
+ };
2812
+ };
2813
+ };
2814
+ post?: never;
2815
+ delete?: never;
2816
+ options?: never;
2817
+ head?: never;
2818
+ patch?: never;
2819
+ trace?: never;
2820
+ };
2821
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations": {
2822
+ parameters: {
2823
+ query?: never;
2824
+ header?: never;
2825
+ path?: never;
2826
+ cookie?: never;
2827
+ };
2828
+ get?: never;
2829
+ put?: never;
2830
+ /**
2831
+ * Adds a variation to the resolved flag.
2832
+ * @description Requires at least Member. Re-fetches the flag via
2833
+ * GetFeatureFlagQuery and locates the new variation by the id returned from
2834
+ * AddVariationCommand so the response reflects exactly what was persisted.
2835
+ */
2836
+ post: {
2837
+ parameters: {
2838
+ query?: never;
2839
+ header?: never;
2840
+ path: {
2841
+ org: string;
2842
+ project: string;
2843
+ flag: string;
2844
+ };
2845
+ cookie?: never;
2846
+ };
2847
+ requestBody?: {
2848
+ content: {
2849
+ "application/json": components["schemas"]["PublicAddVariationRequest"];
2850
+ "text/json": components["schemas"]["PublicAddVariationRequest"];
2851
+ "application/*+json": components["schemas"]["PublicAddVariationRequest"];
2852
+ };
2853
+ };
2854
+ responses: {
2855
+ /** @description Created */
2856
+ 201: {
2857
+ headers: {
2858
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2859
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2860
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2861
+ [name: string]: unknown;
2862
+ };
2863
+ content: {
2864
+ "application/json": components["schemas"]["PublicVariationResponse"];
2865
+ };
2866
+ };
2867
+ /** @description Bad Request */
2868
+ 400: {
2869
+ headers: {
2870
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2871
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2872
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2873
+ [name: string]: unknown;
2874
+ };
2875
+ content: {
2876
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2877
+ };
2878
+ };
2879
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2880
+ 401: {
2881
+ headers: {
2882
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2883
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2884
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2885
+ [name: string]: unknown;
2886
+ };
2887
+ content: {
2888
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2889
+ };
2890
+ };
2891
+ /** @description Forbidden */
2892
+ 403: {
2893
+ headers: {
2894
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2895
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2896
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2897
+ [name: string]: unknown;
2898
+ };
2899
+ content: {
2900
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2901
+ };
2902
+ };
2903
+ /** @description Not Found */
2904
+ 404: {
2905
+ headers: {
2906
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2907
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2908
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2909
+ [name: string]: unknown;
2910
+ };
2911
+ content: {
2912
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2913
+ };
2914
+ };
2915
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2916
+ 429: {
2917
+ headers: {
2918
+ /** @description Number of seconds to wait before retrying the request. */
2919
+ "Retry-After"?: number;
2920
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2921
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2922
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2923
+ [name: string]: unknown;
2924
+ };
2925
+ content: {
2926
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2927
+ };
2928
+ };
2929
+ };
2930
+ };
2931
+ delete?: never;
2932
+ options?: never;
2933
+ head?: never;
2934
+ patch?: never;
2935
+ trace?: never;
2936
+ };
2937
+ "/api/v1/orgs/{org}/projects/{project}/flags/{flag}/variations/{variationId}": {
2938
+ parameters: {
2939
+ query?: never;
2940
+ header?: never;
2941
+ path?: never;
2942
+ cookie?: never;
2943
+ };
2944
+ get?: never;
2945
+ /**
2946
+ * Updates a variation's name/value/description.
2947
+ * @description Requires at least Member. The variation's key is immutable via this endpoint.
2948
+ */
2949
+ put: {
2950
+ parameters: {
2951
+ query?: never;
2952
+ header?: never;
2953
+ path: {
2954
+ org: string;
2955
+ project: string;
2956
+ flag: string;
2957
+ variationId: string;
2958
+ };
2959
+ cookie?: never;
2960
+ };
2961
+ requestBody?: {
2962
+ content: {
2963
+ "application/json": components["schemas"]["PublicUpdateVariationRequest"];
2964
+ "text/json": components["schemas"]["PublicUpdateVariationRequest"];
2965
+ "application/*+json": components["schemas"]["PublicUpdateVariationRequest"];
2966
+ };
2967
+ };
2968
+ responses: {
2969
+ /** @description No Content */
2970
+ 204: {
2971
+ headers: {
2972
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2973
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2974
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2975
+ [name: string]: unknown;
2976
+ };
2977
+ content?: never;
2978
+ };
2979
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2980
+ 401: {
2981
+ headers: {
2982
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2983
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2984
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2985
+ [name: string]: unknown;
2986
+ };
2987
+ content: {
2988
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2989
+ };
2990
+ };
2991
+ /** @description Forbidden */
2992
+ 403: {
2993
+ headers: {
2994
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2995
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2996
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2997
+ [name: string]: unknown;
2998
+ };
2999
+ content: {
3000
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3001
+ };
3002
+ };
3003
+ /** @description Not Found */
3004
+ 404: {
3005
+ headers: {
3006
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3007
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3008
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3009
+ [name: string]: unknown;
3010
+ };
3011
+ content: {
3012
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3013
+ };
3014
+ };
3015
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3016
+ 429: {
3017
+ headers: {
3018
+ /** @description Number of seconds to wait before retrying the request. */
3019
+ "Retry-After"?: number;
3020
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3021
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3022
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3023
+ [name: string]: unknown;
3024
+ };
3025
+ content: {
3026
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3027
+ };
3028
+ };
3029
+ };
3030
+ };
3031
+ post?: never;
3032
+ /**
3033
+ * Removes a variation from the resolved flag.
3034
+ * @description Requires at least Member. A variation with
3035
+ * dependents (used as default variation, referenced by a targeting rule, or flagged
3036
+ * `VARIATION_HAS_DEPENDENTS`) throws the existing
3037
+ * ValidationException, which the
3038
+ * exception filter maps to a 400 `validation_failed` envelope — this action doesn't
3039
+ * special-case it.
3040
+ */
3041
+ delete: {
3042
+ parameters: {
3043
+ query?: never;
3044
+ header?: never;
3045
+ path: {
3046
+ org: string;
3047
+ project: string;
3048
+ flag: string;
3049
+ variationId: string;
3050
+ };
3051
+ cookie?: never;
3052
+ };
3053
+ requestBody?: never;
3054
+ responses: {
3055
+ /** @description No Content */
3056
+ 204: {
3057
+ headers: {
3058
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3059
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3060
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3061
+ [name: string]: unknown;
3062
+ };
3063
+ content?: never;
3064
+ };
3065
+ /** @description Bad Request */
3066
+ 400: {
3067
+ headers: {
3068
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3069
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3070
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3071
+ [name: string]: unknown;
3072
+ };
3073
+ content: {
3074
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3075
+ };
3076
+ };
3077
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3078
+ 401: {
3079
+ headers: {
3080
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3081
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3082
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3083
+ [name: string]: unknown;
3084
+ };
3085
+ content: {
3086
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3087
+ };
3088
+ };
3089
+ /** @description Forbidden */
3090
+ 403: {
3091
+ headers: {
3092
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3093
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3094
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3095
+ [name: string]: unknown;
3096
+ };
3097
+ content: {
3098
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3099
+ };
3100
+ };
3101
+ /** @description Not Found */
3102
+ 404: {
3103
+ headers: {
3104
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3105
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3106
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3107
+ [name: string]: unknown;
3108
+ };
3109
+ content: {
3110
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3111
+ };
3112
+ };
3113
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3114
+ 429: {
3115
+ headers: {
3116
+ /** @description Number of seconds to wait before retrying the request. */
3117
+ "Retry-After"?: number;
3118
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3119
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3120
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3121
+ [name: string]: unknown;
3122
+ };
3123
+ content: {
3124
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3125
+ };
3126
+ };
3127
+ };
3128
+ };
3129
+ options?: never;
3130
+ head?: never;
3131
+ patch?: never;
3132
+ trace?: never;
3133
+ };
3134
+ "/api/v1/me": {
3135
+ parameters: {
3136
+ query?: never;
3137
+ header?: never;
3138
+ path?: never;
3139
+ cookie?: never;
3140
+ };
3141
+ /** Returns the authenticated caller's public identity (see MeResponse). */
3142
+ get: {
3143
+ parameters: {
3144
+ query?: never;
3145
+ header?: never;
3146
+ path?: never;
3147
+ cookie?: never;
3148
+ };
3149
+ requestBody?: never;
3150
+ responses: {
3151
+ /** @description OK */
3152
+ 200: {
3153
+ headers: {
3154
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3155
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3156
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3157
+ [name: string]: unknown;
3158
+ };
3159
+ content: {
3160
+ "application/json": components["schemas"]["MeResponse"];
3161
+ };
3162
+ };
3163
+ /** @description Unauthorized */
3164
+ 401: {
3165
+ headers: {
3166
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3167
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3168
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3169
+ [name: string]: unknown;
3170
+ };
3171
+ content: {
3172
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3173
+ };
3174
+ };
3175
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3176
+ 429: {
3177
+ headers: {
3178
+ /** @description Number of seconds to wait before retrying the request. */
3179
+ "Retry-After"?: number;
3180
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3181
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3182
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3183
+ [name: string]: unknown;
3184
+ };
3185
+ content: {
3186
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3187
+ };
3188
+ };
3189
+ };
3190
+ };
3191
+ put?: never;
3192
+ post?: never;
3193
+ delete?: never;
3194
+ options?: never;
3195
+ head?: never;
3196
+ patch?: never;
3197
+ trace?: never;
3198
+ };
3199
+ "/api/v1/orgs": {
3200
+ parameters: {
3201
+ query?: never;
3202
+ header?: never;
3203
+ path?: never;
3204
+ cookie?: never;
3205
+ };
3206
+ /** Lists the caller's organizations, cursor-paginated. */
3207
+ get: {
3208
+ parameters: {
3209
+ query?: {
3210
+ limit?: number;
3211
+ cursor?: string;
3212
+ };
3213
+ header?: never;
3214
+ path?: never;
3215
+ cookie?: never;
3216
+ };
3217
+ requestBody?: never;
3218
+ responses: {
3219
+ /** @description OK */
3220
+ 200: {
3221
+ headers: {
3222
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3223
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3224
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3225
+ [name: string]: unknown;
3226
+ };
3227
+ content: {
3228
+ "application/json": components["schemas"]["OrganizationResponsePagedResult"];
3229
+ };
3230
+ };
3231
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3232
+ 401: {
3233
+ headers: {
3234
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3235
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3236
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3237
+ [name: string]: unknown;
3238
+ };
3239
+ content: {
3240
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3241
+ };
3242
+ };
3243
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3244
+ 429: {
3245
+ headers: {
3246
+ /** @description Number of seconds to wait before retrying the request. */
3247
+ "Retry-After"?: number;
3248
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3249
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3250
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3251
+ [name: string]: unknown;
3252
+ };
3253
+ content: {
3254
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3255
+ };
3256
+ };
3257
+ };
3258
+ };
3259
+ put?: never;
3260
+ post?: never;
3261
+ delete?: never;
3262
+ options?: never;
3263
+ head?: never;
3264
+ patch?: never;
3265
+ trace?: never;
3266
+ };
3267
+ "/api/v1/orgs/{org}": {
3268
+ parameters: {
3269
+ query?: never;
3270
+ header?: never;
3271
+ path?: never;
3272
+ cookie?: never;
3273
+ };
3274
+ /** Gets one of the caller's organizations by slug or id. */
3275
+ get: {
3276
+ parameters: {
3277
+ query?: never;
3278
+ header?: never;
3279
+ path: {
3280
+ org: string;
3281
+ };
3282
+ cookie?: never;
3283
+ };
3284
+ requestBody?: never;
3285
+ responses: {
3286
+ /** @description OK */
3287
+ 200: {
3288
+ headers: {
3289
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3290
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3291
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3292
+ [name: string]: unknown;
3293
+ };
3294
+ content: {
3295
+ "application/json": components["schemas"]["OrganizationResponse"];
3296
+ };
3297
+ };
3298
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3299
+ 401: {
3300
+ headers: {
3301
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3302
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3303
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3304
+ [name: string]: unknown;
3305
+ };
3306
+ content: {
3307
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3308
+ };
3309
+ };
3310
+ /** @description Not Found */
3311
+ 404: {
3312
+ headers: {
3313
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3314
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3315
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3316
+ [name: string]: unknown;
3317
+ };
3318
+ content: {
3319
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3320
+ };
3321
+ };
3322
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3323
+ 429: {
3324
+ headers: {
3325
+ /** @description Number of seconds to wait before retrying the request. */
3326
+ "Retry-After"?: number;
3327
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3328
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3329
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3330
+ [name: string]: unknown;
3331
+ };
3332
+ content: {
3333
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3334
+ };
3335
+ };
3336
+ };
3337
+ };
3338
+ put?: never;
3339
+ post?: never;
3340
+ delete?: never;
3341
+ options?: never;
3342
+ head?: never;
3343
+ patch?: never;
3344
+ trace?: never;
3345
+ };
3346
+ "/api/v1/orgs/{org}/projects": {
3347
+ parameters: {
3348
+ query?: never;
3349
+ header?: never;
3350
+ path?: never;
3351
+ cookie?: never;
3352
+ };
3353
+ /** Lists projects in the resolved organization, cursor-paginated. */
3354
+ get: {
3355
+ parameters: {
3356
+ query?: {
3357
+ limit?: number;
3358
+ cursor?: string;
3359
+ };
3360
+ header?: never;
3361
+ path: {
3362
+ org: string;
3363
+ };
3364
+ cookie?: never;
3365
+ };
3366
+ requestBody?: never;
3367
+ responses: {
3368
+ /** @description OK */
3369
+ 200: {
3370
+ headers: {
3371
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3372
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3373
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3374
+ [name: string]: unknown;
3375
+ };
3376
+ content: {
3377
+ "application/json": components["schemas"]["ProjectResponsePagedResult"];
3378
+ };
3379
+ };
3380
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3381
+ 401: {
3382
+ headers: {
3383
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3384
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3385
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3386
+ [name: string]: unknown;
3387
+ };
3388
+ content: {
3389
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3390
+ };
3391
+ };
3392
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3393
+ 429: {
3394
+ headers: {
3395
+ /** @description Number of seconds to wait before retrying the request. */
3396
+ "Retry-After"?: number;
3397
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3398
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3399
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3400
+ [name: string]: unknown;
3401
+ };
3402
+ content: {
3403
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3404
+ };
3405
+ };
3406
+ };
3407
+ };
3408
+ put?: never;
3409
+ /**
3410
+ * Creates a project in the resolved organization.
3411
+ * @description Requires at least Member.
3412
+ */
3413
+ post: {
3414
+ parameters: {
3415
+ query?: never;
3416
+ header?: never;
3417
+ path: {
3418
+ org: string;
3419
+ };
3420
+ cookie?: never;
3421
+ };
3422
+ requestBody?: {
3423
+ content: {
3424
+ "application/json": components["schemas"]["PublicCreateProjectRequest"];
3425
+ "text/json": components["schemas"]["PublicCreateProjectRequest"];
3426
+ "application/*+json": components["schemas"]["PublicCreateProjectRequest"];
3427
+ };
3428
+ };
3429
+ responses: {
3430
+ /** @description Created */
3431
+ 201: {
3432
+ headers: {
3433
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3434
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3435
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3436
+ [name: string]: unknown;
3437
+ };
3438
+ content: {
3439
+ "application/json": components["schemas"]["ProjectResponse"];
3440
+ };
3441
+ };
3442
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3443
+ 401: {
3444
+ headers: {
3445
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3446
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3447
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3448
+ [name: string]: unknown;
3449
+ };
3450
+ content: {
3451
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3452
+ };
3453
+ };
3454
+ /** @description Forbidden */
3455
+ 403: {
3456
+ headers: {
3457
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3458
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3459
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3460
+ [name: string]: unknown;
3461
+ };
3462
+ content: {
3463
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3464
+ };
3465
+ };
3466
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3467
+ 429: {
3468
+ headers: {
3469
+ /** @description Number of seconds to wait before retrying the request. */
3470
+ "Retry-After"?: number;
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: {
3477
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3478
+ };
3479
+ };
3480
+ };
3481
+ };
3482
+ delete?: never;
3483
+ options?: never;
3484
+ head?: never;
3485
+ patch?: never;
3486
+ trace?: never;
3487
+ };
3488
+ "/api/v1/orgs/{org}/projects/{project}": {
3489
+ parameters: {
3490
+ query?: never;
3491
+ header?: never;
3492
+ path?: never;
3493
+ cookie?: never;
3494
+ };
3495
+ /** Gets a project in the resolved organization by key or id. */
3496
+ get: {
3497
+ parameters: {
3498
+ query?: never;
3499
+ header?: never;
3500
+ path: {
3501
+ org: string;
3502
+ project: string;
3503
+ };
3504
+ cookie?: never;
3505
+ };
3506
+ requestBody?: never;
3507
+ responses: {
3508
+ /** @description OK */
3509
+ 200: {
3510
+ headers: {
3511
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3512
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3513
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3514
+ [name: string]: unknown;
3515
+ };
3516
+ content: {
3517
+ "application/json": components["schemas"]["ProjectResponse"];
3518
+ };
3519
+ };
3520
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3521
+ 401: {
3522
+ headers: {
3523
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3524
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3525
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3526
+ [name: string]: unknown;
3527
+ };
3528
+ content: {
3529
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3530
+ };
3531
+ };
3532
+ /** @description Not Found */
3533
+ 404: {
3534
+ headers: {
3535
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3536
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3537
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3538
+ [name: string]: unknown;
3539
+ };
3540
+ content: {
3541
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3542
+ };
3543
+ };
3544
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3545
+ 429: {
3546
+ headers: {
3547
+ /** @description Number of seconds to wait before retrying the request. */
3548
+ "Retry-After"?: number;
3549
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3550
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3551
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3552
+ [name: string]: unknown;
3553
+ };
3554
+ content: {
3555
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3556
+ };
3557
+ };
3558
+ };
3559
+ };
3560
+ /**
3561
+ * Updates a project's name/description.
3562
+ * @description Requires at least Member.
3563
+ */
3564
+ put: {
3565
+ parameters: {
3566
+ query?: never;
3567
+ header?: never;
3568
+ path: {
3569
+ org: string;
3570
+ project: string;
3571
+ };
3572
+ cookie?: never;
3573
+ };
3574
+ requestBody?: {
3575
+ content: {
3576
+ "application/json": components["schemas"]["PublicUpdateProjectRequest"];
3577
+ "text/json": components["schemas"]["PublicUpdateProjectRequest"];
3578
+ "application/*+json": components["schemas"]["PublicUpdateProjectRequest"];
3579
+ };
3580
+ };
3581
+ responses: {
3582
+ /** @description No Content */
3583
+ 204: {
3584
+ headers: {
3585
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3586
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3587
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3588
+ [name: string]: unknown;
3589
+ };
3590
+ content?: never;
2396
3591
  };
2397
3592
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
2398
3593
  401: {
@@ -2448,37 +3643,206 @@ export interface paths {
2448
3643
  };
2449
3644
  post?: never;
2450
3645
  /**
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.
3646
+ * Deletes a project.
3647
+ * @description Requires at least Member.
3648
+ */
3649
+ delete: {
3650
+ parameters: {
3651
+ query?: never;
3652
+ header?: never;
3653
+ path: {
3654
+ org: string;
3655
+ project: string;
3656
+ };
3657
+ cookie?: never;
3658
+ };
3659
+ requestBody?: never;
3660
+ responses: {
3661
+ /** @description No Content */
3662
+ 204: {
3663
+ headers: {
3664
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3665
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3666
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3667
+ [name: string]: unknown;
3668
+ };
3669
+ content?: never;
3670
+ };
3671
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3672
+ 401: {
3673
+ headers: {
3674
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3675
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3676
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3677
+ [name: string]: unknown;
3678
+ };
3679
+ content: {
3680
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3681
+ };
3682
+ };
3683
+ /** @description Forbidden */
3684
+ 403: {
3685
+ headers: {
3686
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3687
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3688
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3689
+ [name: string]: unknown;
3690
+ };
3691
+ content: {
3692
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3693
+ };
3694
+ };
3695
+ /** @description Not Found */
3696
+ 404: {
3697
+ headers: {
3698
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3699
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3700
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3701
+ [name: string]: unknown;
3702
+ };
3703
+ content: {
3704
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3705
+ };
3706
+ };
3707
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3708
+ 429: {
3709
+ headers: {
3710
+ /** @description Number of seconds to wait before retrying the request. */
3711
+ "Retry-After"?: number;
3712
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3713
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3714
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3715
+ [name: string]: unknown;
3716
+ };
3717
+ content: {
3718
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3719
+ };
3720
+ };
3721
+ };
3722
+ };
3723
+ options?: never;
3724
+ head?: never;
3725
+ patch?: never;
3726
+ trace?: never;
3727
+ };
3728
+ "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys": {
3729
+ parameters: {
3730
+ query?: never;
3731
+ header?: never;
3732
+ path?: never;
3733
+ cookie?: never;
3734
+ };
3735
+ /**
3736
+ * Lists SDK keys in the resolved environment, cursor-paginated.
3737
+ * @description Like
3738
+ * List, ListSdkKeysQuery has no
3739
+ * `Skip`/`Take` (an environment's key count is small), so this fetches the full
3740
+ * set and pages in-memory to still expose the standard cursor contract.
3741
+ */
3742
+ get: {
3743
+ parameters: {
3744
+ query?: {
3745
+ limit?: number;
3746
+ cursor?: string;
3747
+ };
3748
+ header?: never;
3749
+ path: {
3750
+ org: string;
3751
+ project: string;
3752
+ env: string;
3753
+ };
3754
+ cookie?: never;
3755
+ };
3756
+ requestBody?: never;
3757
+ responses: {
3758
+ /** @description OK */
3759
+ 200: {
3760
+ headers: {
3761
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3762
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3763
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3764
+ [name: string]: unknown;
3765
+ };
3766
+ content: {
3767
+ "application/json": components["schemas"]["PublicSdkKeyResponsePagedResult"];
3768
+ };
3769
+ };
3770
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
3771
+ 401: {
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
+ };
3782
+ /** @description Not Found */
3783
+ 404: {
3784
+ headers: {
3785
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3786
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3787
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3788
+ [name: string]: unknown;
3789
+ };
3790
+ content: {
3791
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3792
+ };
3793
+ };
3794
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
3795
+ 429: {
3796
+ headers: {
3797
+ /** @description Number of seconds to wait before retrying the request. */
3798
+ "Retry-After"?: number;
3799
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3800
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3801
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3802
+ [name: string]: unknown;
3803
+ };
3804
+ content: {
3805
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3806
+ };
3807
+ };
3808
+ };
3809
+ };
3810
+ put?: never;
3811
+ /**
3812
+ * Creates an SDK key in the resolved environment.
3813
+ * @description Requires at least Member. Returns the
3814
+ * plaintext key exactly once — see the type-level remarks.
2458
3815
  */
2459
- delete: {
3816
+ post: {
2460
3817
  parameters: {
2461
3818
  query?: never;
2462
3819
  header?: never;
2463
3820
  path: {
2464
3821
  org: string;
2465
3822
  project: string;
2466
- flag: string;
2467
- variationId: string;
3823
+ env: string;
2468
3824
  };
2469
3825
  cookie?: never;
2470
3826
  };
2471
- requestBody?: never;
3827
+ requestBody?: {
3828
+ content: {
3829
+ "application/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3830
+ "text/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3831
+ "application/*+json": components["schemas"]["PublicCreateSdkKeyRequest"];
3832
+ };
3833
+ };
2472
3834
  responses: {
2473
- /** @description No Content */
2474
- 204: {
3835
+ /** @description Created */
3836
+ 201: {
2475
3837
  headers: {
2476
3838
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2477
3839
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2478
3840
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2479
3841
  [name: string]: unknown;
2480
3842
  };
2481
- content?: never;
3843
+ content: {
3844
+ "application/json": components["schemas"]["PublicCreateSdkKeyResponse"];
3845
+ };
2482
3846
  };
2483
3847
  /** @description Bad Request */
2484
3848
  400: {
@@ -2544,24 +3908,30 @@ export interface paths {
2544
3908
  };
2545
3909
  };
2546
3910
  };
3911
+ delete?: never;
2547
3912
  options?: never;
2548
3913
  head?: never;
2549
3914
  patch?: never;
2550
3915
  trace?: never;
2551
3916
  };
2552
- "/api/v1/me": {
3917
+ "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys/{sdkKey}": {
2553
3918
  parameters: {
2554
3919
  query?: never;
2555
3920
  header?: never;
2556
3921
  path?: never;
2557
3922
  cookie?: never;
2558
3923
  };
2559
- /** Returns the authenticated caller's public identity (see MeResponse). */
3924
+ /** Gets an SDK key in the resolved environment by id (guid-only — see the type-level remarks). */
2560
3925
  get: {
2561
3926
  parameters: {
2562
3927
  query?: never;
2563
3928
  header?: never;
2564
- path?: never;
3929
+ path: {
3930
+ org: string;
3931
+ project: string;
3932
+ env: string;
3933
+ sdkKey: string;
3934
+ };
2565
3935
  cookie?: never;
2566
3936
  };
2567
3937
  requestBody?: never;
@@ -2575,10 +3945,10 @@ export interface paths {
2575
3945
  [name: string]: unknown;
2576
3946
  };
2577
3947
  content: {
2578
- "application/json": components["schemas"]["MeResponse"];
3948
+ "application/json": components["schemas"]["PublicSdkKeyResponse"];
2579
3949
  };
2580
3950
  };
2581
- /** @description Unauthorized */
3951
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
2582
3952
  401: {
2583
3953
  headers: {
2584
3954
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
@@ -2590,6 +3960,18 @@ export interface paths {
2590
3960
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2591
3961
  };
2592
3962
  };
3963
+ /** @description Not Found */
3964
+ 404: {
3965
+ headers: {
3966
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3967
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3968
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3969
+ [name: string]: unknown;
3970
+ };
3971
+ content: {
3972
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3973
+ };
3974
+ };
2593
3975
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2594
3976
  429: {
2595
3977
  headers: {
@@ -2606,45 +3988,39 @@ export interface paths {
2606
3988
  };
2607
3989
  };
2608
3990
  };
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: {
3991
+ /**
3992
+ * Updates an SDK key's name/description.
3993
+ * @description Requires at least Member. Type and key material are immutable via this endpoint.
3994
+ */
3995
+ put: {
2626
3996
  parameters: {
2627
- query?: {
2628
- limit?: number;
2629
- cursor?: string;
2630
- };
3997
+ query?: never;
2631
3998
  header?: never;
2632
- path?: never;
3999
+ path: {
4000
+ org: string;
4001
+ project: string;
4002
+ env: string;
4003
+ sdkKey: string;
4004
+ };
2633
4005
  cookie?: never;
2634
4006
  };
2635
- requestBody?: never;
4007
+ requestBody?: {
4008
+ content: {
4009
+ "application/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
4010
+ "text/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
4011
+ "application/*+json": components["schemas"]["PublicUpdateSdkKeyRequest"];
4012
+ };
4013
+ };
2636
4014
  responses: {
2637
- /** @description OK */
2638
- 200: {
4015
+ /** @description No Content */
4016
+ 204: {
2639
4017
  headers: {
2640
4018
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2641
4019
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2642
4020
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2643
4021
  [name: string]: unknown;
2644
4022
  };
2645
- content: {
2646
- "application/json": components["schemas"]["OrganizationResponsePagedResult"];
2647
- };
4023
+ content?: never;
2648
4024
  };
2649
4025
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
2650
4026
  401: {
@@ -2658,6 +4034,30 @@ export interface paths {
2658
4034
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2659
4035
  };
2660
4036
  };
4037
+ /** @description Forbidden */
4038
+ 403: {
4039
+ headers: {
4040
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4041
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4042
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4043
+ [name: string]: unknown;
4044
+ };
4045
+ content: {
4046
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4047
+ };
4048
+ };
4049
+ /** @description Not Found */
4050
+ 404: {
4051
+ headers: {
4052
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4053
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4054
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4055
+ [name: string]: unknown;
4056
+ };
4057
+ content: {
4058
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4059
+ };
4060
+ };
2661
4061
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2662
4062
  429: {
2663
4063
  headers: {
@@ -2674,7 +4074,6 @@ export interface paths {
2674
4074
  };
2675
4075
  };
2676
4076
  };
2677
- put?: never;
2678
4077
  post?: never;
2679
4078
  delete?: never;
2680
4079
  options?: never;
@@ -2682,36 +4081,42 @@ export interface paths {
2682
4081
  patch?: never;
2683
4082
  trace?: never;
2684
4083
  };
2685
- "/api/v1/orgs/{org}": {
4084
+ "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys/{sdkKey}/revoke": {
2686
4085
  parameters: {
2687
4086
  query?: never;
2688
4087
  header?: never;
2689
4088
  path?: never;
2690
4089
  cookie?: never;
2691
4090
  };
2692
- /** Gets one of the caller's organizations by slug or id. */
2693
- get: {
4091
+ get?: never;
4092
+ put?: never;
4093
+ /**
4094
+ * Revokes an SDK key.
4095
+ * @description Requires at least Member.
4096
+ */
4097
+ post: {
2694
4098
  parameters: {
2695
4099
  query?: never;
2696
4100
  header?: never;
2697
4101
  path: {
2698
4102
  org: string;
4103
+ project: string;
4104
+ env: string;
4105
+ sdkKey: string;
2699
4106
  };
2700
4107
  cookie?: never;
2701
4108
  };
2702
4109
  requestBody?: never;
2703
4110
  responses: {
2704
- /** @description OK */
2705
- 200: {
4111
+ /** @description No Content */
4112
+ 204: {
2706
4113
  headers: {
2707
4114
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
2708
4115
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
2709
4116
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
2710
4117
  [name: string]: unknown;
2711
4118
  };
2712
- content: {
2713
- "application/json": components["schemas"]["OrganizationResponse"];
2714
- };
4119
+ content?: never;
2715
4120
  };
2716
4121
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
2717
4122
  401: {
@@ -2725,6 +4130,18 @@ export interface paths {
2725
4130
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2726
4131
  };
2727
4132
  };
4133
+ /** @description Forbidden */
4134
+ 403: {
4135
+ headers: {
4136
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4137
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4138
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4139
+ [name: string]: unknown;
4140
+ };
4141
+ content: {
4142
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4143
+ };
4144
+ };
2728
4145
  /** @description Not Found */
2729
4146
  404: {
2730
4147
  headers: {
@@ -2753,22 +4170,26 @@ export interface paths {
2753
4170
  };
2754
4171
  };
2755
4172
  };
2756
- put?: never;
2757
- post?: never;
2758
4173
  delete?: never;
2759
4174
  options?: never;
2760
4175
  head?: never;
2761
4176
  patch?: never;
2762
4177
  trace?: never;
2763
4178
  };
2764
- "/api/v1/orgs/{org}/projects": {
4179
+ "/api/v1/orgs/{org}/projects/{project}/segments": {
2765
4180
  parameters: {
2766
4181
  query?: never;
2767
4182
  header?: never;
2768
4183
  path?: never;
2769
4184
  cookie?: never;
2770
4185
  };
2771
- /** Lists projects in the resolved organization, cursor-paginated. */
4186
+ /**
4187
+ * Lists user segments in the resolved project, cursor-paginated.
4188
+ * @description Like
4189
+ * List, ListUserSegmentsQuery has no
4190
+ * `Skip`/`Take` (a project's segment count is small), so this fetches the full set
4191
+ * and pages in-memory to still expose the standard cursor contract.
4192
+ */
2772
4193
  get: {
2773
4194
  parameters: {
2774
4195
  query?: {
@@ -2778,6 +4199,7 @@ export interface paths {
2778
4199
  header?: never;
2779
4200
  path: {
2780
4201
  org: string;
4202
+ project: string;
2781
4203
  };
2782
4204
  cookie?: never;
2783
4205
  };
@@ -2792,7 +4214,7 @@ export interface paths {
2792
4214
  [name: string]: unknown;
2793
4215
  };
2794
4216
  content: {
2795
- "application/json": components["schemas"]["ProjectResponsePagedResult"];
4217
+ "application/json": components["schemas"]["PublicSegmentResponsePagedResult"];
2796
4218
  };
2797
4219
  };
2798
4220
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -2807,6 +4229,18 @@ export interface paths {
2807
4229
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2808
4230
  };
2809
4231
  };
4232
+ /** @description Not Found */
4233
+ 404: {
4234
+ headers: {
4235
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4236
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4237
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4238
+ [name: string]: unknown;
4239
+ };
4240
+ content: {
4241
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4242
+ };
4243
+ };
2810
4244
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2811
4245
  429: {
2812
4246
  headers: {
@@ -2825,8 +4259,12 @@ export interface paths {
2825
4259
  };
2826
4260
  put?: never;
2827
4261
  /**
2828
- * Creates a project in the resolved organization.
2829
- * @description Requires at least Member.
4262
+ * Creates a user segment in the resolved project.
4263
+ * @description Requires at least Member. Re-fetches via
4264
+ * ListUserSegmentsQuery (there is no single-segment query) and locates the new
4265
+ * segment by the id returned from CreateUserSegmentCommand so the response
4266
+ * reflects exactly what was persisted (e.g. server-assigned condition ids, folded into the
4267
+ * public shape via FromDto).
2830
4268
  */
2831
4269
  post: {
2832
4270
  parameters: {
@@ -2834,14 +4272,15 @@ export interface paths {
2834
4272
  header?: never;
2835
4273
  path: {
2836
4274
  org: string;
4275
+ project: string;
2837
4276
  };
2838
4277
  cookie?: never;
2839
4278
  };
2840
4279
  requestBody?: {
2841
4280
  content: {
2842
- "application/json": components["schemas"]["PublicCreateProjectRequest"];
2843
- "text/json": components["schemas"]["PublicCreateProjectRequest"];
2844
- "application/*+json": components["schemas"]["PublicCreateProjectRequest"];
4281
+ "application/json": components["schemas"]["PublicCreateSegmentRequest"];
4282
+ "text/json": components["schemas"]["PublicCreateSegmentRequest"];
4283
+ "application/*+json": components["schemas"]["PublicCreateSegmentRequest"];
2845
4284
  };
2846
4285
  };
2847
4286
  responses: {
@@ -2854,7 +4293,19 @@ export interface paths {
2854
4293
  [name: string]: unknown;
2855
4294
  };
2856
4295
  content: {
2857
- "application/json": components["schemas"]["ProjectResponse"];
4296
+ "application/json": components["schemas"]["PublicSegmentResponse"];
4297
+ };
4298
+ };
4299
+ /** @description Bad Request */
4300
+ 400: {
4301
+ headers: {
4302
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4303
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4304
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4305
+ [name: string]: unknown;
4306
+ };
4307
+ content: {
4308
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2858
4309
  };
2859
4310
  };
2860
4311
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -2881,6 +4332,18 @@ export interface paths {
2881
4332
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
2882
4333
  };
2883
4334
  };
4335
+ /** @description Not Found */
4336
+ 404: {
4337
+ headers: {
4338
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4339
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4340
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4341
+ [name: string]: unknown;
4342
+ };
4343
+ content: {
4344
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4345
+ };
4346
+ };
2884
4347
  /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
2885
4348
  429: {
2886
4349
  headers: {
@@ -2903,14 +4366,20 @@ export interface paths {
2903
4366
  patch?: never;
2904
4367
  trace?: never;
2905
4368
  };
2906
- "/api/v1/orgs/{org}/projects/{project}": {
4369
+ "/api/v1/orgs/{org}/projects/{project}/segments/{segment}": {
2907
4370
  parameters: {
2908
4371
  query?: never;
2909
4372
  header?: never;
2910
4373
  path?: never;
2911
4374
  cookie?: never;
2912
4375
  };
2913
- /** Gets a project in the resolved organization by key or id. */
4376
+ /**
4377
+ * Gets a user segment in the resolved project by key or id.
4378
+ * @description There is no
4379
+ * ListUserSegments-adjacent single-item
4380
+ * query, so this resolves `{segment}` then dispatches ListUserSegmentsQuery
4381
+ * and finds the match — see the type-level remarks for why a list+find is acceptable here.
4382
+ */
2914
4383
  get: {
2915
4384
  parameters: {
2916
4385
  query?: never;
@@ -2918,6 +4387,7 @@ export interface paths {
2918
4387
  path: {
2919
4388
  org: string;
2920
4389
  project: string;
4390
+ segment: string;
2921
4391
  };
2922
4392
  cookie?: never;
2923
4393
  };
@@ -2932,7 +4402,7 @@ export interface paths {
2932
4402
  [name: string]: unknown;
2933
4403
  };
2934
4404
  content: {
2935
- "application/json": components["schemas"]["ProjectResponse"];
4405
+ "application/json": components["schemas"]["PublicSegmentResponse"];
2936
4406
  };
2937
4407
  };
2938
4408
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -2976,8 +4446,8 @@ export interface paths {
2976
4446
  };
2977
4447
  };
2978
4448
  /**
2979
- * Updates a project's name/description.
2980
- * @description Requires at least Member.
4449
+ * Updates a segment's name/description/conditions.
4450
+ * @description Requires at least Member. The segment's key is immutable via this endpoint.
2981
4451
  */
2982
4452
  put: {
2983
4453
  parameters: {
@@ -2986,14 +4456,15 @@ export interface paths {
2986
4456
  path: {
2987
4457
  org: string;
2988
4458
  project: string;
4459
+ segment: string;
2989
4460
  };
2990
4461
  cookie?: never;
2991
4462
  };
2992
4463
  requestBody?: {
2993
4464
  content: {
2994
- "application/json": components["schemas"]["PublicUpdateProjectRequest"];
2995
- "text/json": components["schemas"]["PublicUpdateProjectRequest"];
2996
- "application/*+json": components["schemas"]["PublicUpdateProjectRequest"];
4465
+ "application/json": components["schemas"]["PublicUpdateSegmentRequest"];
4466
+ "text/json": components["schemas"]["PublicUpdateSegmentRequest"];
4467
+ "application/*+json": components["schemas"]["PublicUpdateSegmentRequest"];
2997
4468
  };
2998
4469
  };
2999
4470
  responses: {
@@ -3007,6 +4478,18 @@ export interface paths {
3007
4478
  };
3008
4479
  content?: never;
3009
4480
  };
4481
+ /** @description Bad Request */
4482
+ 400: {
4483
+ headers: {
4484
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4485
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4486
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4487
+ [name: string]: unknown;
4488
+ };
4489
+ content: {
4490
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4491
+ };
4492
+ };
3010
4493
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
3011
4494
  401: {
3012
4495
  headers: {
@@ -3061,7 +4544,7 @@ export interface paths {
3061
4544
  };
3062
4545
  post?: never;
3063
4546
  /**
3064
- * Deletes a project.
4547
+ * Deletes a user segment.
3065
4548
  * @description Requires at least Member.
3066
4549
  */
3067
4550
  delete: {
@@ -3071,6 +4554,7 @@ export interface paths {
3071
4554
  path: {
3072
4555
  org: string;
3073
4556
  project: string;
4557
+ segment: string;
3074
4558
  };
3075
4559
  cookie?: never;
3076
4560
  };
@@ -3143,7 +4627,7 @@ export interface paths {
3143
4627
  patch?: never;
3144
4628
  trace?: never;
3145
4629
  };
3146
- "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys": {
4630
+ "/api/v1/orgs/{org}/webhooks": {
3147
4631
  parameters: {
3148
4632
  query?: never;
3149
4633
  header?: never;
@@ -3151,11 +4635,8 @@ export interface paths {
3151
4635
  cookie?: never;
3152
4636
  };
3153
4637
  /**
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.
4638
+ * Lists the organization's webhook subscriptions, oldest first.
4639
+ * @description Requires Admin.
3159
4640
  */
3160
4641
  get: {
3161
4642
  parameters: {
@@ -3166,8 +4647,6 @@ export interface paths {
3166
4647
  header?: never;
3167
4648
  path: {
3168
4649
  org: string;
3169
- project: string;
3170
- env: string;
3171
4650
  };
3172
4651
  cookie?: never;
3173
4652
  };
@@ -3182,7 +4661,7 @@ export interface paths {
3182
4661
  [name: string]: unknown;
3183
4662
  };
3184
4663
  content: {
3185
- "application/json": components["schemas"]["PublicSdkKeyResponsePagedResult"];
4664
+ "application/json": components["schemas"]["PublicWebhookSubscriptionResponsePagedResult"];
3186
4665
  };
3187
4666
  };
3188
4667
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3197,6 +4676,18 @@ export interface paths {
3197
4676
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3198
4677
  };
3199
4678
  };
4679
+ /** @description Forbidden */
4680
+ 403: {
4681
+ headers: {
4682
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4683
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4684
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4685
+ [name: string]: unknown;
4686
+ };
4687
+ content: {
4688
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4689
+ };
4690
+ };
3200
4691
  /** @description Not Found */
3201
4692
  404: {
3202
4693
  headers: {
@@ -3227,9 +4718,9 @@ export interface paths {
3227
4718
  };
3228
4719
  put?: never;
3229
4720
  /**
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.
4721
+ * Creates a webhook subscription.
4722
+ * @description Requires Admin. The response carries the signing secret,
4723
+ * which is never shown again. Supports the `Idempotency-Key` header.
3233
4724
  */
3234
4725
  post: {
3235
4726
  parameters: {
@@ -3237,16 +4728,14 @@ export interface paths {
3237
4728
  header?: never;
3238
4729
  path: {
3239
4730
  org: string;
3240
- project: string;
3241
- env: string;
3242
4731
  };
3243
4732
  cookie?: never;
3244
4733
  };
3245
4734
  requestBody?: {
3246
4735
  content: {
3247
- "application/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3248
- "text/json": components["schemas"]["PublicCreateSdkKeyRequest"];
3249
- "application/*+json": components["schemas"]["PublicCreateSdkKeyRequest"];
4736
+ "application/json": components["schemas"]["PublicCreateWebhookSubscriptionRequest"];
4737
+ "text/json": components["schemas"]["PublicCreateWebhookSubscriptionRequest"];
4738
+ "application/*+json": components["schemas"]["PublicCreateWebhookSubscriptionRequest"];
3250
4739
  };
3251
4740
  };
3252
4741
  responses: {
@@ -3259,7 +4748,7 @@ export interface paths {
3259
4748
  [name: string]: unknown;
3260
4749
  };
3261
4750
  content: {
3262
- "application/json": components["schemas"]["PublicCreateSdkKeyResponse"];
4751
+ "application/json": components["schemas"]["PublicCreateWebhookSubscriptionResponse"];
3263
4752
  };
3264
4753
  };
3265
4754
  /** @description Bad Request */
@@ -3332,23 +4821,23 @@ export interface paths {
3332
4821
  patch?: never;
3333
4822
  trace?: never;
3334
4823
  };
3335
- "/api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys/{sdkKey}": {
4824
+ "/api/v1/orgs/{org}/webhooks/event-types": {
3336
4825
  parameters: {
3337
4826
  query?: never;
3338
4827
  header?: never;
3339
4828
  path?: never;
3340
4829
  cookie?: never;
3341
4830
  };
3342
- /** Gets an SDK key in the resolved environment by id (guid-only — see the type-level remarks). */
4831
+ /**
4832
+ * Lists the event types a subscription can filter on.
4833
+ * @description Requires Admin.
4834
+ */
3343
4835
  get: {
3344
4836
  parameters: {
3345
4837
  query?: never;
3346
4838
  header?: never;
3347
4839
  path: {
3348
4840
  org: string;
3349
- project: string;
3350
- env: string;
3351
- sdkKey: string;
3352
4841
  };
3353
4842
  cookie?: never;
3354
4843
  };
@@ -3363,7 +4852,7 @@ export interface paths {
3363
4852
  [name: string]: unknown;
3364
4853
  };
3365
4854
  content: {
3366
- "application/json": components["schemas"]["PublicSdkKeyResponse"];
4855
+ "application/json": string[];
3367
4856
  };
3368
4857
  };
3369
4858
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3378,6 +4867,18 @@ export interface paths {
3378
4867
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3379
4868
  };
3380
4869
  };
4870
+ /** @description Forbidden */
4871
+ 403: {
4872
+ headers: {
4873
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4874
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4875
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4876
+ [name: string]: unknown;
4877
+ };
4878
+ content: {
4879
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4880
+ };
4881
+ };
3381
4882
  /** @description Not Found */
3382
4883
  404: {
3383
4884
  headers: {
@@ -3406,9 +4907,105 @@ export interface paths {
3406
4907
  };
3407
4908
  };
3408
4909
  };
4910
+ put?: never;
4911
+ post?: never;
4912
+ delete?: never;
4913
+ options?: never;
4914
+ head?: never;
4915
+ patch?: never;
4916
+ trace?: never;
4917
+ };
4918
+ "/api/v1/orgs/{org}/webhooks/{id}": {
4919
+ parameters: {
4920
+ query?: never;
4921
+ header?: never;
4922
+ path?: never;
4923
+ cookie?: never;
4924
+ };
3409
4925
  /**
3410
- * Updates an SDK key's name/description.
3411
- * @description Requires at least Member. Type and key material are immutable via this endpoint.
4926
+ * Gets a webhook subscription by id.
4927
+ * @description Requires Admin. Never returns secret values.
4928
+ */
4929
+ get: {
4930
+ parameters: {
4931
+ query?: never;
4932
+ header?: never;
4933
+ path: {
4934
+ org: string;
4935
+ id: string;
4936
+ };
4937
+ cookie?: never;
4938
+ };
4939
+ requestBody?: never;
4940
+ responses: {
4941
+ /** @description OK */
4942
+ 200: {
4943
+ headers: {
4944
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4945
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4946
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4947
+ [name: string]: unknown;
4948
+ };
4949
+ content: {
4950
+ "application/json": components["schemas"]["PublicWebhookSubscriptionResponse"];
4951
+ };
4952
+ };
4953
+ /** @description Authentication is required, or the supplied API token is invalid or expired. */
4954
+ 401: {
4955
+ headers: {
4956
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4957
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4958
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4959
+ [name: string]: unknown;
4960
+ };
4961
+ content: {
4962
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4963
+ };
4964
+ };
4965
+ /** @description Forbidden */
4966
+ 403: {
4967
+ headers: {
4968
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4969
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4970
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4971
+ [name: string]: unknown;
4972
+ };
4973
+ content: {
4974
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4975
+ };
4976
+ };
4977
+ /** @description Not Found */
4978
+ 404: {
4979
+ headers: {
4980
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4981
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4982
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4983
+ [name: string]: unknown;
4984
+ };
4985
+ content: {
4986
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
4987
+ };
4988
+ };
4989
+ /** @description Rate limit exceeded. Retry after the interval indicated by the Retry-After header. */
4990
+ 429: {
4991
+ headers: {
4992
+ /** @description Number of seconds to wait before retrying the request. */
4993
+ "Retry-After"?: number;
4994
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
4995
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
4996
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
4997
+ [name: string]: unknown;
4998
+ };
4999
+ content: {
5000
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5001
+ };
5002
+ };
5003
+ };
5004
+ };
5005
+ /**
5006
+ * Replaces a webhook subscription's configuration.
5007
+ * @description Requires Admin. Omitted lists become empty,
5008
+ * which means "all".
3412
5009
  */
3413
5010
  put: {
3414
5011
  parameters: {
@@ -3416,17 +5013,15 @@ export interface paths {
3416
5013
  header?: never;
3417
5014
  path: {
3418
5015
  org: string;
3419
- project: string;
3420
- env: string;
3421
- sdkKey: string;
5016
+ id: string;
3422
5017
  };
3423
5018
  cookie?: never;
3424
5019
  };
3425
5020
  requestBody?: {
3426
5021
  content: {
3427
- "application/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
3428
- "text/json": components["schemas"]["PublicUpdateSdkKeyRequest"];
3429
- "application/*+json": components["schemas"]["PublicUpdateSdkKeyRequest"];
5022
+ "application/json": components["schemas"]["PublicUpdateWebhookSubscriptionRequest"];
5023
+ "text/json": components["schemas"]["PublicUpdateWebhookSubscriptionRequest"];
5024
+ "application/*+json": components["schemas"]["PublicUpdateWebhookSubscriptionRequest"];
3430
5025
  };
3431
5026
  };
3432
5027
  responses: {
@@ -3440,6 +5035,18 @@ export interface paths {
3440
5035
  };
3441
5036
  content?: never;
3442
5037
  };
5038
+ /** @description Bad Request */
5039
+ 400: {
5040
+ headers: {
5041
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5042
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5043
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5044
+ [name: string]: unknown;
5045
+ };
5046
+ content: {
5047
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5048
+ };
5049
+ };
3443
5050
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
3444
5051
  401: {
3445
5052
  headers: {
@@ -3493,34 +5100,17 @@ export interface paths {
3493
5100
  };
3494
5101
  };
3495
5102
  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
5103
  /**
3512
- * Revokes an SDK key.
3513
- * @description Requires at least Member.
5104
+ * Deletes a webhook subscription with its secrets and delivery log.
5105
+ * @description Requires Admin.
3514
5106
  */
3515
- post: {
5107
+ delete: {
3516
5108
  parameters: {
3517
5109
  query?: never;
3518
5110
  header?: never;
3519
5111
  path: {
3520
5112
  org: string;
3521
- project: string;
3522
- env: string;
3523
- sdkKey: string;
5113
+ id: string;
3524
5114
  };
3525
5115
  cookie?: never;
3526
5116
  };
@@ -3588,43 +5178,41 @@ export interface paths {
3588
5178
  };
3589
5179
  };
3590
5180
  };
3591
- delete?: never;
3592
5181
  options?: never;
3593
5182
  head?: never;
3594
5183
  patch?: never;
3595
5184
  trace?: never;
3596
5185
  };
3597
- "/api/v1/orgs/{org}/projects/{project}/segments": {
5186
+ "/api/v1/orgs/{org}/webhooks/{id}/secrets": {
3598
5187
  parameters: {
3599
5188
  query?: never;
3600
5189
  header?: never;
3601
5190
  path?: never;
3602
5191
  cookie?: never;
3603
5192
  };
5193
+ get?: never;
5194
+ put?: never;
3604
5195
  /**
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.
5196
+ * Adds a new active signing secret.
5197
+ * @description Requires Admin. The previous secret keeps signing until
5198
+ * you retire it, so receivers can switch over without dropping deliveries. The response
5199
+ * carries the new secret, which is never shown again. Supports the `Idempotency-Key`
5200
+ * header.
3610
5201
  */
3611
- get: {
5202
+ post: {
3612
5203
  parameters: {
3613
- query?: {
3614
- limit?: number;
3615
- cursor?: string;
3616
- };
5204
+ query?: never;
3617
5205
  header?: never;
3618
5206
  path: {
3619
5207
  org: string;
3620
- project: string;
5208
+ id: string;
3621
5209
  };
3622
5210
  cookie?: never;
3623
5211
  };
3624
5212
  requestBody?: never;
3625
5213
  responses: {
3626
- /** @description OK */
3627
- 200: {
5214
+ /** @description Created */
5215
+ 201: {
3628
5216
  headers: {
3629
5217
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3630
5218
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -3632,7 +5220,7 @@ export interface paths {
3632
5220
  [name: string]: unknown;
3633
5221
  };
3634
5222
  content: {
3635
- "application/json": components["schemas"]["PublicSegmentResponsePagedResult"];
5223
+ "application/json": components["schemas"]["PublicRotateWebhookSecretResponse"];
3636
5224
  };
3637
5225
  };
3638
5226
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3647,6 +5235,18 @@ export interface paths {
3647
5235
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3648
5236
  };
3649
5237
  };
5238
+ /** @description Forbidden */
5239
+ 403: {
5240
+ headers: {
5241
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5242
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5243
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5244
+ [name: string]: unknown;
5245
+ };
5246
+ content: {
5247
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5248
+ };
5249
+ };
3650
5250
  /** @description Not Found */
3651
5251
  404: {
3652
5252
  headers: {
@@ -3675,44 +5275,49 @@ export interface paths {
3675
5275
  };
3676
5276
  };
3677
5277
  };
5278
+ delete?: never;
5279
+ options?: never;
5280
+ head?: never;
5281
+ patch?: never;
5282
+ trace?: never;
5283
+ };
5284
+ "/api/v1/orgs/{org}/webhooks/{id}/secrets/{secretId}": {
5285
+ parameters: {
5286
+ query?: never;
5287
+ header?: never;
5288
+ path?: never;
5289
+ cookie?: never;
5290
+ };
5291
+ get?: never;
3678
5292
  put?: never;
5293
+ post?: never;
3679
5294
  /**
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).
5295
+ * Retires a signing secret.
5296
+ * @description Requires Admin. Refused with a 400 when it is the subscription's
5297
+ * last active secret — rotate first.
3686
5298
  */
3687
- post: {
5299
+ delete: {
3688
5300
  parameters: {
3689
5301
  query?: never;
3690
5302
  header?: never;
3691
5303
  path: {
3692
5304
  org: string;
3693
- project: string;
5305
+ id: string;
5306
+ secretId: string;
3694
5307
  };
3695
5308
  cookie?: never;
3696
5309
  };
3697
- requestBody?: {
3698
- content: {
3699
- "application/json": components["schemas"]["PublicCreateSegmentRequest"];
3700
- "text/json": components["schemas"]["PublicCreateSegmentRequest"];
3701
- "application/*+json": components["schemas"]["PublicCreateSegmentRequest"];
3702
- };
3703
- };
5310
+ requestBody?: never;
3704
5311
  responses: {
3705
- /** @description Created */
3706
- 201: {
5312
+ /** @description No Content */
5313
+ 204: {
3707
5314
  headers: {
3708
5315
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3709
5316
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
3710
5317
  "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
3711
5318
  [name: string]: unknown;
3712
5319
  };
3713
- content: {
3714
- "application/json": components["schemas"]["PublicSegmentResponse"];
3715
- };
5320
+ content?: never;
3716
5321
  };
3717
5322
  /** @description Bad Request */
3718
5323
  400: {
@@ -3778,41 +5383,40 @@ export interface paths {
3778
5383
  };
3779
5384
  };
3780
5385
  };
3781
- delete?: never;
3782
5386
  options?: never;
3783
5387
  head?: never;
3784
5388
  patch?: never;
3785
5389
  trace?: never;
3786
5390
  };
3787
- "/api/v1/orgs/{org}/projects/{project}/segments/{segment}": {
5391
+ "/api/v1/orgs/{org}/webhooks/{id}/test": {
3788
5392
  parameters: {
3789
5393
  query?: never;
3790
5394
  header?: never;
3791
5395
  path?: never;
3792
5396
  cookie?: never;
3793
5397
  };
5398
+ get?: never;
5399
+ put?: never;
3794
5400
  /**
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.
5401
+ * Queues one synthetic `flag.toggled` event for this subscription alone.
5402
+ * @description Requires Admin.
5403
+ * Delivery is asynchronous — read the delivery log for the outcome. Refused with a 400 when
5404
+ * the subscription is disabled.
3800
5405
  */
3801
- get: {
5406
+ post: {
3802
5407
  parameters: {
3803
5408
  query?: never;
3804
5409
  header?: never;
3805
5410
  path: {
3806
5411
  org: string;
3807
- project: string;
3808
- segment: string;
5412
+ id: string;
3809
5413
  };
3810
5414
  cookie?: never;
3811
5415
  };
3812
5416
  requestBody?: never;
3813
5417
  responses: {
3814
- /** @description OK */
3815
- 200: {
5418
+ /** @description Accepted */
5419
+ 202: {
3816
5420
  headers: {
3817
5421
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3818
5422
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -3820,7 +5424,19 @@ export interface paths {
3820
5424
  [name: string]: unknown;
3821
5425
  };
3822
5426
  content: {
3823
- "application/json": components["schemas"]["PublicSegmentResponse"];
5427
+ "application/json": components["schemas"]["PublicTestWebhookSubscriptionResponse"];
5428
+ };
5429
+ };
5430
+ /** @description Bad Request */
5431
+ 400: {
5432
+ headers: {
5433
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5434
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5435
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5436
+ [name: string]: unknown;
5437
+ };
5438
+ content: {
5439
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3824
5440
  };
3825
5441
  };
3826
5442
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3835,6 +5451,18 @@ export interface paths {
3835
5451
  "application/json": components["schemas"]["PublicApiErrorEnvelope"];
3836
5452
  };
3837
5453
  };
5454
+ /** @description Forbidden */
5455
+ 403: {
5456
+ headers: {
5457
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5458
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5459
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5460
+ [name: string]: unknown;
5461
+ };
5462
+ content: {
5463
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5464
+ };
5465
+ };
3838
5466
  /** @description Not Found */
3839
5467
  404: {
3840
5468
  headers: {
@@ -3863,41 +5491,40 @@ export interface paths {
3863
5491
  };
3864
5492
  };
3865
5493
  };
5494
+ delete?: never;
5495
+ options?: never;
5496
+ head?: never;
5497
+ patch?: never;
5498
+ trace?: never;
5499
+ };
5500
+ "/api/v1/orgs/{org}/webhooks/{id}/deliveries": {
5501
+ parameters: {
5502
+ query?: never;
5503
+ header?: never;
5504
+ path?: never;
5505
+ cookie?: never;
5506
+ };
3866
5507
  /**
3867
- * Updates a segment's name/description/conditions.
3868
- * @description Requires at least Member. The segment's key is immutable via this endpoint.
5508
+ * Lists a subscription's delivery attempts, most recent first.
5509
+ * @description Requires Admin.
3869
5510
  */
3870
- put: {
5511
+ get: {
3871
5512
  parameters: {
3872
- query?: never;
5513
+ query?: {
5514
+ limit?: number;
5515
+ cursor?: string;
5516
+ };
3873
5517
  header?: never;
3874
5518
  path: {
3875
5519
  org: string;
3876
- project: string;
3877
- segment: string;
5520
+ id: string;
3878
5521
  };
3879
5522
  cookie?: never;
3880
5523
  };
3881
- requestBody?: {
3882
- content: {
3883
- "application/json": components["schemas"]["PublicUpdateSegmentRequest"];
3884
- "text/json": components["schemas"]["PublicUpdateSegmentRequest"];
3885
- "application/*+json": components["schemas"]["PublicUpdateSegmentRequest"];
3886
- };
3887
- };
5524
+ requestBody?: never;
3888
5525
  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: {
5526
+ /** @description OK */
5527
+ 200: {
3901
5528
  headers: {
3902
5529
  "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
3903
5530
  "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
@@ -3905,7 +5532,7 @@ export interface paths {
3905
5532
  [name: string]: unknown;
3906
5533
  };
3907
5534
  content: {
3908
- "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5535
+ "application/json": components["schemas"]["PublicWebhookDeliveryResponsePagedResult"];
3909
5536
  };
3910
5537
  };
3911
5538
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
@@ -3960,19 +5587,37 @@ export interface paths {
3960
5587
  };
3961
5588
  };
3962
5589
  };
5590
+ put?: never;
3963
5591
  post?: never;
5592
+ delete?: never;
5593
+ options?: never;
5594
+ head?: never;
5595
+ patch?: never;
5596
+ trace?: never;
5597
+ };
5598
+ "/api/v1/orgs/{org}/webhooks/{id}/deliveries/{deliveryId}/redeliver": {
5599
+ parameters: {
5600
+ query?: never;
5601
+ header?: never;
5602
+ path?: never;
5603
+ cookie?: never;
5604
+ };
5605
+ get?: never;
5606
+ put?: never;
3964
5607
  /**
3965
- * Deletes a user segment.
3966
- * @description Requires at least Member.
5608
+ * Queues a finished delivery (succeeded or dead-lettered) to be sent again, restarting its retry schedule.
5609
+ * @description Requires Admin. Refused with a 400 when the delivery is still pending, when
5610
+ * the subscription is disabled, or when the subscription's current project, environment or
5611
+ * event-type filters no longer cover the delivery's event.
3967
5612
  */
3968
- delete: {
5613
+ post: {
3969
5614
  parameters: {
3970
5615
  query?: never;
3971
5616
  header?: never;
3972
5617
  path: {
3973
5618
  org: string;
3974
- project: string;
3975
- segment: string;
5619
+ id: string;
5620
+ deliveryId: string;
3976
5621
  };
3977
5622
  cookie?: never;
3978
5623
  };
@@ -3988,6 +5633,18 @@ export interface paths {
3988
5633
  };
3989
5634
  content?: never;
3990
5635
  };
5636
+ /** @description Bad Request */
5637
+ 400: {
5638
+ headers: {
5639
+ "X-RateLimit-Limit": components["headers"]["X-RateLimit-Limit"];
5640
+ "X-RateLimit-Remaining": components["headers"]["X-RateLimit-Remaining"];
5641
+ "X-RateLimit-Reset": components["headers"]["X-RateLimit-Reset"];
5642
+ [name: string]: unknown;
5643
+ };
5644
+ content: {
5645
+ "application/json": components["schemas"]["PublicApiErrorEnvelope"];
5646
+ };
5647
+ };
3991
5648
  /** @description Authentication is required, or the supplied API token is invalid or expired. */
3992
5649
  401: {
3993
5650
  headers: {
@@ -4040,6 +5697,7 @@ export interface paths {
4040
5697
  };
4041
5698
  };
4042
5699
  };
5700
+ delete?: never;
4043
5701
  options?: never;
4044
5702
  head?: never;
4045
5703
  patch?: never;
@@ -4092,10 +5750,10 @@ export interface components {
4092
5750
  name?: string | null;
4093
5751
  slug?: string | null;
4094
5752
  /**
4095
- * @description Allowed values: Solo, Pro, Business, Enterprise.
5753
+ * @description Allowed values: Solo, Team, Pro, Business, Enterprise.
4096
5754
  * @enum {string|null}
4097
5755
  */
4098
- plan?: "Solo" | "Pro" | "Business" | "Enterprise" | null;
5756
+ plan?: "Solo" | "Team" | "Pro" | "Business" | "Enterprise" | null;
4099
5757
  isActive?: boolean;
4100
5758
  /** Format: date-time */
4101
5759
  createdAt?: string;
@@ -4183,9 +5841,13 @@ export interface components {
4183
5841
  * `docsUrl`/`retryAfter`, breaking the published spec. !:JsonPropertyName
4184
5842
  * always wins over the policy, so these are pinned explicitly rather than relying on the
4185
5843
  * property names already being lowercase for the single-word ones.
4186
- * `did_you_mean` and `next_actions` are ADDITIVE optional keys (null → omitted via
4187
- * the global `DefaultIgnoreCondition = WhenWritingNull`), so pre-existing error bodies
4188
- * are byte-for-byte unchanged when they're absent.
5844
+ * `did_you_mean`, `next_actions` and `connection_id` are ADDITIVE optional keys
5845
+ * (null → omitted via the global `DefaultIgnoreCondition = WhenWritingNull`), so
5846
+ * pre-existing error bodies are byte-for-byte unchanged when they're absent.
5847
+ *
5848
+ * `connection_id` is present only on the `sso_required` error: the organization
5849
+ * requires single sign-on, and this credential didn't come through its identity provider.
5850
+ * `connection_id` identifies which SSO connection to sign in with.
4189
5851
  * @example {
4190
5852
  * "error": "not_found",
4191
5853
  * "message": "Flag 'new-checkout-flw' was not found in project 'checkout'.",
@@ -4212,6 +5874,8 @@ export interface components {
4212
5874
  retry_after?: number | null;
4213
5875
  did_you_mean?: string[] | null;
4214
5876
  next_actions?: components["schemas"]["NextAction"][] | null;
5877
+ /** Format: uuid */
5878
+ connection_id?: string | null;
4215
5879
  };
4216
5880
  /** @description Request-side condition group, symmetric with PublicConditionGroupResponse. */
4217
5881
  PublicConditionGroupRequest: {
@@ -4290,7 +5954,13 @@ export interface components {
4290
5954
  * schemaId-collision rationale (both controllers share one Swagger document). Type
4291
5955
  * is passed through verbatim to Type, which itself takes a
4292
5956
  * 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.
5957
+ * as the handler's own validation failure, not a controller-level 400. ExpiresAtUtc is
5958
+ * optional and advisory; a bare date (`2026-12-01`) means the end of that day in UTC, and a full
5959
+ * timestamp is stored exactly. It must be in the future and requires the flag-expiration feature
5960
+ * (400 `EXPIRY_IN_PAST` / `FEATURE_NOT_ENABLED`). OwnerEmail optionally names
5961
+ * the owner (an active member, matched case-insensitively; requires the flag-ownership feature —
5962
+ * 400 `OWNER_NOT_MEMBER` / `FEATURE_NOT_ENABLED`). Omitted, the owner is the caller when
5963
+ * the caller is a member, so a service token creates an unowned flag.
4294
5964
  * @example {
4295
5965
  * "key": "new-checkout-flow",
4296
5966
  * "name": "New Checkout Flow",
@@ -4329,6 +5999,9 @@ export interface components {
4329
5999
  tags?: string[] | null;
4330
6000
  initialVariations?: components["schemas"]["PublicCreateVariationDto"][] | null;
4331
6001
  clientSideVisible?: boolean;
6002
+ /** Format: date-time */
6003
+ expiresAtUtc?: string | null;
6004
+ ownerEmail?: string | null;
4332
6005
  };
4333
6006
  /**
4334
6007
  * @description Request body for `POST /api/v1/orgs/{org}/projects`. Named distinctly from the
@@ -4479,6 +6152,53 @@ export interface components {
4479
6152
  value?: string | null;
4480
6153
  description?: string | null;
4481
6154
  };
6155
+ /**
6156
+ * @description Creates a webhook subscription. `provider` is `GenericHttp`. Omit `eventTypes`,
6157
+ * `projectIds` or `environmentIds` (or send an empty list) to receive every event,
6158
+ * project or environment. A token restricted to specific projects must list at least one project,
6159
+ * all of them within its allowlist.
6160
+ * @example {
6161
+ * "name": "Checkout flag changes to Slack relay",
6162
+ * "url": "https://hooks.acme.example/featureflip",
6163
+ * "provider": "GenericHttp",
6164
+ * "eventTypes": [
6165
+ * "flag.toggled",
6166
+ * "flag.updated"
6167
+ * ],
6168
+ * "projectIds": [
6169
+ * "0197b69f-1a2b-7c3d-8e4f-5a6b7c8d9e0f"
6170
+ * ],
6171
+ * "environmentIds": [
6172
+ * "0197b69f-2b3c-7d4e-9f5a-6b7c8d9e0f1a"
6173
+ * ]
6174
+ * }
6175
+ */
6176
+ PublicCreateWebhookSubscriptionRequest: {
6177
+ name?: string | null;
6178
+ url?: string | null;
6179
+ /**
6180
+ * @description Allowed values: GenericHttp.
6181
+ * @enum {string|null}
6182
+ */
6183
+ provider?: "GenericHttp" | null;
6184
+ eventTypes?: string[] | null;
6185
+ projectIds?: string[] | null;
6186
+ environmentIds?: string[] | null;
6187
+ };
6188
+ /**
6189
+ * @description The created subscription's id and its signing secret. The secret is shown only here.
6190
+ * @example {
6191
+ * "id": "0197b6a4-6f7a-7b8c-9d0e-1f2a3b4c5d6e",
6192
+ * "secret": "whsec_q2Vb8XJ1s0mYpZ4tK7wRr3uN9cL6aD5eF1gH2iJ3kL4=",
6193
+ * "warning": "Store this secret securely — it will not be shown again."
6194
+ * }
6195
+ */
6196
+ PublicCreateWebhookSubscriptionResponse: {
6197
+ /** Format: uuid */
6198
+ id?: string;
6199
+ secret?: string | null;
6200
+ warning?: string | null;
6201
+ };
4482
6202
  /**
4483
6203
  * @description Public representation of an environment, returned by
4484
6204
  * `GET /api/v1/orgs/{org}/projects/{project}/environments` (list),
@@ -4588,6 +6308,10 @@ export interface components {
4588
6308
  createdAt?: string;
4589
6309
  /** Format: date-time */
4590
6310
  updatedAt?: string;
6311
+ /** Format: date-time */
6312
+ expiresAtUtc?: string | null;
6313
+ owner?: components["schemas"]["PublicFlagOwner"];
6314
+ removalPrUrl?: string | null;
4591
6315
  };
4592
6316
  /**
4593
6317
  * @description A page of results plus an opaque cursor for the next page, or null when this is the last
@@ -4621,6 +6345,13 @@ export interface components {
4621
6345
  [key: string]: components["schemas"]["ActionCapability"];
4622
6346
  };
4623
6347
  };
6348
+ /** @description A flag's owner as returned on flag reads. Null means the flag is unowned. */
6349
+ PublicFlagOwner: {
6350
+ /** Format: uuid */
6351
+ id?: string;
6352
+ email?: string | null;
6353
+ name?: string | null;
6354
+ };
4624
6355
  /**
4625
6356
  * @description One dead flag the Featureflip Flag Cleanup Action should remove, returned by
4626
6357
  * `GET .../flags/removal-candidates`. `Treatment` is the kill decision: true → keep the
@@ -4701,6 +6432,10 @@ export interface components {
4701
6432
  createdAt?: string;
4702
6433
  /** Format: date-time */
4703
6434
  updatedAt?: string;
6435
+ /** Format: date-time */
6436
+ expiresAtUtc?: string | null;
6437
+ owner?: components["schemas"]["PublicFlagOwner"];
6438
+ removalPrUrl?: string | null;
4704
6439
  /** @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
6440
  _actions?: {
4706
6441
  [key: string]: components["schemas"]["ActionCapability"];
@@ -4738,6 +6473,13 @@ export interface components {
4738
6473
  PublicReorderRulesRequest: {
4739
6474
  ruleIds?: string[] | null;
4740
6475
  };
6476
+ /** @description A newly added signing secret. The secret is shown only here. */
6477
+ PublicRotateWebhookSecretResponse: {
6478
+ /** Format: uuid */
6479
+ secretId?: string;
6480
+ secret?: string | null;
6481
+ warning?: string | null;
6482
+ };
4741
6483
  /**
4742
6484
  * @description Public representation of an SDK key, returned by
4743
6485
  * `GET /api/v1/orgs/{org}/projects/{project}/environments/{env}/sdk-keys` (list) and
@@ -4862,6 +6604,35 @@ export interface components {
4862
6604
  [key: string]: components["schemas"]["ActionCapability"];
4863
6605
  };
4864
6606
  };
6607
+ /**
6608
+ * @description Request body for `PUT /api/v1/orgs/{org}/projects/{project}/flags/{flag}/expiry`. Expiry is a
6609
+ * dedicated sub-resource, deliberately NOT a field on PublicUpdateFeatureFlagRequest: that
6610
+ * PUT is a full replace, so a new nullable field there would let any client that doesn't know about
6611
+ * expiry (the Terraform provider included) wipe it on every update. A bare date means the end of that
6612
+ * UTC day; a full timestamp is stored exactly.
6613
+ */
6614
+ PublicSetFlagExpiryRequest: {
6615
+ /** Format: date-time */
6616
+ expiresAtUtc?: string;
6617
+ };
6618
+ /**
6619
+ * @description Request body for `PUT /api/v1/orgs/{org}/projects/{project}/flags/{flag}/owner`. A dedicated
6620
+ * sub-resource for the same reason as expiry: the main flag PUT is a full replace, so an owner field
6621
+ * there would let every client that doesn't know about owners wipe one. `email` must belong
6622
+ * to an active member of the organization (case-insensitive).
6623
+ */
6624
+ PublicSetFlagOwnerRequest: {
6625
+ email?: string | null;
6626
+ };
6627
+ /**
6628
+ * @description Request body for `PUT /api/v1/orgs/{org}/projects/{project}/flags/{flag}/removal-pr`: the
6629
+ * pull request that removes this flag from code, as opened by the Featureflip Flag Cleanup Action.
6630
+ * A dedicated sub-resource for the same reason as expiry and owner. `url` must be an https
6631
+ * pull request URL (`https://{host}/{owner}/{repo}/pull/{number}`).
6632
+ */
6633
+ PublicSetFlagRemovalPrRequest: {
6634
+ url?: string | null;
6635
+ };
4865
6636
  /**
4866
6637
  * @description The full targeting configuration for a flag in a single environment, returned by
4867
6638
  * `GET .../targeting`. Maps 1:1 onto TargetingConfigurationDto — including
@@ -4925,6 +6696,13 @@ export interface components {
4925
6696
  [key: string]: components["schemas"]["ActionCapability"];
4926
6697
  };
4927
6698
  };
6699
+ /** @description The queued test event and its delivery. Poll the delivery log for the outcome. */
6700
+ PublicTestWebhookSubscriptionResponse: {
6701
+ /** Format: uuid */
6702
+ webhookEventId?: string;
6703
+ /** Format: uuid */
6704
+ webhookDeliveryId?: string;
6705
+ };
4928
6706
  /**
4929
6707
  * @description Request body for `POST .../flags/{flag}/environments/{env}/toggle`. Named distinctly from
4930
6708
  * the dashboard's own `ToggleFlagInEnvironmentRequest`
@@ -5049,6 +6827,18 @@ export interface components {
5049
6827
  value?: string | null;
5050
6828
  description?: string | null;
5051
6829
  };
6830
+ /**
6831
+ * @description Replaces a subscription's configuration (full replace — omitted lists become empty, meaning
6832
+ * "all"). `isEnabled` is required. The provider cannot be changed.
6833
+ */
6834
+ PublicUpdateWebhookSubscriptionRequest: {
6835
+ name?: string | null;
6836
+ url?: string | null;
6837
+ eventTypes?: string[] | null;
6838
+ projectIds?: string[] | null;
6839
+ environmentIds?: string[] | null;
6840
+ isEnabled?: boolean | null;
6841
+ };
5052
6842
  /**
5053
6843
  * @description A single variation on a flag, as returned in Variations.
5054
6844
  * @example {
@@ -5071,6 +6861,126 @@ export interface components {
5071
6861
  [key: string]: components["schemas"]["ActionCapability"];
5072
6862
  };
5073
6863
  };
6864
+ /**
6865
+ * @description One delivery attempt record. `status` is `Pending` (awaiting its first attempt,
6866
+ * backing off, or in flight), `Succeeded` or `DeadLettered`.
6867
+ */
6868
+ PublicWebhookDeliveryResponse: {
6869
+ /** Format: uuid */
6870
+ id?: string;
6871
+ /** Format: uuid */
6872
+ webhookEventId?: string;
6873
+ /**
6874
+ * @description Allowed values: Pending, Succeeded, DeadLettered.
6875
+ * @enum {string|null}
6876
+ */
6877
+ status?: "Pending" | "Succeeded" | "DeadLettered" | null;
6878
+ /** Format: int32 */
6879
+ attemptCount?: number;
6880
+ /** Format: date-time */
6881
+ nextAttemptAt?: string;
6882
+ /** Format: int32 */
6883
+ lastResponseStatusCode?: number | null;
6884
+ lastError?: string | null;
6885
+ /** Format: date-time */
6886
+ completedAt?: string | null;
6887
+ /** Format: date-time */
6888
+ createdAt?: string;
6889
+ };
6890
+ /**
6891
+ * @description A page of results plus an opaque cursor for the next page, or null when this is the last
6892
+ * page. Wire keys are frozen: `items` (already lowercase under the camelCase policy) and
6893
+ * `next_cursor` (pinned explicitly — the policy alone would emit `nextCursor`).
6894
+ */
6895
+ PublicWebhookDeliveryResponsePagedResult: {
6896
+ items?: components["schemas"]["PublicWebhookDeliveryResponse"][] | null;
6897
+ next_cursor?: string | null;
6898
+ };
6899
+ /** @description A signing secret's id and lifecycle. A secret with no `retiredAt` is active and signs every delivery. */
6900
+ PublicWebhookSecretResponse: {
6901
+ /** Format: uuid */
6902
+ id?: string;
6903
+ /** Format: date-time */
6904
+ createdAt?: string;
6905
+ /** Format: date-time */
6906
+ retiredAt?: string | null;
6907
+ };
6908
+ /**
6909
+ * @description A webhook subscription. Never carries secret material: signing secrets are listed by id and
6910
+ * lifecycle only — the value itself is returned once, when it is created or rotated.
6911
+ * `overPlanLimit` is true when the organization has more subscriptions than its plan
6912
+ * allows, which happens after a downgrade. The oldest subscriptions up to the limit keep
6913
+ * delivering. The rest receive nothing and cannot be re-enabled, tested or redelivered to until
6914
+ * the plan is upgraded or older subscriptions are deleted.
6915
+ * @example {
6916
+ * "id": "0197b6a4-6f7a-7b8c-9d0e-1f2a3b4c5d6e",
6917
+ * "name": "Checkout flag changes to Slack relay",
6918
+ * "url": "https://hooks.acme.example/featureflip",
6919
+ * "provider": "GenericHttp",
6920
+ * "isEnabled": true,
6921
+ * "eventTypes": [
6922
+ * "flag.toggled",
6923
+ * "flag.updated"
6924
+ * ],
6925
+ * "projectIds": [
6926
+ * "0197b69f-1a2b-7c3d-8e4f-5a6b7c8d9e0f"
6927
+ * ],
6928
+ * "environmentIds": [
6929
+ * "0197b69f-2b3c-7d4e-9f5a-6b7c8d9e0f1a"
6930
+ * ],
6931
+ * "consecutiveFailureCount": 0,
6932
+ * "createdAt": "2026-06-01T12:00:00Z",
6933
+ * "updatedAt": "2026-06-15T08:30:00Z",
6934
+ * "secrets": [
6935
+ * {
6936
+ * "id": "0197b6a4-7a8b-7c9d-8e0f-2a3b4c5d6e7f",
6937
+ * "createdAt": "2026-06-01T12:00:00Z"
6938
+ * }
6939
+ * ]
6940
+ * }
6941
+ */
6942
+ PublicWebhookSubscriptionResponse: {
6943
+ /** Format: uuid */
6944
+ id?: string;
6945
+ name?: string | null;
6946
+ url?: string | null;
6947
+ /**
6948
+ * @description Allowed values: GenericHttp.
6949
+ * @enum {string|null}
6950
+ */
6951
+ provider?: "GenericHttp" | null;
6952
+ isEnabled?: boolean;
6953
+ eventTypes?: string[] | null;
6954
+ projectIds?: string[] | null;
6955
+ environmentIds?: string[] | null;
6956
+ /** Format: int32 */
6957
+ consecutiveFailureCount?: number;
6958
+ /** Format: date-time */
6959
+ autoDisabledAt?: string | null;
6960
+ /** Format: date-time */
6961
+ createdAt?: string;
6962
+ /** Format: date-time */
6963
+ updatedAt?: string;
6964
+ secrets?: components["schemas"]["PublicWebhookSecretResponse"][] | null;
6965
+ overPlanLimit?: boolean;
6966
+ /** @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. */
6967
+ _actions?: {
6968
+ [key: string]: components["schemas"]["ActionCapability"];
6969
+ };
6970
+ };
6971
+ /**
6972
+ * @description A page of results plus an opaque cursor for the next page, or null when this is the last
6973
+ * page. Wire keys are frozen: `items` (already lowercase under the camelCase policy) and
6974
+ * `next_cursor` (pinned explicitly — the policy alone would emit `nextCursor`).
6975
+ */
6976
+ PublicWebhookSubscriptionResponsePagedResult: {
6977
+ items?: components["schemas"]["PublicWebhookSubscriptionResponse"][] | null;
6978
+ next_cursor?: string | null;
6979
+ /** @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. */
6980
+ _actions?: {
6981
+ [key: string]: components["schemas"]["ActionCapability"];
6982
+ };
6983
+ };
5074
6984
  };
5075
6985
  responses: never;
5076
6986
  parameters: never;