@cloudfleet/sdk 0.0.1-84adc67 → 0.0.1-8608ef2

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.
@@ -440,17 +440,14 @@ export const ClusterCreateInputSchema = {
440
440
  tier: {
441
441
  type: 'string',
442
442
  description: 'Tier of the cluster.',
443
+ default: 'basic',
443
444
  example: 'pro',
444
445
  enum: [
445
446
  'basic',
446
- 'pro'
447
+ 'pro',
448
+ 'enterprise'
447
449
  ]
448
450
  },
449
- region: {
450
- type: 'string',
451
- description: 'Cloudfleet control plane region. This field can not be updated after creation.',
452
- example: 'europe-central-1a'
453
- },
454
451
  version_channel: {
455
452
  type: 'string',
456
453
  pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
@@ -475,6 +472,7 @@ export const ClusterCreateInputSchema = {
475
472
  gpu_sharing_strategy: {
476
473
  type: 'string',
477
474
  description: 'GPU sharing strategy.',
475
+ default: 'none',
478
476
  example: 'none',
479
477
  enum: [
480
478
  'none',
@@ -484,9 +482,10 @@ export const ClusterCreateInputSchema = {
484
482
  },
485
483
  gpu_max_shared_clients_per_gpu: {
486
484
  type: 'integer',
487
- minimum: 1,
485
+ minimum: 2,
488
486
  maximum: 48,
489
487
  description: 'Maximum number of pods that may share a single GPU.',
488
+ default: 4,
490
489
  example: 10
491
490
  },
492
491
  cilium_socket_lb_host_namespace_only: {
@@ -495,62 +494,64 @@ export const ClusterCreateInputSchema = {
495
494
  example: false
496
495
  }
497
496
  },
498
- required: [
499
- 'gpu_sharing_strategy',
500
- 'gpu_max_shared_clients_per_gpu'
501
- ],
502
497
  additionalProperties: false,
503
498
  description: 'Cluster feature toggles.',
504
499
  default: {
505
500
  gpu_sharing_strategy: 'none',
506
- gpu_max_shared_clients_per_gpu: 10,
501
+ gpu_max_shared_clients_per_gpu: 4,
507
502
  cilium_socket_lb_host_namespace_only: false
508
503
  }
509
504
  },
505
+ region: {
506
+ type: 'string',
507
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
508
+ example: 'europe-central-1a'
509
+ },
510
510
  networking: {
511
511
  type: 'object',
512
512
  properties: {
513
513
  pod_cidr: {
514
514
  type: 'string',
515
515
  description: 'CIDR block for pod IPs.',
516
- example: '10.244.0.0/16'
516
+ default: '10.244.0.0/16'
517
517
  },
518
518
  service_cidr: {
519
519
  type: 'string',
520
520
  description: 'CIDR block for service IPs.',
521
- example: '10.96.0.0/12'
522
- },
523
- cluster_dns: {
524
- type: 'string',
525
- description: 'CoreDNS service IP.',
526
- example: '10.96.0.10'
521
+ default: '10.96.0.0/12'
527
522
  },
528
523
  dual_stack: {
529
524
  type: 'boolean',
530
- description: 'Enable IPv4+IPv6 dual-stack networking.',
531
- example: false
525
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
532
526
  },
533
527
  pod_cidr_v6: {
534
528
  type: 'string',
535
529
  description: 'IPv6 pod CIDR. Requires dual_stack.',
536
- example: 'fd00:10:244::/56'
530
+ default: '2001:db8:1:2::/48'
537
531
  },
538
532
  service_cidr_v6: {
539
533
  type: 'string',
540
534
  description: 'IPv6 service CIDR. Requires dual_stack.',
541
- example: 'fd00:10:96::/112'
535
+ default: '2001:db8:1:1::/112'
542
536
  }
543
537
  },
544
538
  additionalProperties: false,
545
- description: 'Cluster networking configuration. Immutable after creation.'
539
+ description: 'Cluster networking configuration. Immutable after creation.',
540
+ default: {
541
+ pod_cidr: '10.244.0.0/16',
542
+ service_cidr: '10.96.0.0/12',
543
+ dual_stack: false,
544
+ pod_cidr_v6: '2001:db8:1:2::/48',
545
+ service_cidr_v6: '2001:db8:1:1::/112'
546
+ }
546
547
  }
547
548
  },
548
549
  required: [
549
550
  'name',
550
- 'tier',
551
551
  'region'
552
552
  ],
553
- additionalProperties: false
553
+ additionalProperties: false,
554
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
554
555
  };
555
556
  export const ClusterJoinInformationSchema = {
556
557
  type: 'object',
@@ -581,6 +582,11 @@ export const ClusterJoinInformationSchema = {
581
582
  description: 'Authentication key for the cluster.',
582
583
  example: 'tskey-auth-kBV8wr1dk911CNTRL-...'
583
584
  },
585
+ login_server: {
586
+ type: 'string',
587
+ description: 'Coordination server the node registers against. Empty on data plane v1 clusters, where the node advertises its own tag instead. A non-empty value requires a client that declares the dataplane-v2 capability.',
588
+ example: 'https://415026b6-f00f-44f8-968d-fc6ef4d0fc6d.fabric.europe-central-1a.cfke.io'
589
+ },
584
590
  bootstrap_token: {
585
591
  type: 'string',
586
592
  description: 'Bootstrap token for the cluster.',
@@ -653,6 +659,7 @@ export const ClusterJoinInformationSchema = {
653
659
  'cluster_dns',
654
660
  'pod_cidr',
655
661
  'auth_key',
662
+ 'login_server',
656
663
  'bootstrap_token',
657
664
  'versions',
658
665
  'third_party_api_access_config'
@@ -673,57 +680,25 @@ export const ClusterSchema = {
673
680
  tier: {
674
681
  type: 'string',
675
682
  description: 'Tier of the cluster.',
683
+ default: 'basic',
676
684
  example: 'pro',
677
685
  enum: [
678
686
  'basic',
679
- 'pro'
687
+ 'pro',
688
+ 'enterprise'
680
689
  ]
681
690
  },
682
- region: {
691
+ version_channel: {
683
692
  type: 'string',
684
- description: 'Cloudfleet control plane region. This field can not be updated after creation.',
685
- example: 'europe-central-1a'
686
- },
687
- networking: {
688
- type: 'object',
689
- properties: {
690
- pod_cidr: {
691
- type: 'string',
692
- description: 'CIDR block for pod IPs.',
693
- example: '10.244.0.0/16'
694
- },
695
- service_cidr: {
696
- type: 'string',
697
- description: 'CIDR block for service IPs.',
698
- example: '10.96.0.0/12'
699
- },
700
- cluster_dns: {
701
- type: 'string',
702
- description: 'CoreDNS service IP.',
703
- example: '10.96.0.10'
704
- },
705
- dual_stack: {
706
- type: 'boolean',
707
- description: 'Enable IPv4+IPv6 dual-stack networking.',
708
- example: false
709
- },
710
- pod_cidr_v6: {
711
- type: 'string',
712
- description: 'IPv6 pod CIDR. Requires dual_stack.',
713
- example: 'fd00:10:244::/56'
714
- },
715
- service_cidr_v6: {
716
- type: 'string',
717
- description: 'IPv6 service CIDR. Requires dual_stack.',
718
- example: 'fd00:10:96::/112'
719
- }
720
- },
721
- additionalProperties: false,
722
- description: 'Cluster networking configuration. Immutable after creation.'
693
+ pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
694
+ description: 'Version of the kubernetes cluster.',
695
+ default: '1.x.x-cfke.x',
696
+ example: '1.x.x-cfke.x'
723
697
  },
724
698
  release_channel: {
725
699
  type: 'string',
726
700
  description: 'Release channel for the cluster\'s control plane.',
701
+ default: 'rapid',
727
702
  example: 'rapid',
728
703
  enum: [
729
704
  'rapid',
@@ -737,6 +712,7 @@ export const ClusterSchema = {
737
712
  gpu_sharing_strategy: {
738
713
  type: 'string',
739
714
  description: 'GPU sharing strategy.',
715
+ default: 'none',
740
716
  example: 'none',
741
717
  enum: [
742
718
  'none',
@@ -746,9 +722,10 @@ export const ClusterSchema = {
746
722
  },
747
723
  gpu_max_shared_clients_per_gpu: {
748
724
  type: 'integer',
749
- minimum: 1,
725
+ minimum: 2,
750
726
  maximum: 48,
751
727
  description: 'Maximum number of pods that may share a single GPU.',
728
+ default: 4,
752
729
  example: 10
753
730
  },
754
731
  cilium_socket_lb_host_namespace_only: {
@@ -759,10 +736,66 @@ export const ClusterSchema = {
759
736
  },
760
737
  required: [
761
738
  'gpu_sharing_strategy',
762
- 'gpu_max_shared_clients_per_gpu'
739
+ 'gpu_max_shared_clients_per_gpu',
740
+ 'cilium_socket_lb_host_namespace_only'
741
+ ],
742
+ additionalProperties: false,
743
+ description: 'Cluster feature toggles.',
744
+ default: {
745
+ gpu_sharing_strategy: 'none',
746
+ gpu_max_shared_clients_per_gpu: 4,
747
+ cilium_socket_lb_host_namespace_only: false
748
+ }
749
+ },
750
+ region: {
751
+ type: 'string',
752
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
753
+ example: 'europe-central-1a'
754
+ },
755
+ networking: {
756
+ type: 'object',
757
+ properties: {
758
+ pod_cidr: {
759
+ type: 'string',
760
+ description: 'CIDR block for pod IPs.',
761
+ default: '10.244.0.0/16'
762
+ },
763
+ service_cidr: {
764
+ type: 'string',
765
+ description: 'CIDR block for service IPs.',
766
+ default: '10.96.0.0/12'
767
+ },
768
+ dual_stack: {
769
+ type: 'boolean',
770
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
771
+ },
772
+ pod_cidr_v6: {
773
+ type: 'string',
774
+ description: 'IPv6 pod CIDR. Requires dual_stack.',
775
+ default: '2001:db8:1:2::/48'
776
+ },
777
+ service_cidr_v6: {
778
+ type: 'string',
779
+ description: 'IPv6 service CIDR. Requires dual_stack.',
780
+ default: '2001:db8:1:1::/112'
781
+ }
782
+ },
783
+ required: [
784
+ 'pod_cidr',
785
+ 'service_cidr',
786
+ 'dual_stack',
787
+ 'pod_cidr_v6',
788
+ 'service_cidr_v6'
763
789
  ],
764
790
  additionalProperties: false,
765
- description: 'Cluster feature toggles.'
791
+ description: 'Cluster networking configuration. Immutable after creation.',
792
+ default: {
793
+ pod_cidr: '10.244.0.0/16',
794
+ service_cidr: '10.96.0.0/12',
795
+ dual_stack: false,
796
+ pod_cidr_v6: '2001:db8:1:2::/48',
797
+ service_cidr_v6: '2001:db8:1:1::/112'
798
+ }
766
799
  },
767
800
  id: {
768
801
  type: 'string',
@@ -837,22 +870,22 @@ export const ClusterSchema = {
837
870
  type: 'boolean',
838
871
  description: 'Indicates if the cluster is ready to be used.',
839
872
  example: true
840
- },
841
- version_channel: {
842
- type: 'string',
843
- pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
844
- description: 'Version of the kubernetes cluster.',
845
- example: '1.x.x-cfke.x'
846
873
  }
847
874
  },
848
875
  required: [
849
876
  'name',
850
877
  'tier',
878
+ 'version_channel',
879
+ 'release_channel',
880
+ 'features',
851
881
  'region',
882
+ 'networking',
852
883
  'id',
853
- 'status'
884
+ 'status',
885
+ 'ready'
854
886
  ],
855
- additionalProperties: false
887
+ additionalProperties: false,
888
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
856
889
  };
857
890
  export const ClusterUpdateInputSchema = {
858
891
  type: 'object',
@@ -868,21 +901,25 @@ export const ClusterUpdateInputSchema = {
868
901
  tier: {
869
902
  type: 'string',
870
903
  description: 'Tier of the cluster.',
904
+ default: 'basic',
871
905
  example: 'pro',
872
906
  enum: [
873
907
  'basic',
874
- 'pro'
908
+ 'pro',
909
+ 'enterprise'
875
910
  ]
876
911
  },
877
912
  version_channel: {
878
913
  type: 'string',
879
914
  pattern: '^(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)\\.(x|X|0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$',
880
915
  description: 'Version of the kubernetes cluster.',
916
+ default: '1.x.x-cfke.x',
881
917
  example: '1.x.x-cfke.x'
882
918
  },
883
919
  release_channel: {
884
920
  type: 'string',
885
921
  description: 'Release channel for the cluster\'s control plane.',
922
+ default: 'rapid',
886
923
  example: 'rapid',
887
924
  enum: [
888
925
  'rapid',
@@ -896,6 +933,7 @@ export const ClusterUpdateInputSchema = {
896
933
  gpu_sharing_strategy: {
897
934
  type: 'string',
898
935
  description: 'GPU sharing strategy.',
936
+ default: 'none',
899
937
  example: 'none',
900
938
  enum: [
901
939
  'none',
@@ -905,9 +943,10 @@ export const ClusterUpdateInputSchema = {
905
943
  },
906
944
  gpu_max_shared_clients_per_gpu: {
907
945
  type: 'integer',
908
- minimum: 1,
946
+ minimum: 2,
909
947
  maximum: 48,
910
948
  description: 'Maximum number of pods that may share a single GPU.',
949
+ default: 4,
911
950
  example: 10
912
951
  },
913
952
  cilium_socket_lb_host_namespace_only: {
@@ -916,18 +955,20 @@ export const ClusterUpdateInputSchema = {
916
955
  example: false
917
956
  }
918
957
  },
919
- required: [
920
- 'gpu_sharing_strategy',
921
- 'gpu_max_shared_clients_per_gpu'
922
- ],
923
958
  additionalProperties: false,
924
- description: 'Cluster feature toggles.'
959
+ description: 'Cluster feature toggles.',
960
+ default: {
961
+ gpu_sharing_strategy: 'none',
962
+ gpu_max_shared_clients_per_gpu: 4,
963
+ cilium_socket_lb_host_namespace_only: false
964
+ }
925
965
  }
926
966
  },
927
967
  required: [
928
- 'tier'
968
+ 'name'
929
969
  ],
930
- additionalProperties: false
970
+ additionalProperties: false,
971
+ description: 'Mutable cluster configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
931
972
  };
932
973
  export const FleetCreateInputSchema = {
933
974
  type: 'object',
@@ -973,8 +1014,8 @@ export const FleetCreateInputSchema = {
973
1014
  type: 'string',
974
1015
  maxLength: 64,
975
1016
  minLength: 64,
976
- pattern: '^[A-Za-z0-9]+$',
977
- description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
1017
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1018
+ description: 'Hetzner Cloud API token with read/write access (64 alphanumeric characters). Write-only: reads return a redacted placeholder, never the token. Omit the field, or send the placeholder back unchanged, to keep the existing key. Send a new value to rotate it.'
978
1019
  }
979
1020
  },
980
1021
  required: [
@@ -1199,7 +1240,8 @@ export const FleetCreateInputSchema = {
1199
1240
  'z3'
1200
1241
  ]
1201
1242
  },
1202
- description: 'Allowed values for `cfke.io/instance-family`.'
1243
+ description: 'Allowed values for `cfke.io/instance-family`.',
1244
+ default: []
1203
1245
  },
1204
1246
  'topology.kubernetes.io/region': {
1205
1247
  type: 'array',
@@ -1272,15 +1314,27 @@ export const FleetCreateInputSchema = {
1272
1314
  'us-west4'
1273
1315
  ]
1274
1316
  },
1275
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1317
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1318
+ default: []
1276
1319
  }
1277
1320
  },
1278
1321
  additionalProperties: false,
1279
- description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
1322
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together.',
1323
+ default: {
1324
+ 'karpenter.sh/capacity-type': [
1325
+ 'on-demand',
1326
+ 'spot'
1327
+ ],
1328
+ 'kubernetes.io/arch': [
1329
+ 'amd64'
1330
+ ],
1331
+ 'cfke.io/instance-family': [],
1332
+ 'topology.kubernetes.io/region': []
1333
+ }
1280
1334
  },
1281
1335
  scalingProfile: {
1282
1336
  type: 'string',
1283
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1337
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet. Full-overwrite: omit to reset to the default (`conservative`).',
1284
1338
  default: 'conservative',
1285
1339
  example: 'conservative',
1286
1340
  enum: [
@@ -1288,6 +1342,44 @@ export const FleetCreateInputSchema = {
1288
1342
  'conservative'
1289
1343
  ]
1290
1344
  },
1345
+ taints: {
1346
+ type: 'array',
1347
+ items: {
1348
+ type: 'object',
1349
+ properties: {
1350
+ key: {
1351
+ type: 'string',
1352
+ description: 'Taint key: a Kubernetes qualified name with an optional DNS subdomain prefix. Keys under `node.kubernetes.io`, `node.cloudprovider.kubernetes.io`, `node.cilium.io`, `karpenter.sh` and `cfke.io` (and their subdomains) are reserved.',
1353
+ example: 'dedicated'
1354
+ },
1355
+ value: {
1356
+ type: 'string',
1357
+ maxLength: 63,
1358
+ pattern: '^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$',
1359
+ description: 'Taint value. Optional.',
1360
+ example: 'ci'
1361
+ },
1362
+ effect: {
1363
+ type: 'string',
1364
+ description: 'Taint effect.',
1365
+ example: 'NoSchedule',
1366
+ enum: [
1367
+ 'NoSchedule',
1368
+ 'PreferNoSchedule',
1369
+ 'NoExecute'
1370
+ ]
1371
+ }
1372
+ },
1373
+ required: [
1374
+ 'key',
1375
+ 'effect'
1376
+ ],
1377
+ additionalProperties: false
1378
+ },
1379
+ maxItems: 50,
1380
+ description: 'Taints applied to every node the fleet provisions, so only pods that tolerate them schedule there. Each key and effect pair may appear once. Full-overwrite: omit to remove all taints.',
1381
+ default: []
1382
+ },
1291
1383
  id: {
1292
1384
  type: 'string',
1293
1385
  maxLength: 63,
@@ -1300,7 +1392,8 @@ export const FleetCreateInputSchema = {
1300
1392
  required: [
1301
1393
  'id'
1302
1394
  ],
1303
- additionalProperties: false
1395
+ additionalProperties: false,
1396
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1304
1397
  };
1305
1398
  export const FleetSchema = {
1306
1399
  type: 'object',
@@ -1570,7 +1663,8 @@ export const FleetSchema = {
1570
1663
  'z3'
1571
1664
  ]
1572
1665
  },
1573
- description: 'Allowed values for `cfke.io/instance-family`.'
1666
+ description: 'Allowed values for `cfke.io/instance-family`.',
1667
+ default: []
1574
1668
  },
1575
1669
  'topology.kubernetes.io/region': {
1576
1670
  type: 'array',
@@ -1643,15 +1737,31 @@ export const FleetSchema = {
1643
1737
  'us-west4'
1644
1738
  ]
1645
1739
  },
1646
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1740
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1741
+ default: []
1647
1742
  }
1648
1743
  },
1744
+ required: [
1745
+ 'karpenter.sh/capacity-type',
1746
+ 'kubernetes.io/arch'
1747
+ ],
1649
1748
  additionalProperties: false,
1650
- description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
1749
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together.',
1750
+ default: {
1751
+ 'karpenter.sh/capacity-type': [
1752
+ 'on-demand',
1753
+ 'spot'
1754
+ ],
1755
+ 'kubernetes.io/arch': [
1756
+ 'amd64'
1757
+ ],
1758
+ 'cfke.io/instance-family': [],
1759
+ 'topology.kubernetes.io/region': []
1760
+ }
1651
1761
  },
1652
1762
  scalingProfile: {
1653
1763
  type: 'string',
1654
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1764
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet. Full-overwrite: omit to reset to the default (`conservative`).',
1655
1765
  default: 'conservative',
1656
1766
  example: 'conservative',
1657
1767
  enum: [
@@ -1659,6 +1769,44 @@ export const FleetSchema = {
1659
1769
  'conservative'
1660
1770
  ]
1661
1771
  },
1772
+ taints: {
1773
+ type: 'array',
1774
+ items: {
1775
+ type: 'object',
1776
+ properties: {
1777
+ key: {
1778
+ type: 'string',
1779
+ description: 'Taint key: a Kubernetes qualified name with an optional DNS subdomain prefix. Keys under `node.kubernetes.io`, `node.cloudprovider.kubernetes.io`, `node.cilium.io`, `karpenter.sh` and `cfke.io` (and their subdomains) are reserved.',
1780
+ example: 'dedicated'
1781
+ },
1782
+ value: {
1783
+ type: 'string',
1784
+ maxLength: 63,
1785
+ pattern: '^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$',
1786
+ description: 'Taint value. Optional.',
1787
+ example: 'ci'
1788
+ },
1789
+ effect: {
1790
+ type: 'string',
1791
+ description: 'Taint effect.',
1792
+ example: 'NoSchedule',
1793
+ enum: [
1794
+ 'NoSchedule',
1795
+ 'PreferNoSchedule',
1796
+ 'NoExecute'
1797
+ ]
1798
+ }
1799
+ },
1800
+ required: [
1801
+ 'key',
1802
+ 'effect'
1803
+ ],
1804
+ additionalProperties: false
1805
+ },
1806
+ maxItems: 50,
1807
+ description: 'Taints applied to every node the fleet provisions, so only pods that tolerate them schedule there. Each key and effect pair may appear once. Full-overwrite: omit to remove all taints.',
1808
+ default: []
1809
+ },
1662
1810
  id: {
1663
1811
  type: 'string',
1664
1812
  maxLength: 63,
@@ -1689,13 +1837,16 @@ export const FleetSchema = {
1689
1837
  }
1690
1838
  },
1691
1839
  required: [
1840
+ 'constraints',
1692
1841
  'scalingProfile',
1842
+ 'taints',
1693
1843
  'id',
1694
1844
  'ready',
1695
1845
  'created_at',
1696
1846
  'updated_at'
1697
1847
  ],
1698
- additionalProperties: false
1848
+ additionalProperties: false,
1849
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1699
1850
  };
1700
1851
  export const FleetUpdateInputSchema = {
1701
1852
  type: 'object',
@@ -1741,8 +1892,8 @@ export const FleetUpdateInputSchema = {
1741
1892
  type: 'string',
1742
1893
  maxLength: 64,
1743
1894
  minLength: 64,
1744
- pattern: '^[A-Za-z0-9]+$',
1745
- description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
1895
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1896
+ description: 'Hetzner Cloud API token with read/write access (64 alphanumeric characters). Write-only: reads return a redacted placeholder, never the token. Omit the field, or send the placeholder back unchanged, to keep the existing key. Send a new value to rotate it.'
1746
1897
  }
1747
1898
  },
1748
1899
  required: [
@@ -1781,7 +1932,11 @@ export const FleetUpdateInputSchema = {
1781
1932
  ]
1782
1933
  },
1783
1934
  minItems: 1,
1784
- description: 'Allowed values for `karpenter.sh/capacity-type`.'
1935
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1936
+ default: [
1937
+ 'on-demand',
1938
+ 'spot'
1939
+ ]
1785
1940
  },
1786
1941
  'kubernetes.io/arch': {
1787
1942
  type: 'array',
@@ -1793,7 +1948,10 @@ export const FleetUpdateInputSchema = {
1793
1948
  ]
1794
1949
  },
1795
1950
  minItems: 1,
1796
- description: 'Allowed values for `kubernetes.io/arch`.'
1951
+ description: 'Allowed values for `kubernetes.io/arch`.',
1952
+ default: [
1953
+ 'amd64'
1954
+ ]
1797
1955
  },
1798
1956
  'cfke.io/instance-family': {
1799
1957
  type: 'array',
@@ -1960,7 +2118,8 @@ export const FleetUpdateInputSchema = {
1960
2118
  'z3'
1961
2119
  ]
1962
2120
  },
1963
- description: 'Allowed values for `cfke.io/instance-family`.'
2121
+ description: 'Allowed values for `cfke.io/instance-family`.',
2122
+ default: []
1964
2123
  },
1965
2124
  'topology.kubernetes.io/region': {
1966
2125
  type: 'array',
@@ -2033,26 +2192,75 @@ export const FleetUpdateInputSchema = {
2033
2192
  'us-west4'
2034
2193
  ]
2035
2194
  },
2036
- description: 'Allowed values for `topology.kubernetes.io/region`.'
2195
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
2196
+ default: []
2037
2197
  }
2038
2198
  },
2039
2199
  additionalProperties: false,
2040
- description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together. Omit a field to place no restriction on that key.'
2200
+ description: 'Constraints define scheduling and provisioning requirements for the fleet. Each field restricts the values allowed for a given Kubernetes label key. Multiple constraints are ANDed together.',
2201
+ default: {
2202
+ 'karpenter.sh/capacity-type': [
2203
+ 'on-demand',
2204
+ 'spot'
2205
+ ],
2206
+ 'kubernetes.io/arch': [
2207
+ 'amd64'
2208
+ ],
2209
+ 'cfke.io/instance-family': [],
2210
+ 'topology.kubernetes.io/region': []
2211
+ }
2041
2212
  },
2042
2213
  scalingProfile: {
2043
2214
  type: 'string',
2044
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
2215
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet. Full-overwrite: omit to reset to the default (`conservative`).',
2216
+ default: 'conservative',
2045
2217
  example: 'conservative',
2046
2218
  enum: [
2047
2219
  'aggressive',
2048
2220
  'conservative'
2049
2221
  ]
2222
+ },
2223
+ taints: {
2224
+ type: 'array',
2225
+ items: {
2226
+ type: 'object',
2227
+ properties: {
2228
+ key: {
2229
+ type: 'string',
2230
+ description: 'Taint key: a Kubernetes qualified name with an optional DNS subdomain prefix. Keys under `node.kubernetes.io`, `node.cloudprovider.kubernetes.io`, `node.cilium.io`, `karpenter.sh` and `cfke.io` (and their subdomains) are reserved.',
2231
+ example: 'dedicated'
2232
+ },
2233
+ value: {
2234
+ type: 'string',
2235
+ maxLength: 63,
2236
+ pattern: '^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$',
2237
+ description: 'Taint value. Optional.',
2238
+ example: 'ci'
2239
+ },
2240
+ effect: {
2241
+ type: 'string',
2242
+ description: 'Taint effect.',
2243
+ example: 'NoSchedule',
2244
+ enum: [
2245
+ 'NoSchedule',
2246
+ 'PreferNoSchedule',
2247
+ 'NoExecute'
2248
+ ]
2249
+ }
2250
+ },
2251
+ required: [
2252
+ 'key',
2253
+ 'effect'
2254
+ ],
2255
+ additionalProperties: false
2256
+ },
2257
+ maxItems: 50,
2258
+ description: 'Taints applied to every node the fleet provisions, so only pods that tolerate them schedule there. Each key and effect pair may appear once. Full-overwrite: omit to remove all taints.',
2259
+ default: []
2050
2260
  }
2051
2261
  },
2052
- required: [
2053
- 'scalingProfile'
2054
- ],
2055
- additionalProperties: false
2262
+ additionalProperties: false,
2263
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
2056
2264
  };
2057
2265
  export const InviteCreateInputSchema = {
2058
2266
  type: 'object',
@@ -2126,6 +2334,170 @@ export const InviteSchema = {
2126
2334
  ],
2127
2335
  additionalProperties: false
2128
2336
  };
2337
+ export const InvoicePaymentAttemptSchema = {
2338
+ type: 'object',
2339
+ properties: {
2340
+ invoice_id: {
2341
+ type: 'string',
2342
+ description: 'Identifier of the invoice.',
2343
+ example: 'in_1234567890xCrwxghOTj1234'
2344
+ },
2345
+ number: {
2346
+ type: 'string',
2347
+ nullable: true,
2348
+ description: 'Invoice number. Null if the invoice has no number.',
2349
+ example: 'CF-0042'
2350
+ },
2351
+ amount: {
2352
+ type: 'number',
2353
+ format: 'float',
2354
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2355
+ example: 4200
2356
+ },
2357
+ currency: {
2358
+ type: 'string',
2359
+ description: 'Currency of the invoice.',
2360
+ example: 'eur'
2361
+ },
2362
+ status: {
2363
+ type: 'string',
2364
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2365
+ example: 'paid',
2366
+ enum: [
2367
+ 'paid',
2368
+ 'processing',
2369
+ 'requires_action',
2370
+ 'failed'
2371
+ ]
2372
+ },
2373
+ client_secret: {
2374
+ type: 'string',
2375
+ nullable: true,
2376
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2377
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
2378
+ },
2379
+ failure_code: {
2380
+ type: 'string',
2381
+ nullable: true,
2382
+ description: 'Decline code. Set only when `status` is `failed`.',
2383
+ example: 'insufficient_funds'
2384
+ },
2385
+ failure_message: {
2386
+ type: 'string',
2387
+ nullable: true,
2388
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2389
+ example: 'Your card has insufficient funds.'
2390
+ }
2391
+ },
2392
+ required: [
2393
+ 'invoice_id',
2394
+ 'number',
2395
+ 'amount',
2396
+ 'currency',
2397
+ 'status',
2398
+ 'client_secret',
2399
+ 'failure_code',
2400
+ 'failure_message'
2401
+ ],
2402
+ additionalProperties: false
2403
+ };
2404
+ export const InvoicePaymentResultSchema = {
2405
+ type: 'object',
2406
+ properties: {
2407
+ code: {
2408
+ type: 'string',
2409
+ description: 'Overall outcome: `paid` (nothing outstanding), `processing` (all accepted, not yet settled), `action_required` (one or more await customer authentication), `partially_paid`, `failed`, `nothing_due`, or `bank_transfer_due` (the organization pays by bank transfer; nothing was charged).',
2410
+ example: 'partially_paid',
2411
+ enum: [
2412
+ 'paid',
2413
+ 'processing',
2414
+ 'action_required',
2415
+ 'partially_paid',
2416
+ 'failed',
2417
+ 'nothing_due',
2418
+ 'bank_transfer_due'
2419
+ ]
2420
+ },
2421
+ message: {
2422
+ type: 'string',
2423
+ description: 'Summary of the outcome, suitable for display.',
2424
+ example: '1 of 2 open invoices was paid. Invoice CF-0043 was declined: Your card has insufficient funds.'
2425
+ },
2426
+ results: {
2427
+ type: 'array',
2428
+ items: {
2429
+ type: 'object',
2430
+ properties: {
2431
+ invoice_id: {
2432
+ type: 'string',
2433
+ description: 'Identifier of the invoice.',
2434
+ example: 'in_1234567890xCrwxghOTj1234'
2435
+ },
2436
+ number: {
2437
+ type: 'string',
2438
+ description: 'Invoice number. Null if the invoice has no number.',
2439
+ example: 'CF-0042'
2440
+ },
2441
+ amount: {
2442
+ type: 'number',
2443
+ format: 'float',
2444
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2445
+ example: 4200
2446
+ },
2447
+ currency: {
2448
+ type: 'string',
2449
+ description: 'Currency of the invoice.',
2450
+ example: 'eur'
2451
+ },
2452
+ status: {
2453
+ type: 'string',
2454
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2455
+ example: 'paid',
2456
+ enum: [
2457
+ 'paid',
2458
+ 'processing',
2459
+ 'requires_action',
2460
+ 'failed'
2461
+ ]
2462
+ },
2463
+ client_secret: {
2464
+ type: 'string',
2465
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2466
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
2467
+ },
2468
+ failure_code: {
2469
+ type: 'string',
2470
+ description: 'Decline code. Set only when `status` is `failed`.',
2471
+ example: 'insufficient_funds'
2472
+ },
2473
+ failure_message: {
2474
+ type: 'string',
2475
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2476
+ example: 'Your card has insufficient funds.'
2477
+ }
2478
+ },
2479
+ required: [
2480
+ 'invoice_id',
2481
+ 'number',
2482
+ 'amount',
2483
+ 'currency',
2484
+ 'status',
2485
+ 'client_secret',
2486
+ 'failure_code',
2487
+ 'failure_message'
2488
+ ],
2489
+ additionalProperties: false
2490
+ },
2491
+ description: 'One entry per invoice charged, oldest first.'
2492
+ }
2493
+ },
2494
+ required: [
2495
+ 'code',
2496
+ 'message',
2497
+ 'results'
2498
+ ],
2499
+ additionalProperties: false
2500
+ };
2129
2501
  export const InvoiceSchema = {
2130
2502
  type: 'object',
2131
2503
  properties: {
@@ -2460,6 +2832,17 @@ export const OrganizationSchema = {
2460
2832
  description: 'Available number of Pro clusters that can be created.',
2461
2833
  example: 999
2462
2834
  },
2835
+ enterprise_clusters_max: {
2836
+ type: 'integer',
2837
+ minimum: 0,
2838
+ description: 'Maximum number of Enterprise clusters that can be created.',
2839
+ example: 999
2840
+ },
2841
+ enterprise_clusters_available: {
2842
+ type: 'integer',
2843
+ description: 'Available number of Enterprise clusters that can be created.',
2844
+ example: 999
2845
+ },
2463
2846
  fleets_max: {
2464
2847
  type: 'integer',
2465
2848
  minimum: 0,
@@ -2521,6 +2904,8 @@ export const OrganizationSchema = {
2521
2904
  'basic_clusters_available',
2522
2905
  'pro_clusters_max',
2523
2906
  'pro_clusters_available',
2907
+ 'enterprise_clusters_max',
2908
+ 'enterprise_clusters_available',
2524
2909
  'fleets_max',
2525
2910
  'cluster_tiers',
2526
2911
  'regions',
@@ -2667,6 +3052,17 @@ export const PlatformQuotaSchema = {
2667
3052
  description: 'Available number of Pro clusters that can be created.',
2668
3053
  example: 999
2669
3054
  },
3055
+ enterprise_clusters_max: {
3056
+ type: 'integer',
3057
+ minimum: 0,
3058
+ description: 'Maximum number of Enterprise clusters that can be created.',
3059
+ example: 999
3060
+ },
3061
+ enterprise_clusters_available: {
3062
+ type: 'integer',
3063
+ description: 'Available number of Enterprise clusters that can be created.',
3064
+ example: 999
3065
+ },
2670
3066
  fleets_max: {
2671
3067
  type: 'integer',
2672
3068
  minimum: 0,
@@ -2728,6 +3124,8 @@ export const PlatformQuotaSchema = {
2728
3124
  'basic_clusters_available',
2729
3125
  'pro_clusters_max',
2730
3126
  'pro_clusters_available',
3127
+ 'enterprise_clusters_max',
3128
+ 'enterprise_clusters_available',
2731
3129
  'fleets_max',
2732
3130
  'cluster_tiers',
2733
3131
  'regions',
@@ -3070,172 +3468,6 @@ export const TicketCreateInputSchema = {
3070
3468
  ],
3071
3469
  additionalProperties: false
3072
3470
  };
3073
- export const TicketListResponseSchema = {
3074
- type: 'object',
3075
- properties: {
3076
- items: {
3077
- type: 'array',
3078
- items: {
3079
- type: 'object',
3080
- properties: {
3081
- id: {
3082
- type: 'string',
3083
- description: 'Unique identifier of the ticket (Mongo ObjectId).',
3084
- example: '60c72b2f9f1b2c001f8e4d3a'
3085
- },
3086
- status: {
3087
- type: 'string',
3088
- description: 'Current state of the ticket.',
3089
- example: 'waiting_on_us',
3090
- enum: [
3091
- 'waiting_on_us',
3092
- 'waiting_on_user',
3093
- 'closed'
3094
- ]
3095
- },
3096
- category: {
3097
- type: 'string',
3098
- description: 'Ticket category.',
3099
- example: 'technical',
3100
- enum: [
3101
- 'billing',
3102
- 'technical',
3103
- 'general'
3104
- ]
3105
- },
3106
- summary: {
3107
- type: 'string',
3108
- description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
3109
- example: 'My cluster cannot reach the registry. Logs attached.'
3110
- },
3111
- closed_at: {
3112
- type: 'string',
3113
- format: 'date-time',
3114
- nullable: true,
3115
- description: 'Closure timestamp. Null while the ticket is open.',
3116
- example: '2026-05-18T16:08:14.338Z'
3117
- },
3118
- date_created: {
3119
- type: 'string',
3120
- format: 'date-time',
3121
- description: 'Creation date of the ticket. ISO 8601 UTC.',
3122
- example: '2026-05-11T16:08:14.338Z'
3123
- },
3124
- date_updated: {
3125
- type: 'string',
3126
- format: 'date-time',
3127
- description: 'Last update date of the ticket. ISO 8601 UTC.',
3128
- example: '2026-05-11T16:08:14.338Z'
3129
- },
3130
- messages: {
3131
- type: 'array',
3132
- items: {
3133
- type: 'object',
3134
- properties: {
3135
- id: {
3136
- type: 'string',
3137
- description: 'Unique identifier of the message (Mongo ObjectId).',
3138
- example: '60c72b2f9f1b2c001f8e4d3b'
3139
- },
3140
- type: {
3141
- type: 'string',
3142
- description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3143
- example: 'customer_reply',
3144
- enum: [
3145
- 'customer_reply',
3146
- 'agent_reply'
3147
- ]
3148
- },
3149
- body: {
3150
- type: 'string',
3151
- description: 'Message body in markdown.',
3152
- example: 'Thanks — that resolved it on my side.'
3153
- },
3154
- author_first_name: {
3155
- type: 'string',
3156
- nullable: true,
3157
- description: 'First name of the author. Null when not provided.',
3158
- example: 'Jane'
3159
- },
3160
- author_last_name: {
3161
- type: 'string',
3162
- nullable: true,
3163
- description: 'Last name of the author. Null when not provided.',
3164
- example: 'Doe'
3165
- },
3166
- attachments: {
3167
- type: 'array',
3168
- items: {
3169
- type: 'object',
3170
- properties: {
3171
- id: {
3172
- type: 'string',
3173
- description: 'Unique identifier of the attachment (Mongo ObjectId).',
3174
- example: '60c72b2f9f1b2c001f8e4d3c'
3175
- },
3176
- filename: {
3177
- type: 'string',
3178
- description: 'Original filename as uploaded.',
3179
- example: 'debug.log'
3180
- },
3181
- content_type: {
3182
- type: 'string',
3183
- description: 'MIME content type of the attachment.',
3184
- example: 'text/plain'
3185
- },
3186
- size: {
3187
- type: 'integer',
3188
- description: 'Size of the attachment in bytes.',
3189
- example: 12345
3190
- }
3191
- },
3192
- required: [
3193
- 'id',
3194
- 'filename',
3195
- 'content_type',
3196
- 'size'
3197
- ],
3198
- additionalProperties: false
3199
- },
3200
- description: 'Attachments associated with this message.',
3201
- example: []
3202
- },
3203
- date_created: {
3204
- type: 'string',
3205
- format: 'date-time',
3206
- description: 'Creation date of the message. ISO 8601 UTC.',
3207
- example: '2026-05-11T16:08:14.338Z'
3208
- }
3209
- },
3210
- required: [
3211
- 'id',
3212
- 'type',
3213
- 'body',
3214
- 'date_created'
3215
- ],
3216
- additionalProperties: false
3217
- },
3218
- description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
3219
- }
3220
- },
3221
- required: [
3222
- 'id',
3223
- 'status',
3224
- 'category',
3225
- 'summary',
3226
- 'date_created',
3227
- 'date_updated'
3228
- ],
3229
- additionalProperties: false
3230
- },
3231
- description: 'Tickets for the organization, ordered newest first. Messages are omitted from list responses.'
3232
- }
3233
- },
3234
- required: [
3235
- 'items'
3236
- ],
3237
- additionalProperties: false
3238
- };
3239
3471
  export const TicketMessageInputSchema = {
3240
3472
  type: 'object',
3241
3473
  properties: {
@@ -3277,11 +3509,13 @@ export const TicketMessageSchema = {
3277
3509
  },
3278
3510
  author_first_name: {
3279
3511
  type: 'string',
3512
+ nullable: true,
3280
3513
  description: 'First name of the author. Null when not provided.',
3281
3514
  example: 'Jane'
3282
3515
  },
3283
3516
  author_last_name: {
3284
3517
  type: 'string',
3518
+ nullable: true,
3285
3519
  description: 'Last name of the author. Null when not provided.',
3286
3520
  example: 'Doe'
3287
3521
  },
@@ -3373,6 +3607,7 @@ export const TicketSchema = {
3373
3607
  closed_at: {
3374
3608
  type: 'string',
3375
3609
  format: 'date-time',
3610
+ nullable: true,
3376
3611
  description: 'Closure timestamp. Null while the ticket is open.',
3377
3612
  example: '2026-05-18T16:08:14.338Z'
3378
3613
  },
@@ -3597,12 +3832,21 @@ export const UsageFacetsSchema = {
3597
3832
  product: {
3598
3833
  type: 'array',
3599
3834
  items: {
3600
- type: 'string'
3835
+ type: 'string',
3836
+ enum: [
3837
+ 'cfke_controlplane_basic',
3838
+ 'cfke_controlplane_pro',
3839
+ 'cfke_controlplane_enterprise',
3840
+ 'cfke_connected_nodes_basic',
3841
+ 'cfke_connected_nodes_pro',
3842
+ 'cfke_connected_nodes_enterprise',
3843
+ 'cfcr_storage'
3844
+ ]
3601
3845
  },
3602
3846
  description: 'List of unique products',
3603
3847
  example: [
3604
- 'cfke_controlplane',
3605
- 'cfke_connected_nodes'
3848
+ 'cfke_controlplane_pro',
3849
+ 'cfke_connected_nodes_pro'
3606
3850
  ]
3607
3851
  }
3608
3852
  },
@@ -3629,7 +3873,16 @@ export const UsageResponseSchema = {
3629
3873
  product: {
3630
3874
  type: 'string',
3631
3875
  description: 'The product the usage is associated with',
3632
- example: 'cfke_controlplane'
3876
+ example: 'cfke_controlplane_pro',
3877
+ enum: [
3878
+ 'cfke_controlplane_basic',
3879
+ 'cfke_controlplane_pro',
3880
+ 'cfke_controlplane_enterprise',
3881
+ 'cfke_connected_nodes_basic',
3882
+ 'cfke_connected_nodes_pro',
3883
+ 'cfke_connected_nodes_enterprise',
3884
+ 'cfcr_storage'
3885
+ ]
3633
3886
  },
3634
3887
  value: {
3635
3888
  type: 'number',
@@ -3677,12 +3930,21 @@ export const UsageResponseSchema = {
3677
3930
  product: {
3678
3931
  type: 'array',
3679
3932
  items: {
3680
- type: 'string'
3933
+ type: 'string',
3934
+ enum: [
3935
+ 'cfke_controlplane_basic',
3936
+ 'cfke_controlplane_pro',
3937
+ 'cfke_controlplane_enterprise',
3938
+ 'cfke_connected_nodes_basic',
3939
+ 'cfke_connected_nodes_pro',
3940
+ 'cfke_connected_nodes_enterprise',
3941
+ 'cfcr_storage'
3942
+ ]
3681
3943
  },
3682
3944
  description: 'List of unique products',
3683
3945
  example: [
3684
- 'cfke_controlplane',
3685
- 'cfke_connected_nodes'
3946
+ 'cfke_controlplane_pro',
3947
+ 'cfke_connected_nodes_pro'
3686
3948
  ]
3687
3949
  }
3688
3950
  },
@@ -3712,7 +3974,16 @@ export const UsageSchema = {
3712
3974
  product: {
3713
3975
  type: 'string',
3714
3976
  description: 'The product the usage is associated with',
3715
- example: 'cfke_controlplane'
3977
+ example: 'cfke_controlplane_pro',
3978
+ enum: [
3979
+ 'cfke_controlplane_basic',
3980
+ 'cfke_controlplane_pro',
3981
+ 'cfke_controlplane_enterprise',
3982
+ 'cfke_connected_nodes_basic',
3983
+ 'cfke_connected_nodes_pro',
3984
+ 'cfke_connected_nodes_enterprise',
3985
+ 'cfcr_storage'
3986
+ ]
3716
3987
  },
3717
3988
  value: {
3718
3989
  type: 'number',