@cloudfleet/sdk 0.0.1-7aa2bb2 → 0.0.1-7ae8b0a

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.
@@ -368,24 +368,8 @@ export const ChartSchema = {
368
368
  },
369
369
  status: {
370
370
  type: 'string',
371
- description: 'Status of the chart deployment.',
372
- example: 'active',
373
- enum: [
374
- 'InstallSucceeded',
375
- 'InstallFailed',
376
- 'UpgradeSucceeded',
377
- 'UpgradeFailed',
378
- 'TestSucceeded',
379
- 'TestFailed',
380
- 'RollbackSucceeded',
381
- 'RollbackFailed',
382
- 'UninstallSucceeded',
383
- 'UninstallFailed',
384
- 'ArtifactFailed',
385
- 'DependencyNotReady',
386
- 'Progressing',
387
- 'SourceNotReady'
388
- ]
371
+ description: 'Status of the chart deployment (Flux HelmRelease Ready condition reason, e.g. InstallSucceeded, UpgradeFailed, Progressing).',
372
+ example: 'InstallSucceeded'
389
373
  },
390
374
  version_current: {
391
375
  type: 'string',
@@ -456,22 +440,12 @@ export const ClusterCreateInputSchema = {
456
440
  tier: {
457
441
  type: 'string',
458
442
  description: 'Tier of the cluster.',
443
+ default: 'basic',
459
444
  example: 'pro',
460
445
  enum: [
461
446
  'basic',
462
- 'pro'
463
- ]
464
- },
465
- region: {
466
- type: 'string',
467
- description: 'Cloudfleet control plane region. One of "staging-1a", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
468
- default: 'staging-1a',
469
- example: 'northamerica-central-1a',
470
- enum: [
471
- 'staging-1a',
472
- 'northamerica-central-1',
473
- 'europe-central-1a',
474
- 'northamerica-central-1a'
447
+ 'pro',
448
+ 'enterprise'
475
449
  ]
476
450
  },
477
451
  version_channel: {
@@ -479,20 +453,105 @@ export const ClusterCreateInputSchema = {
479
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-]+)*))?$',
480
454
  description: 'Version of the kubernetes cluster.',
481
455
  default: '1.x.x-cfke.x',
482
- example: '1.x.x-cfke.x',
456
+ example: '1.x.x-cfke.x'
457
+ },
458
+ release_channel: {
459
+ type: 'string',
460
+ description: 'Release channel for the cluster\'s control plane.',
461
+ default: 'rapid',
462
+ example: 'rapid',
483
463
  enum: [
484
- '1.x.x-cfke.x',
485
- '1.31.x-cfke.x',
486
- '1.32.x-cfke.x',
487
- '1.33.x-cfke.x'
464
+ 'rapid',
465
+ 'stable',
466
+ 'extended'
488
467
  ]
468
+ },
469
+ features: {
470
+ type: 'object',
471
+ properties: {
472
+ gpu_sharing_strategy: {
473
+ type: 'string',
474
+ description: 'GPU sharing strategy.',
475
+ default: 'none',
476
+ example: 'none',
477
+ enum: [
478
+ 'none',
479
+ 'mps',
480
+ 'time_slicing'
481
+ ]
482
+ },
483
+ gpu_max_shared_clients_per_gpu: {
484
+ type: 'integer',
485
+ minimum: 2,
486
+ maximum: 48,
487
+ description: 'Maximum number of pods that may share a single GPU.',
488
+ default: 4,
489
+ example: 10
490
+ },
491
+ cilium_socket_lb_host_namespace_only: {
492
+ type: 'boolean',
493
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
494
+ example: false
495
+ }
496
+ },
497
+ additionalProperties: false,
498
+ description: 'Cluster feature toggles.',
499
+ default: {
500
+ gpu_sharing_strategy: 'none',
501
+ gpu_max_shared_clients_per_gpu: 4,
502
+ cilium_socket_lb_host_namespace_only: false
503
+ }
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
+ networking: {
511
+ type: 'object',
512
+ properties: {
513
+ pod_cidr: {
514
+ type: 'string',
515
+ description: 'CIDR block for pod IPs.',
516
+ default: '10.244.0.0/16'
517
+ },
518
+ service_cidr: {
519
+ type: 'string',
520
+ description: 'CIDR block for service IPs.',
521
+ default: '10.96.0.0/12'
522
+ },
523
+ dual_stack: {
524
+ type: 'boolean',
525
+ description: 'Enable IPv4+IPv6 dual-stack networking.'
526
+ },
527
+ pod_cidr_v6: {
528
+ type: 'string',
529
+ description: 'IPv6 pod CIDR. Requires dual_stack.',
530
+ default: '2001:db8:1:2::/48'
531
+ },
532
+ service_cidr_v6: {
533
+ type: 'string',
534
+ description: 'IPv6 service CIDR. Requires dual_stack.',
535
+ default: '2001:db8:1:1::/112'
536
+ }
537
+ },
538
+ additionalProperties: false,
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
+ }
489
547
  }
490
548
  },
491
549
  required: [
492
550
  'name',
493
- 'tier'
551
+ 'region'
494
552
  ],
495
- 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.'
496
555
  };
497
556
  export const ClusterJoinInformationSchema = {
498
557
  type: 'object',
@@ -523,6 +582,11 @@ export const ClusterJoinInformationSchema = {
523
582
  description: 'Authentication key for the cluster.',
524
583
  example: 'tskey-auth-kBV8wr1dk911CNTRL-...'
525
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
+ },
526
590
  bootstrap_token: {
527
591
  type: 'string',
528
592
  description: 'Bootstrap token for the cluster.',
@@ -595,6 +659,7 @@ export const ClusterJoinInformationSchema = {
595
659
  'cluster_dns',
596
660
  'pod_cidr',
597
661
  'auth_key',
662
+ 'login_server',
598
663
  'bootstrap_token',
599
664
  'versions',
600
665
  'third_party_api_access_config'
@@ -615,24 +680,123 @@ export const ClusterSchema = {
615
680
  tier: {
616
681
  type: 'string',
617
682
  description: 'Tier of the cluster.',
683
+ default: 'basic',
618
684
  example: 'pro',
619
685
  enum: [
620
686
  'basic',
621
- 'pro'
687
+ 'pro',
688
+ 'enterprise'
622
689
  ]
623
690
  },
624
- region: {
691
+ version_channel: {
625
692
  type: 'string',
626
- description: 'Cloudfleet control plane region. One of "staging-1a", "northamerica-central-1", "europe-central-1a", "northamerica-central-1a". This field can not be updated after creation.',
627
- default: 'staging-1a',
628
- example: 'northamerica-central-1a',
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'
697
+ },
698
+ release_channel: {
699
+ type: 'string',
700
+ description: 'Release channel for the cluster\'s control plane.',
701
+ default: 'rapid',
702
+ example: 'rapid',
629
703
  enum: [
630
- 'staging-1a',
631
- 'northamerica-central-1',
632
- 'europe-central-1a',
633
- 'northamerica-central-1a'
704
+ 'rapid',
705
+ 'stable',
706
+ 'extended'
634
707
  ]
635
708
  },
709
+ features: {
710
+ type: 'object',
711
+ properties: {
712
+ gpu_sharing_strategy: {
713
+ type: 'string',
714
+ description: 'GPU sharing strategy.',
715
+ default: 'none',
716
+ example: 'none',
717
+ enum: [
718
+ 'none',
719
+ 'mps',
720
+ 'time_slicing'
721
+ ]
722
+ },
723
+ gpu_max_shared_clients_per_gpu: {
724
+ type: 'integer',
725
+ minimum: 2,
726
+ maximum: 48,
727
+ description: 'Maximum number of pods that may share a single GPU.',
728
+ default: 4,
729
+ example: 10
730
+ },
731
+ cilium_socket_lb_host_namespace_only: {
732
+ type: 'boolean',
733
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
734
+ example: false
735
+ }
736
+ },
737
+ required: [
738
+ 'gpu_sharing_strategy',
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'
789
+ ],
790
+ additionalProperties: false,
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
+ }
799
+ },
636
800
  id: {
637
801
  type: 'string',
638
802
  format: 'uuid',
@@ -641,16 +805,13 @@ export const ClusterSchema = {
641
805
  },
642
806
  status: {
643
807
  type: 'string',
644
- description: 'Status of the cluster. When creating a new cluster, set to `active`. When deleting a clusters, set to `deleted`.',
645
- example: 'active',
808
+ description: 'Status of the cluster.',
809
+ example: 'deployed',
646
810
  enum: [
647
- 'active',
648
- 'disabled',
649
- 'deleted',
650
811
  'creating',
651
812
  'deployed',
652
- 'failed',
653
- 'updating'
813
+ 'updating',
814
+ 'disabled'
654
815
  ]
655
816
  },
656
817
  endpoint: {
@@ -658,8 +819,8 @@ export const ClusterSchema = {
658
819
  {
659
820
  type: 'string',
660
821
  format: 'uri',
661
- description: 'URL signed by the private CA of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster. (Deprecated, use endpoint_public instead)',
662
- example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.cloudfleet.dev:6443'
822
+ description: 'URL signed by a public CA of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
823
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
663
824
  },
664
825
  {
665
826
  type: 'string',
@@ -674,7 +835,7 @@ export const ClusterSchema = {
674
835
  {
675
836
  type: 'string',
676
837
  format: 'uri',
677
- description: 'URL signed by a public CA of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
838
+ description: 'Deprecated alias of `endpoint`; retained for backward compatibility.',
678
839
  example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
679
840
  },
680
841
  {
@@ -709,21 +870,22 @@ export const ClusterSchema = {
709
870
  type: 'boolean',
710
871
  description: 'Indicates if the cluster is ready to be used.',
711
872
  example: true
712
- },
713
- version_channel: {
714
- type: 'string',
715
- 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-]+)*))?$',
716
- description: 'Version of the kubernetes cluster.',
717
- example: '1.x.x-cfke.x'
718
873
  }
719
874
  },
720
875
  required: [
721
876
  'name',
722
877
  'tier',
878
+ 'version_channel',
879
+ 'release_channel',
880
+ 'features',
881
+ 'region',
882
+ 'networking',
723
883
  'id',
724
- 'status'
884
+ 'status',
885
+ 'ready'
725
886
  ],
726
- 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.'
727
889
  };
728
890
  export const ClusterUpdateInputSchema = {
729
891
  type: 'object',
@@ -739,23 +901,74 @@ export const ClusterUpdateInputSchema = {
739
901
  tier: {
740
902
  type: 'string',
741
903
  description: 'Tier of the cluster.',
904
+ default: 'basic',
742
905
  example: 'pro',
743
906
  enum: [
744
907
  'basic',
745
- 'pro'
908
+ 'pro',
909
+ 'enterprise'
746
910
  ]
747
911
  },
748
912
  version_channel: {
749
913
  type: 'string',
750
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-]+)*))?$',
751
915
  description: 'Version of the kubernetes cluster.',
916
+ default: '1.x.x-cfke.x',
752
917
  example: '1.x.x-cfke.x'
918
+ },
919
+ release_channel: {
920
+ type: 'string',
921
+ description: 'Release channel for the cluster\'s control plane.',
922
+ default: 'rapid',
923
+ example: 'rapid',
924
+ enum: [
925
+ 'rapid',
926
+ 'stable',
927
+ 'extended'
928
+ ]
929
+ },
930
+ features: {
931
+ type: 'object',
932
+ properties: {
933
+ gpu_sharing_strategy: {
934
+ type: 'string',
935
+ description: 'GPU sharing strategy.',
936
+ default: 'none',
937
+ example: 'none',
938
+ enum: [
939
+ 'none',
940
+ 'mps',
941
+ 'time_slicing'
942
+ ]
943
+ },
944
+ gpu_max_shared_clients_per_gpu: {
945
+ type: 'integer',
946
+ minimum: 2,
947
+ maximum: 48,
948
+ description: 'Maximum number of pods that may share a single GPU.',
949
+ default: 4,
950
+ example: 10
951
+ },
952
+ cilium_socket_lb_host_namespace_only: {
953
+ type: 'boolean',
954
+ description: 'Restrict Cilium socket load-balancing to the host namespace. Required for the Tailscale operator and Istio.',
955
+ example: false
956
+ }
957
+ },
958
+ additionalProperties: false,
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
+ }
753
965
  }
754
966
  },
755
967
  required: [
756
- 'tier'
968
+ 'name'
757
969
  ],
758
- 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.'
759
972
  };
760
973
  export const FleetCreateInputSchema = {
761
974
  type: 'object',
@@ -801,8 +1014,8 @@ export const FleetCreateInputSchema = {
801
1014
  type: 'string',
802
1015
  maxLength: 64,
803
1016
  minLength: 64,
804
- pattern: '^[A-Za-z0-9]+$',
805
- 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.'
806
1019
  }
807
1020
  },
808
1021
  required: [
@@ -1027,7 +1240,8 @@ export const FleetCreateInputSchema = {
1027
1240
  'z3'
1028
1241
  ]
1029
1242
  },
1030
- description: 'Allowed values for `cfke.io/instance-family`.'
1243
+ description: 'Allowed values for `cfke.io/instance-family`.',
1244
+ default: []
1031
1245
  },
1032
1246
  'topology.kubernetes.io/region': {
1033
1247
  type: 'array',
@@ -1100,15 +1314,27 @@ export const FleetCreateInputSchema = {
1100
1314
  'us-west4'
1101
1315
  ]
1102
1316
  },
1103
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1317
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1318
+ default: []
1104
1319
  }
1105
1320
  },
1106
1321
  additionalProperties: false,
1107
- 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
+ }
1108
1334
  },
1109
1335
  scalingProfile: {
1110
1336
  type: 'string',
1111
- 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`).',
1112
1338
  default: 'conservative',
1113
1339
  example: 'conservative',
1114
1340
  enum: [
@@ -1128,7 +1354,8 @@ export const FleetCreateInputSchema = {
1128
1354
  required: [
1129
1355
  'id'
1130
1356
  ],
1131
- additionalProperties: false
1357
+ additionalProperties: false,
1358
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1132
1359
  };
1133
1360
  export const FleetSchema = {
1134
1361
  type: 'object',
@@ -1398,7 +1625,8 @@ export const FleetSchema = {
1398
1625
  'z3'
1399
1626
  ]
1400
1627
  },
1401
- description: 'Allowed values for `cfke.io/instance-family`.'
1628
+ description: 'Allowed values for `cfke.io/instance-family`.',
1629
+ default: []
1402
1630
  },
1403
1631
  'topology.kubernetes.io/region': {
1404
1632
  type: 'array',
@@ -1471,15 +1699,31 @@ export const FleetSchema = {
1471
1699
  'us-west4'
1472
1700
  ]
1473
1701
  },
1474
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1702
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1703
+ default: []
1475
1704
  }
1476
1705
  },
1706
+ required: [
1707
+ 'karpenter.sh/capacity-type',
1708
+ 'kubernetes.io/arch'
1709
+ ],
1477
1710
  additionalProperties: false,
1478
- 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.'
1711
+ 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.',
1712
+ default: {
1713
+ 'karpenter.sh/capacity-type': [
1714
+ 'on-demand',
1715
+ 'spot'
1716
+ ],
1717
+ 'kubernetes.io/arch': [
1718
+ 'amd64'
1719
+ ],
1720
+ 'cfke.io/instance-family': [],
1721
+ 'topology.kubernetes.io/region': []
1722
+ }
1479
1723
  },
1480
1724
  scalingProfile: {
1481
1725
  type: 'string',
1482
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1726
+ 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`).',
1483
1727
  default: 'conservative',
1484
1728
  example: 'conservative',
1485
1729
  enum: [
@@ -1494,13 +1738,38 @@ export const FleetSchema = {
1494
1738
  pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
1495
1739
  description: 'Unique identifier of the kubernetes fleet.',
1496
1740
  example: 'new-clouds-fleet'
1741
+ },
1742
+ ready: {
1743
+ type: 'boolean',
1744
+ description: 'Indicates whether the fleet configuration is healthy.',
1745
+ example: true
1746
+ },
1747
+ status_message: {
1748
+ type: 'string',
1749
+ description: 'Human-readable reason the fleet is not ready. Present only when `ready` is false.',
1750
+ example: 'Invalid provider permissions.'
1751
+ },
1752
+ created_at: {
1753
+ type: 'string',
1754
+ description: 'Creation date and time of the fleet.',
1755
+ example: '2024-09-12T09:11:27Z'
1756
+ },
1757
+ updated_at: {
1758
+ type: 'string',
1759
+ description: 'Date and time the fleet was last updated.',
1760
+ example: '2024-09-12T09:11:27Z'
1497
1761
  }
1498
1762
  },
1499
1763
  required: [
1764
+ 'constraints',
1500
1765
  'scalingProfile',
1501
- 'id'
1766
+ 'id',
1767
+ 'ready',
1768
+ 'created_at',
1769
+ 'updated_at'
1502
1770
  ],
1503
- additionalProperties: false
1771
+ additionalProperties: false,
1772
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1504
1773
  };
1505
1774
  export const FleetUpdateInputSchema = {
1506
1775
  type: 'object',
@@ -1546,8 +1815,8 @@ export const FleetUpdateInputSchema = {
1546
1815
  type: 'string',
1547
1816
  maxLength: 64,
1548
1817
  minLength: 64,
1549
- pattern: '^[A-Za-z0-9]+$',
1550
- description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
1818
+ pattern: '^([A-Za-z0-9]{64}|\\*{64})$',
1819
+ 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.'
1551
1820
  }
1552
1821
  },
1553
1822
  required: [
@@ -1586,7 +1855,11 @@ export const FleetUpdateInputSchema = {
1586
1855
  ]
1587
1856
  },
1588
1857
  minItems: 1,
1589
- description: 'Allowed values for `karpenter.sh/capacity-type`.'
1858
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1859
+ default: [
1860
+ 'on-demand',
1861
+ 'spot'
1862
+ ]
1590
1863
  },
1591
1864
  'kubernetes.io/arch': {
1592
1865
  type: 'array',
@@ -1598,7 +1871,10 @@ export const FleetUpdateInputSchema = {
1598
1871
  ]
1599
1872
  },
1600
1873
  minItems: 1,
1601
- description: 'Allowed values for `kubernetes.io/arch`.'
1874
+ description: 'Allowed values for `kubernetes.io/arch`.',
1875
+ default: [
1876
+ 'amd64'
1877
+ ]
1602
1878
  },
1603
1879
  'cfke.io/instance-family': {
1604
1880
  type: 'array',
@@ -1765,7 +2041,8 @@ export const FleetUpdateInputSchema = {
1765
2041
  'z3'
1766
2042
  ]
1767
2043
  },
1768
- description: 'Allowed values for `cfke.io/instance-family`.'
2044
+ description: 'Allowed values for `cfke.io/instance-family`.',
2045
+ default: []
1769
2046
  },
1770
2047
  'topology.kubernetes.io/region': {
1771
2048
  type: 'array',
@@ -1838,15 +2115,28 @@ export const FleetUpdateInputSchema = {
1838
2115
  'us-west4'
1839
2116
  ]
1840
2117
  },
1841
- description: 'Allowed values for `topology.kubernetes.io/region`.'
2118
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
2119
+ default: []
1842
2120
  }
1843
2121
  },
1844
2122
  additionalProperties: false,
1845
- 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.'
2123
+ 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.',
2124
+ default: {
2125
+ 'karpenter.sh/capacity-type': [
2126
+ 'on-demand',
2127
+ 'spot'
2128
+ ],
2129
+ 'kubernetes.io/arch': [
2130
+ 'amd64'
2131
+ ],
2132
+ 'cfke.io/instance-family': [],
2133
+ 'topology.kubernetes.io/region': []
2134
+ }
1846
2135
  },
1847
2136
  scalingProfile: {
1848
2137
  type: 'string',
1849
- description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
2138
+ 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`).',
2139
+ default: 'conservative',
1850
2140
  example: 'conservative',
1851
2141
  enum: [
1852
2142
  'aggressive',
@@ -1854,10 +2144,8 @@ export const FleetUpdateInputSchema = {
1854
2144
  ]
1855
2145
  }
1856
2146
  },
1857
- required: [
1858
- 'scalingProfile'
1859
- ],
1860
- additionalProperties: false
2147
+ additionalProperties: false,
2148
+ description: 'Mutable fleet configuration. Applied as a full overwrite: any omitted field is reset to its default rather than left unchanged.'
1861
2149
  };
1862
2150
  export const InviteCreateInputSchema = {
1863
2151
  type: 'object',
@@ -1931,6 +2219,170 @@ export const InviteSchema = {
1931
2219
  ],
1932
2220
  additionalProperties: false
1933
2221
  };
2222
+ export const InvoicePaymentAttemptSchema = {
2223
+ type: 'object',
2224
+ properties: {
2225
+ invoice_id: {
2226
+ type: 'string',
2227
+ description: 'Identifier of the invoice.',
2228
+ example: 'in_1234567890xCrwxghOTj1234'
2229
+ },
2230
+ number: {
2231
+ type: 'string',
2232
+ nullable: true,
2233
+ description: 'Invoice number. Null if the invoice has no number.',
2234
+ example: 'CF-0042'
2235
+ },
2236
+ amount: {
2237
+ type: 'number',
2238
+ format: 'float',
2239
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2240
+ example: 4200
2241
+ },
2242
+ currency: {
2243
+ type: 'string',
2244
+ description: 'Currency of the invoice.',
2245
+ example: 'eur'
2246
+ },
2247
+ status: {
2248
+ type: 'string',
2249
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2250
+ example: 'paid',
2251
+ enum: [
2252
+ 'paid',
2253
+ 'processing',
2254
+ 'requires_action',
2255
+ 'failed'
2256
+ ]
2257
+ },
2258
+ client_secret: {
2259
+ type: 'string',
2260
+ nullable: true,
2261
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2262
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
2263
+ },
2264
+ failure_code: {
2265
+ type: 'string',
2266
+ nullable: true,
2267
+ description: 'Decline code. Set only when `status` is `failed`.',
2268
+ example: 'insufficient_funds'
2269
+ },
2270
+ failure_message: {
2271
+ type: 'string',
2272
+ nullable: true,
2273
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2274
+ example: 'Your card has insufficient funds.'
2275
+ }
2276
+ },
2277
+ required: [
2278
+ 'invoice_id',
2279
+ 'number',
2280
+ 'amount',
2281
+ 'currency',
2282
+ 'status',
2283
+ 'client_secret',
2284
+ 'failure_code',
2285
+ 'failure_message'
2286
+ ],
2287
+ additionalProperties: false
2288
+ };
2289
+ export const InvoicePaymentResultSchema = {
2290
+ type: 'object',
2291
+ properties: {
2292
+ code: {
2293
+ type: 'string',
2294
+ 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).',
2295
+ example: 'partially_paid',
2296
+ enum: [
2297
+ 'paid',
2298
+ 'processing',
2299
+ 'action_required',
2300
+ 'partially_paid',
2301
+ 'failed',
2302
+ 'nothing_due',
2303
+ 'bank_transfer_due'
2304
+ ]
2305
+ },
2306
+ message: {
2307
+ type: 'string',
2308
+ description: 'Summary of the outcome, suitable for display.',
2309
+ example: '1 of 2 open invoices was paid. Invoice CF-0043 was declined: Your card has insufficient funds.'
2310
+ },
2311
+ results: {
2312
+ type: 'array',
2313
+ items: {
2314
+ type: 'object',
2315
+ properties: {
2316
+ invoice_id: {
2317
+ type: 'string',
2318
+ description: 'Identifier of the invoice.',
2319
+ example: 'in_1234567890xCrwxghOTj1234'
2320
+ },
2321
+ number: {
2322
+ type: 'string',
2323
+ description: 'Invoice number. Null if the invoice has no number.',
2324
+ example: 'CF-0042'
2325
+ },
2326
+ amount: {
2327
+ type: 'number',
2328
+ format: 'float',
2329
+ description: 'Amount outstanding when the charge was attempted, in the smallest currency unit.',
2330
+ example: 4200
2331
+ },
2332
+ currency: {
2333
+ type: 'string',
2334
+ description: 'Currency of the invoice.',
2335
+ example: 'eur'
2336
+ },
2337
+ status: {
2338
+ type: 'string',
2339
+ description: 'Outcome for this invoice: `paid`, `processing` (accepted, not yet settled), `requires_action` (awaiting customer authentication), or `failed` (declined).',
2340
+ example: 'paid',
2341
+ enum: [
2342
+ 'paid',
2343
+ 'processing',
2344
+ 'requires_action',
2345
+ 'failed'
2346
+ ]
2347
+ },
2348
+ client_secret: {
2349
+ type: 'string',
2350
+ description: 'Client secret used to complete customer authentication. Set only when `status` is `requires_action`.',
2351
+ example: 'pi_3MtwBwLkdIwHu7ix28a3tqPa_secret_YrKJUKribcBjcG8HVhfZluoGH'
2352
+ },
2353
+ failure_code: {
2354
+ type: 'string',
2355
+ description: 'Decline code. Set only when `status` is `failed`.',
2356
+ example: 'insufficient_funds'
2357
+ },
2358
+ failure_message: {
2359
+ type: 'string',
2360
+ description: 'Explanation of the decline, suitable for display. Set only when `status` is `failed`.',
2361
+ example: 'Your card has insufficient funds.'
2362
+ }
2363
+ },
2364
+ required: [
2365
+ 'invoice_id',
2366
+ 'number',
2367
+ 'amount',
2368
+ 'currency',
2369
+ 'status',
2370
+ 'client_secret',
2371
+ 'failure_code',
2372
+ 'failure_message'
2373
+ ],
2374
+ additionalProperties: false
2375
+ },
2376
+ description: 'One entry per invoice charged, oldest first.'
2377
+ }
2378
+ },
2379
+ required: [
2380
+ 'code',
2381
+ 'message',
2382
+ 'results'
2383
+ ],
2384
+ additionalProperties: false
2385
+ };
1934
2386
  export const InvoiceSchema = {
1935
2387
  type: 'object',
1936
2388
  properties: {
@@ -2265,6 +2717,17 @@ export const OrganizationSchema = {
2265
2717
  description: 'Available number of Pro clusters that can be created.',
2266
2718
  example: 999
2267
2719
  },
2720
+ enterprise_clusters_max: {
2721
+ type: 'integer',
2722
+ minimum: 0,
2723
+ description: 'Maximum number of Enterprise clusters that can be created.',
2724
+ example: 999
2725
+ },
2726
+ enterprise_clusters_available: {
2727
+ type: 'integer',
2728
+ description: 'Available number of Enterprise clusters that can be created.',
2729
+ example: 999
2730
+ },
2268
2731
  fleets_max: {
2269
2732
  type: 'integer',
2270
2733
  minimum: 0,
@@ -2284,7 +2747,7 @@ export const OrganizationSchema = {
2284
2747
  type: 'array',
2285
2748
  items: {
2286
2749
  type: 'string',
2287
- example: 'northamerica-central-1'
2750
+ example: 'northamerica-central-1a'
2288
2751
  },
2289
2752
  minItems: 1,
2290
2753
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -2326,6 +2789,8 @@ export const OrganizationSchema = {
2326
2789
  'basic_clusters_available',
2327
2790
  'pro_clusters_max',
2328
2791
  'pro_clusters_available',
2792
+ 'enterprise_clusters_max',
2793
+ 'enterprise_clusters_available',
2329
2794
  'fleets_max',
2330
2795
  'cluster_tiers',
2331
2796
  'regions',
@@ -2472,6 +2937,17 @@ export const PlatformQuotaSchema = {
2472
2937
  description: 'Available number of Pro clusters that can be created.',
2473
2938
  example: 999
2474
2939
  },
2940
+ enterprise_clusters_max: {
2941
+ type: 'integer',
2942
+ minimum: 0,
2943
+ description: 'Maximum number of Enterprise clusters that can be created.',
2944
+ example: 999
2945
+ },
2946
+ enterprise_clusters_available: {
2947
+ type: 'integer',
2948
+ description: 'Available number of Enterprise clusters that can be created.',
2949
+ example: 999
2950
+ },
2475
2951
  fleets_max: {
2476
2952
  type: 'integer',
2477
2953
  minimum: 0,
@@ -2491,7 +2967,7 @@ export const PlatformQuotaSchema = {
2491
2967
  type: 'array',
2492
2968
  items: {
2493
2969
  type: 'string',
2494
- example: 'northamerica-central-1'
2970
+ example: 'northamerica-central-1a'
2495
2971
  },
2496
2972
  minItems: 1,
2497
2973
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -2533,6 +3009,8 @@ export const PlatformQuotaSchema = {
2533
3009
  'basic_clusters_available',
2534
3010
  'pro_clusters_max',
2535
3011
  'pro_clusters_available',
3012
+ 'enterprise_clusters_max',
3013
+ 'enterprise_clusters_available',
2536
3014
  'fleets_max',
2537
3015
  'cluster_tiers',
2538
3016
  'regions',
@@ -2875,172 +3353,6 @@ export const TicketCreateInputSchema = {
2875
3353
  ],
2876
3354
  additionalProperties: false
2877
3355
  };
2878
- export const TicketListResponseSchema = {
2879
- type: 'object',
2880
- properties: {
2881
- items: {
2882
- type: 'array',
2883
- items: {
2884
- type: 'object',
2885
- properties: {
2886
- id: {
2887
- type: 'string',
2888
- description: 'Unique identifier of the ticket (Mongo ObjectId).',
2889
- example: '60c72b2f9f1b2c001f8e4d3a'
2890
- },
2891
- status: {
2892
- type: 'string',
2893
- description: 'Current state of the ticket.',
2894
- example: 'waiting_on_us',
2895
- enum: [
2896
- 'waiting_on_us',
2897
- 'waiting_on_user',
2898
- 'closed'
2899
- ]
2900
- },
2901
- category: {
2902
- type: 'string',
2903
- description: 'Ticket category.',
2904
- example: 'technical',
2905
- enum: [
2906
- 'billing',
2907
- 'technical',
2908
- 'general'
2909
- ]
2910
- },
2911
- summary: {
2912
- type: 'string',
2913
- description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
2914
- example: 'My cluster cannot reach the registry. Logs attached.'
2915
- },
2916
- closed_at: {
2917
- type: 'string',
2918
- format: 'date-time',
2919
- nullable: true,
2920
- description: 'Closure timestamp. Null while the ticket is open.',
2921
- example: '2026-05-18T16:08:14.338Z'
2922
- },
2923
- date_created: {
2924
- type: 'string',
2925
- format: 'date-time',
2926
- description: 'Creation date of the ticket. ISO 8601 UTC.',
2927
- example: '2026-05-11T16:08:14.338Z'
2928
- },
2929
- date_updated: {
2930
- type: 'string',
2931
- format: 'date-time',
2932
- description: 'Last update date of the ticket. ISO 8601 UTC.',
2933
- example: '2026-05-11T16:08:14.338Z'
2934
- },
2935
- messages: {
2936
- type: 'array',
2937
- items: {
2938
- type: 'object',
2939
- properties: {
2940
- id: {
2941
- type: 'string',
2942
- description: 'Unique identifier of the message (Mongo ObjectId).',
2943
- example: '60c72b2f9f1b2c001f8e4d3b'
2944
- },
2945
- type: {
2946
- type: 'string',
2947
- description: 'Message type. Internal notes are filtered out of customer-facing responses.',
2948
- example: 'customer_reply',
2949
- enum: [
2950
- 'customer_reply',
2951
- 'agent_reply'
2952
- ]
2953
- },
2954
- body: {
2955
- type: 'string',
2956
- description: 'Message body in markdown.',
2957
- example: 'Thanks — that resolved it on my side.'
2958
- },
2959
- author_first_name: {
2960
- type: 'string',
2961
- nullable: true,
2962
- description: 'First name of the author. Null when not provided.',
2963
- example: 'Jane'
2964
- },
2965
- author_last_name: {
2966
- type: 'string',
2967
- nullable: true,
2968
- description: 'Last name of the author. Null when not provided.',
2969
- example: 'Doe'
2970
- },
2971
- attachments: {
2972
- type: 'array',
2973
- items: {
2974
- type: 'object',
2975
- properties: {
2976
- id: {
2977
- type: 'string',
2978
- description: 'Unique identifier of the attachment (Mongo ObjectId).',
2979
- example: '60c72b2f9f1b2c001f8e4d3c'
2980
- },
2981
- filename: {
2982
- type: 'string',
2983
- description: 'Original filename as uploaded.',
2984
- example: 'debug.log'
2985
- },
2986
- content_type: {
2987
- type: 'string',
2988
- description: 'MIME content type of the attachment.',
2989
- example: 'text/plain'
2990
- },
2991
- size: {
2992
- type: 'integer',
2993
- description: 'Size of the attachment in bytes.',
2994
- example: 12345
2995
- }
2996
- },
2997
- required: [
2998
- 'id',
2999
- 'filename',
3000
- 'content_type',
3001
- 'size'
3002
- ],
3003
- additionalProperties: false
3004
- },
3005
- description: 'Attachments associated with this message.',
3006
- example: []
3007
- },
3008
- date_created: {
3009
- type: 'string',
3010
- format: 'date-time',
3011
- description: 'Creation date of the message. ISO 8601 UTC.',
3012
- example: '2026-05-11T16:08:14.338Z'
3013
- }
3014
- },
3015
- required: [
3016
- 'id',
3017
- 'type',
3018
- 'body',
3019
- 'date_created'
3020
- ],
3021
- additionalProperties: false
3022
- },
3023
- description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
3024
- }
3025
- },
3026
- required: [
3027
- 'id',
3028
- 'status',
3029
- 'category',
3030
- 'summary',
3031
- 'date_created',
3032
- 'date_updated'
3033
- ],
3034
- additionalProperties: false
3035
- },
3036
- description: 'Tickets for the organization, ordered newest first. Messages are omitted from list responses.'
3037
- }
3038
- },
3039
- required: [
3040
- 'items'
3041
- ],
3042
- additionalProperties: false
3043
- };
3044
3356
  export const TicketMessageInputSchema = {
3045
3357
  type: 'object',
3046
3358
  properties: {
@@ -3082,11 +3394,13 @@ export const TicketMessageSchema = {
3082
3394
  },
3083
3395
  author_first_name: {
3084
3396
  type: 'string',
3397
+ nullable: true,
3085
3398
  description: 'First name of the author. Null when not provided.',
3086
3399
  example: 'Jane'
3087
3400
  },
3088
3401
  author_last_name: {
3089
3402
  type: 'string',
3403
+ nullable: true,
3090
3404
  description: 'Last name of the author. Null when not provided.',
3091
3405
  example: 'Doe'
3092
3406
  },
@@ -3178,6 +3492,7 @@ export const TicketSchema = {
3178
3492
  closed_at: {
3179
3493
  type: 'string',
3180
3494
  format: 'date-time',
3495
+ nullable: true,
3181
3496
  description: 'Closure timestamp. Null while the ticket is open.',
3182
3497
  example: '2026-05-18T16:08:14.338Z'
3183
3498
  },
@@ -3402,12 +3717,21 @@ export const UsageFacetsSchema = {
3402
3717
  product: {
3403
3718
  type: 'array',
3404
3719
  items: {
3405
- type: 'string'
3720
+ type: 'string',
3721
+ enum: [
3722
+ 'cfke_controlplane_basic',
3723
+ 'cfke_controlplane_pro',
3724
+ 'cfke_controlplane_enterprise',
3725
+ 'cfke_connected_nodes_basic',
3726
+ 'cfke_connected_nodes_pro',
3727
+ 'cfke_connected_nodes_enterprise',
3728
+ 'cfcr_storage'
3729
+ ]
3406
3730
  },
3407
3731
  description: 'List of unique products',
3408
3732
  example: [
3409
- 'cfke_controlplane',
3410
- 'cfke_connected_nodes'
3733
+ 'cfke_controlplane_pro',
3734
+ 'cfke_connected_nodes_pro'
3411
3735
  ]
3412
3736
  }
3413
3737
  },
@@ -3434,7 +3758,16 @@ export const UsageResponseSchema = {
3434
3758
  product: {
3435
3759
  type: 'string',
3436
3760
  description: 'The product the usage is associated with',
3437
- example: 'cfke_controlplane'
3761
+ example: 'cfke_controlplane_pro',
3762
+ enum: [
3763
+ 'cfke_controlplane_basic',
3764
+ 'cfke_controlplane_pro',
3765
+ 'cfke_controlplane_enterprise',
3766
+ 'cfke_connected_nodes_basic',
3767
+ 'cfke_connected_nodes_pro',
3768
+ 'cfke_connected_nodes_enterprise',
3769
+ 'cfcr_storage'
3770
+ ]
3438
3771
  },
3439
3772
  value: {
3440
3773
  type: 'number',
@@ -3482,12 +3815,21 @@ export const UsageResponseSchema = {
3482
3815
  product: {
3483
3816
  type: 'array',
3484
3817
  items: {
3485
- type: 'string'
3818
+ type: 'string',
3819
+ enum: [
3820
+ 'cfke_controlplane_basic',
3821
+ 'cfke_controlplane_pro',
3822
+ 'cfke_controlplane_enterprise',
3823
+ 'cfke_connected_nodes_basic',
3824
+ 'cfke_connected_nodes_pro',
3825
+ 'cfke_connected_nodes_enterprise',
3826
+ 'cfcr_storage'
3827
+ ]
3486
3828
  },
3487
3829
  description: 'List of unique products',
3488
3830
  example: [
3489
- 'cfke_controlplane',
3490
- 'cfke_connected_nodes'
3831
+ 'cfke_controlplane_pro',
3832
+ 'cfke_connected_nodes_pro'
3491
3833
  ]
3492
3834
  }
3493
3835
  },
@@ -3517,7 +3859,16 @@ export const UsageSchema = {
3517
3859
  product: {
3518
3860
  type: 'string',
3519
3861
  description: 'The product the usage is associated with',
3520
- example: 'cfke_controlplane'
3862
+ example: 'cfke_controlplane_pro',
3863
+ enum: [
3864
+ 'cfke_controlplane_basic',
3865
+ 'cfke_controlplane_pro',
3866
+ 'cfke_controlplane_enterprise',
3867
+ 'cfke_connected_nodes_basic',
3868
+ 'cfke_connected_nodes_pro',
3869
+ 'cfke_connected_nodes_enterprise',
3870
+ 'cfcr_storage'
3871
+ ]
3521
3872
  },
3522
3873
  value: {
3523
3874
  type: 'number',