@featureflip/mcp 0.1.6 → 0.1.8

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