@cloudfleet/sdk 0.0.1-c4175a2 → 0.0.1-c4563f6

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.
@@ -2,6 +2,15 @@
2
2
  export const BillingContactSchema = {
3
3
  type: 'object',
4
4
  properties: {
5
+ type: {
6
+ type: 'string',
7
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
8
+ example: 'business',
9
+ enum: [
10
+ 'business',
11
+ 'personal'
12
+ ]
13
+ },
5
14
  company: {
6
15
  type: 'string',
7
16
  maxLength: 120,
@@ -207,6 +216,7 @@ export const BillingContactSchema = {
207
216
  }
208
217
  },
209
218
  required: [
219
+ 'type',
210
220
  'email',
211
221
  'individual_name'
212
222
  ],
@@ -358,24 +368,8 @@ export const ChartSchema = {
358
368
  },
359
369
  status: {
360
370
  type: 'string',
361
- description: 'Status of the chart deployment.',
362
- example: 'active',
363
- enum: [
364
- 'InstallSucceeded',
365
- 'InstallFailed',
366
- 'UpgradeSucceeded',
367
- 'UpgradeFailed',
368
- 'TestSucceeded',
369
- 'TestFailed',
370
- 'RollbackSucceeded',
371
- 'RollbackFailed',
372
- 'UninstallSucceeded',
373
- 'UninstallFailed',
374
- 'ArtifactFailed',
375
- 'DependencyNotReady',
376
- 'Progressing',
377
- 'SourceNotReady'
378
- ]
371
+ description: 'Status of the chart deployment (Flux HelmRelease Ready condition reason, e.g. InstallSucceeded, UpgradeFailed, Progressing).',
372
+ example: 'InstallSucceeded'
379
373
  },
380
374
  version_current: {
381
375
  type: 'string',
@@ -446,22 +440,12 @@ export const ClusterCreateInputSchema = {
446
440
  tier: {
447
441
  type: 'string',
448
442
  description: 'Tier of the cluster.',
443
+ default: 'basic',
449
444
  example: 'pro',
450
445
  enum: [
451
446
  'basic',
452
- 'pro'
453
- ]
454
- },
455
- region: {
456
- type: 'string',
457
- 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.',
458
- default: 'staging-1a',
459
- example: 'northamerica-central-1a',
460
- enum: [
461
- 'staging-1a',
462
- 'northamerica-central-1',
463
- 'europe-central-1a',
464
- 'northamerica-central-1a'
447
+ 'pro',
448
+ 'enterprise'
465
449
  ]
466
450
  },
467
451
  version_channel: {
@@ -469,20 +453,105 @@ export const ClusterCreateInputSchema = {
469
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-]+)*))?$',
470
454
  description: 'Version of the kubernetes cluster.',
471
455
  default: '1.x.x-cfke.x',
472
- 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',
473
463
  enum: [
474
- '1.x.x-cfke.x',
475
- '1.31.x-cfke.x',
476
- '1.32.x-cfke.x',
477
- '1.33.x-cfke.x'
464
+ 'rapid',
465
+ 'stable',
466
+ 'extended'
478
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
+ }
479
547
  }
480
548
  },
481
549
  required: [
482
550
  'name',
483
- 'tier'
551
+ 'region'
484
552
  ],
485
- 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.'
486
555
  };
487
556
  export const ClusterJoinInformationSchema = {
488
557
  type: 'object',
@@ -503,11 +572,21 @@ export const ClusterJoinInformationSchema = {
503
572
  description: 'Cluster DNS IP address. This is the IP address of the kube-dns service in the cluster.',
504
573
  example: '10.96.0.10'
505
574
  },
575
+ pod_cidr: {
576
+ type: 'string',
577
+ description: 'Pod CIDR for the cluster. Used to configure iptables rules on nodes to prevent Tailscale routing loops.',
578
+ example: '10.244.0.0/16'
579
+ },
506
580
  auth_key: {
507
581
  type: 'string',
508
582
  description: 'Authentication key for the cluster.',
509
583
  example: 'tskey-auth-kBV8wr1dk911CNTRL-...'
510
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
+ },
511
590
  bootstrap_token: {
512
591
  type: 'string',
513
592
  description: 'Bootstrap token for the cluster.',
@@ -578,7 +657,9 @@ export const ClusterJoinInformationSchema = {
578
657
  'certificate_authority',
579
658
  'endpoint',
580
659
  'cluster_dns',
660
+ 'pod_cidr',
581
661
  'auth_key',
662
+ 'login_server',
582
663
  'bootstrap_token',
583
664
  'versions',
584
665
  'third_party_api_access_config'
@@ -599,24 +680,123 @@ export const ClusterSchema = {
599
680
  tier: {
600
681
  type: 'string',
601
682
  description: 'Tier of the cluster.',
683
+ default: 'basic',
602
684
  example: 'pro',
603
685
  enum: [
604
686
  'basic',
605
- 'pro'
687
+ 'pro',
688
+ 'enterprise'
606
689
  ]
607
690
  },
608
- region: {
691
+ version_channel: {
692
+ type: 'string',
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: {
609
699
  type: 'string',
610
- 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.',
611
- default: 'staging-1a',
612
- example: 'northamerica-central-1a',
700
+ description: 'Release channel for the cluster\'s control plane.',
701
+ default: 'rapid',
702
+ example: 'rapid',
613
703
  enum: [
614
- 'staging-1a',
615
- 'northamerica-central-1',
616
- 'europe-central-1a',
617
- 'northamerica-central-1a'
704
+ 'rapid',
705
+ 'stable',
706
+ 'extended'
618
707
  ]
619
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
+ },
620
800
  id: {
621
801
  type: 'string',
622
802
  format: 'uuid',
@@ -625,16 +805,13 @@ export const ClusterSchema = {
625
805
  },
626
806
  status: {
627
807
  type: 'string',
628
- description: 'Status of the cluster. When creating a new cluster, set to `active`. When deleting a clusters, set to `deleted`.',
629
- example: 'active',
808
+ description: 'Status of the cluster.',
809
+ example: 'deployed',
630
810
  enum: [
631
- 'active',
632
- 'disabled',
633
- 'deleted',
634
811
  'creating',
635
812
  'deployed',
636
- 'failed',
637
- 'updating'
813
+ 'updating',
814
+ 'disabled'
638
815
  ]
639
816
  },
640
817
  endpoint: {
@@ -642,8 +819,24 @@ export const ClusterSchema = {
642
819
  {
643
820
  type: 'string',
644
821
  format: 'uri',
645
- description: 'URL of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
646
- 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'
824
+ },
825
+ {
826
+ type: 'string',
827
+ enum: [
828
+ ''
829
+ ]
830
+ }
831
+ ]
832
+ },
833
+ endpoint_public: {
834
+ anyOf: [
835
+ {
836
+ type: 'string',
837
+ format: 'uri',
838
+ description: 'Deprecated alias of `endpoint`; retained for backward compatibility.',
839
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
647
840
  },
648
841
  {
649
842
  type: 'string',
@@ -677,21 +870,22 @@ export const ClusterSchema = {
677
870
  type: 'boolean',
678
871
  description: 'Indicates if the cluster is ready to be used.',
679
872
  example: true
680
- },
681
- version_channel: {
682
- type: 'string',
683
- 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-]+)*))?$',
684
- description: 'Version of the kubernetes cluster.',
685
- example: '1.x.x-cfke.x'
686
873
  }
687
874
  },
688
875
  required: [
689
876
  'name',
690
877
  'tier',
878
+ 'version_channel',
879
+ 'release_channel',
880
+ 'features',
881
+ 'region',
882
+ 'networking',
691
883
  'id',
692
- 'status'
884
+ 'status',
885
+ 'ready'
693
886
  ],
694
- 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.'
695
889
  };
696
890
  export const ClusterUpdateInputSchema = {
697
891
  type: 'object',
@@ -707,23 +901,74 @@ export const ClusterUpdateInputSchema = {
707
901
  tier: {
708
902
  type: 'string',
709
903
  description: 'Tier of the cluster.',
904
+ default: 'basic',
710
905
  example: 'pro',
711
906
  enum: [
712
907
  'basic',
713
- 'pro'
908
+ 'pro',
909
+ 'enterprise'
714
910
  ]
715
911
  },
716
912
  version_channel: {
717
913
  type: 'string',
718
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-]+)*))?$',
719
915
  description: 'Version of the kubernetes cluster.',
916
+ default: '1.x.x-cfke.x',
720
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
+ }
721
965
  }
722
966
  },
723
967
  required: [
724
- 'tier'
968
+ 'name'
725
969
  ],
726
- 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.'
727
972
  };
728
973
  export const FleetCreateInputSchema = {
729
974
  type: 'object',
@@ -732,10 +977,10 @@ export const FleetCreateInputSchema = {
732
977
  type: 'object',
733
978
  properties: {
734
979
  cpu: {
735
- type: 'number',
736
- format: 'float',
980
+ type: 'integer',
737
981
  minimum: 0,
738
- description: 'CPU limit in cores.'
982
+ maximum: 100000,
983
+ description: 'CPU limit in cores. Maximum 100,000.'
739
984
  }
740
985
  },
741
986
  additionalProperties: false,
@@ -745,16 +990,17 @@ export const FleetCreateInputSchema = {
745
990
  type: 'object',
746
991
  properties: {
747
992
  enabled: {
748
- type: 'boolean',
749
- default: true
993
+ type: 'boolean'
750
994
  },
751
995
  project: {
752
996
  type: 'string',
753
- description: 'Project GCP Project id to deploy instances into'
997
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
998
+ description: 'GCP project ID to deploy instances into. 6-30 chars, lowercase letters/digits/hyphens, must start with a letter and not end with a hyphen. Omit when GCP is disabled.',
999
+ example: 'my-cloudfleet-project'
754
1000
  }
755
1001
  },
756
1002
  required: [
757
- 'project'
1003
+ 'enabled'
758
1004
  ],
759
1005
  additionalProperties: false
760
1006
  },
@@ -762,30 +1008,36 @@ export const FleetCreateInputSchema = {
762
1008
  type: 'object',
763
1009
  properties: {
764
1010
  enabled: {
765
- type: 'boolean',
766
- default: true
1011
+ type: 'boolean'
767
1012
  },
768
1013
  apiKey: {
769
1014
  type: 'string',
770
- description: 'Hetzner Cloud API key with read / write access. On update, omit this field to keep the existing value.'
1015
+ maxLength: 64,
1016
+ minLength: 64,
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.'
771
1019
  }
772
1020
  },
1021
+ required: [
1022
+ 'enabled'
1023
+ ],
773
1024
  additionalProperties: false
774
1025
  },
775
1026
  aws: {
776
1027
  type: 'object',
777
1028
  properties: {
778
1029
  enabled: {
779
- type: 'boolean',
780
- default: true
1030
+ type: 'boolean'
781
1031
  },
782
1032
  controllerRoleArn: {
783
1033
  type: 'string',
784
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1034
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1035
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1036
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
785
1037
  }
786
1038
  },
787
1039
  required: [
788
- 'controllerRoleArn'
1040
+ 'enabled'
789
1041
  ],
790
1042
  additionalProperties: false
791
1043
  },
@@ -801,7 +1053,12 @@ export const FleetCreateInputSchema = {
801
1053
  'spot'
802
1054
  ]
803
1055
  },
804
- description: 'Allowed values for `karpenter.sh/capacity-type`.'
1056
+ minItems: 1,
1057
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1058
+ default: [
1059
+ 'on-demand',
1060
+ 'spot'
1061
+ ]
805
1062
  },
806
1063
  'kubernetes.io/arch': {
807
1064
  type: 'array',
@@ -812,7 +1069,11 @@ export const FleetCreateInputSchema = {
812
1069
  'arm64'
813
1070
  ]
814
1071
  },
815
- description: 'Allowed values for `kubernetes.io/arch`.'
1072
+ minItems: 1,
1073
+ description: 'Allowed values for `kubernetes.io/arch`.',
1074
+ default: [
1075
+ 'amd64'
1076
+ ]
816
1077
  },
817
1078
  'cfke.io/instance-family': {
818
1079
  type: 'array',
@@ -979,7 +1240,8 @@ export const FleetCreateInputSchema = {
979
1240
  'z3'
980
1241
  ]
981
1242
  },
982
- description: 'Allowed values for `cfke.io/instance-family`.'
1243
+ description: 'Allowed values for `cfke.io/instance-family`.',
1244
+ default: []
983
1245
  },
984
1246
  'topology.kubernetes.io/region': {
985
1247
  type: 'array',
@@ -1052,21 +1314,72 @@ export const FleetCreateInputSchema = {
1052
1314
  'us-west4'
1053
1315
  ]
1054
1316
  },
1055
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1317
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1318
+ default: []
1056
1319
  }
1057
1320
  },
1058
1321
  additionalProperties: false,
1059
- 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
+ }
1060
1334
  },
1061
1335
  scalingProfile: {
1062
1336
  type: 'string',
1063
- 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`).',
1338
+ default: 'conservative',
1064
1339
  example: 'conservative',
1065
1340
  enum: [
1066
1341
  'aggressive',
1067
1342
  'conservative'
1068
1343
  ]
1069
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
+ },
1070
1383
  id: {
1071
1384
  type: 'string',
1072
1385
  maxLength: 63,
@@ -1079,7 +1392,8 @@ export const FleetCreateInputSchema = {
1079
1392
  required: [
1080
1393
  'id'
1081
1394
  ],
1082
- 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.'
1083
1397
  };
1084
1398
  export const FleetSchema = {
1085
1399
  type: 'object',
@@ -1088,10 +1402,10 @@ export const FleetSchema = {
1088
1402
  type: 'object',
1089
1403
  properties: {
1090
1404
  cpu: {
1091
- type: 'number',
1092
- format: 'float',
1405
+ type: 'integer',
1093
1406
  minimum: 0,
1094
- description: 'CPU limit in cores.'
1407
+ maximum: 100000,
1408
+ description: 'CPU limit in cores. Maximum 100,000.'
1095
1409
  }
1096
1410
  },
1097
1411
  additionalProperties: false,
@@ -1101,16 +1415,17 @@ export const FleetSchema = {
1101
1415
  type: 'object',
1102
1416
  properties: {
1103
1417
  enabled: {
1104
- type: 'boolean',
1105
- default: true
1418
+ type: 'boolean'
1106
1419
  },
1107
1420
  project: {
1108
1421
  type: 'string',
1109
- description: 'Project GCP Project id to deploy instances into'
1422
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1423
+ description: 'GCP project ID to deploy instances into. 6-30 chars, lowercase letters/digits/hyphens, must start with a letter and not end with a hyphen. Omit when GCP is disabled.',
1424
+ example: 'my-cloudfleet-project'
1110
1425
  }
1111
1426
  },
1112
1427
  required: [
1113
- 'project'
1428
+ 'enabled'
1114
1429
  ],
1115
1430
  additionalProperties: false
1116
1431
  },
@@ -1118,30 +1433,34 @@ export const FleetSchema = {
1118
1433
  type: 'object',
1119
1434
  properties: {
1120
1435
  enabled: {
1121
- type: 'boolean',
1122
- default: true
1436
+ type: 'boolean'
1123
1437
  },
1124
1438
  apiKey: {
1125
1439
  type: 'string',
1126
- description: 'Hetzner Cloud API key with read / write access. On update, omit this field to keep the existing value.'
1440
+ pattern: '^\\*{64}$',
1441
+ description: 'Redacted Hetzner API token. Returned as 64 asterisks when a token is configured; omitted otherwise. The real value is never echoed by the API.'
1127
1442
  }
1128
1443
  },
1444
+ required: [
1445
+ 'enabled'
1446
+ ],
1129
1447
  additionalProperties: false
1130
1448
  },
1131
1449
  aws: {
1132
1450
  type: 'object',
1133
1451
  properties: {
1134
1452
  enabled: {
1135
- type: 'boolean',
1136
- default: true
1453
+ type: 'boolean'
1137
1454
  },
1138
1455
  controllerRoleArn: {
1139
1456
  type: 'string',
1140
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1457
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1458
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1459
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
1141
1460
  }
1142
1461
  },
1143
1462
  required: [
1144
- 'controllerRoleArn'
1463
+ 'enabled'
1145
1464
  ],
1146
1465
  additionalProperties: false
1147
1466
  },
@@ -1157,7 +1476,12 @@ export const FleetSchema = {
1157
1476
  'spot'
1158
1477
  ]
1159
1478
  },
1160
- description: 'Allowed values for `karpenter.sh/capacity-type`.'
1479
+ minItems: 1,
1480
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1481
+ default: [
1482
+ 'on-demand',
1483
+ 'spot'
1484
+ ]
1161
1485
  },
1162
1486
  'kubernetes.io/arch': {
1163
1487
  type: 'array',
@@ -1168,7 +1492,11 @@ export const FleetSchema = {
1168
1492
  'arm64'
1169
1493
  ]
1170
1494
  },
1171
- description: 'Allowed values for `kubernetes.io/arch`.'
1495
+ minItems: 1,
1496
+ description: 'Allowed values for `kubernetes.io/arch`.',
1497
+ default: [
1498
+ 'amd64'
1499
+ ]
1172
1500
  },
1173
1501
  'cfke.io/instance-family': {
1174
1502
  type: 'array',
@@ -1335,7 +1663,8 @@ export const FleetSchema = {
1335
1663
  'z3'
1336
1664
  ]
1337
1665
  },
1338
- description: 'Allowed values for `cfke.io/instance-family`.'
1666
+ description: 'Allowed values for `cfke.io/instance-family`.',
1667
+ default: []
1339
1668
  },
1340
1669
  'topology.kubernetes.io/region': {
1341
1670
  type: 'array',
@@ -1408,21 +1737,76 @@ export const FleetSchema = {
1408
1737
  'us-west4'
1409
1738
  ]
1410
1739
  },
1411
- description: 'Allowed values for `topology.kubernetes.io/region`.'
1740
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
1741
+ default: []
1412
1742
  }
1413
1743
  },
1744
+ required: [
1745
+ 'karpenter.sh/capacity-type',
1746
+ 'kubernetes.io/arch'
1747
+ ],
1414
1748
  additionalProperties: false,
1415
- 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
+ }
1416
1761
  },
1417
1762
  scalingProfile: {
1418
1763
  type: 'string',
1419
- 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`).',
1765
+ default: 'conservative',
1420
1766
  example: 'conservative',
1421
1767
  enum: [
1422
1768
  'aggressive',
1423
1769
  'conservative'
1424
1770
  ]
1425
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
+ },
1426
1810
  id: {
1427
1811
  type: 'string',
1428
1812
  maxLength: 63,
@@ -1430,12 +1814,39 @@ export const FleetSchema = {
1430
1814
  pattern: '^[a-z0-9]([-a-z0-9]*[a-z0-9])?$',
1431
1815
  description: 'Unique identifier of the kubernetes fleet.',
1432
1816
  example: 'new-clouds-fleet'
1817
+ },
1818
+ ready: {
1819
+ type: 'boolean',
1820
+ description: 'Indicates whether the fleet configuration is healthy.',
1821
+ example: true
1822
+ },
1823
+ status_message: {
1824
+ type: 'string',
1825
+ description: 'Human-readable reason the fleet is not ready. Present only when `ready` is false.',
1826
+ example: 'Invalid provider permissions.'
1827
+ },
1828
+ created_at: {
1829
+ type: 'string',
1830
+ description: 'Creation date and time of the fleet.',
1831
+ example: '2024-09-12T09:11:27Z'
1832
+ },
1833
+ updated_at: {
1834
+ type: 'string',
1835
+ description: 'Date and time the fleet was last updated.',
1836
+ example: '2024-09-12T09:11:27Z'
1433
1837
  }
1434
1838
  },
1435
1839
  required: [
1436
- 'id'
1840
+ 'constraints',
1841
+ 'scalingProfile',
1842
+ 'taints',
1843
+ 'id',
1844
+ 'ready',
1845
+ 'created_at',
1846
+ 'updated_at'
1437
1847
  ],
1438
- 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.'
1439
1850
  };
1440
1851
  export const FleetUpdateInputSchema = {
1441
1852
  type: 'object',
@@ -1444,10 +1855,10 @@ export const FleetUpdateInputSchema = {
1444
1855
  type: 'object',
1445
1856
  properties: {
1446
1857
  cpu: {
1447
- type: 'number',
1448
- format: 'float',
1858
+ type: 'integer',
1449
1859
  minimum: 0,
1450
- description: 'CPU limit in cores.'
1860
+ maximum: 100000,
1861
+ description: 'CPU limit in cores. Maximum 100,000.'
1451
1862
  }
1452
1863
  },
1453
1864
  additionalProperties: false,
@@ -1457,16 +1868,17 @@ export const FleetUpdateInputSchema = {
1457
1868
  type: 'object',
1458
1869
  properties: {
1459
1870
  enabled: {
1460
- type: 'boolean',
1461
- default: true
1871
+ type: 'boolean'
1462
1872
  },
1463
1873
  project: {
1464
1874
  type: 'string',
1465
- description: 'Project GCP Project id to deploy instances into'
1875
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1876
+ description: 'GCP project ID to deploy instances into. 6-30 chars, lowercase letters/digits/hyphens, must start with a letter and not end with a hyphen. Omit when GCP is disabled.',
1877
+ example: 'my-cloudfleet-project'
1466
1878
  }
1467
1879
  },
1468
1880
  required: [
1469
- 'project'
1881
+ 'enabled'
1470
1882
  ],
1471
1883
  additionalProperties: false
1472
1884
  },
@@ -1474,30 +1886,36 @@ export const FleetUpdateInputSchema = {
1474
1886
  type: 'object',
1475
1887
  properties: {
1476
1888
  enabled: {
1477
- type: 'boolean',
1478
- default: true
1889
+ type: 'boolean'
1479
1890
  },
1480
1891
  apiKey: {
1481
1892
  type: 'string',
1482
- description: 'Hetzner Cloud API key with read / write access. On update, omit this field to keep the existing value.'
1893
+ maxLength: 64,
1894
+ minLength: 64,
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.'
1483
1897
  }
1484
1898
  },
1899
+ required: [
1900
+ 'enabled'
1901
+ ],
1485
1902
  additionalProperties: false
1486
1903
  },
1487
1904
  aws: {
1488
1905
  type: 'object',
1489
1906
  properties: {
1490
1907
  enabled: {
1491
- type: 'boolean',
1492
- default: true
1908
+ type: 'boolean'
1493
1909
  },
1494
1910
  controllerRoleArn: {
1495
1911
  type: 'string',
1496
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1912
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1913
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1914
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
1497
1915
  }
1498
1916
  },
1499
1917
  required: [
1500
- 'controllerRoleArn'
1918
+ 'enabled'
1501
1919
  ],
1502
1920
  additionalProperties: false
1503
1921
  },
@@ -1513,7 +1931,12 @@ export const FleetUpdateInputSchema = {
1513
1931
  'spot'
1514
1932
  ]
1515
1933
  },
1516
- description: 'Allowed values for `karpenter.sh/capacity-type`.'
1934
+ minItems: 1,
1935
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1936
+ default: [
1937
+ 'on-demand',
1938
+ 'spot'
1939
+ ]
1517
1940
  },
1518
1941
  'kubernetes.io/arch': {
1519
1942
  type: 'array',
@@ -1524,7 +1947,11 @@ export const FleetUpdateInputSchema = {
1524
1947
  'arm64'
1525
1948
  ]
1526
1949
  },
1527
- description: 'Allowed values for `kubernetes.io/arch`.'
1950
+ minItems: 1,
1951
+ description: 'Allowed values for `kubernetes.io/arch`.',
1952
+ default: [
1953
+ 'amd64'
1954
+ ]
1528
1955
  },
1529
1956
  'cfke.io/instance-family': {
1530
1957
  type: 'array',
@@ -1691,7 +2118,8 @@ export const FleetUpdateInputSchema = {
1691
2118
  'z3'
1692
2119
  ]
1693
2120
  },
1694
- description: 'Allowed values for `cfke.io/instance-family`.'
2121
+ description: 'Allowed values for `cfke.io/instance-family`.',
2122
+ default: []
1695
2123
  },
1696
2124
  'topology.kubernetes.io/region': {
1697
2125
  type: 'array',
@@ -1764,25 +2192,102 @@ export const FleetUpdateInputSchema = {
1764
2192
  'us-west4'
1765
2193
  ]
1766
2194
  },
1767
- description: 'Allowed values for `topology.kubernetes.io/region`.'
2195
+ description: 'Allowed values for `topology.kubernetes.io/region`.',
2196
+ default: []
1768
2197
  }
1769
2198
  },
1770
2199
  additionalProperties: false,
1771
- 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
+ }
1772
2212
  },
1773
2213
  scalingProfile: {
1774
2214
  type: 'string',
1775
- 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',
1776
2217
  example: 'conservative',
1777
2218
  enum: [
1778
2219
  'aggressive',
1779
2220
  'conservative'
1780
2221
  ]
1781
- }
1782
- },
1783
- additionalProperties: false
1784
- };
1785
- export const InviteSchema = {
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: []
2260
+ }
2261
+ },
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.'
2264
+ };
2265
+ export const InviteCreateInputSchema = {
2266
+ type: 'object',
2267
+ properties: {
2268
+ email: {
2269
+ type: 'string',
2270
+ format: 'email',
2271
+ description: 'Email address of the user to invite.',
2272
+ example: 'email@example.com'
2273
+ },
2274
+ role: {
2275
+ type: 'string',
2276
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
2277
+ default: 'User',
2278
+ example: 'User',
2279
+ enum: [
2280
+ 'Administrator',
2281
+ 'User'
2282
+ ]
2283
+ }
2284
+ },
2285
+ required: [
2286
+ 'email'
2287
+ ],
2288
+ additionalProperties: false
2289
+ };
2290
+ export const InviteSchema = {
1786
2291
  type: 'object',
1787
2292
  properties: {
1788
2293
  id: {
@@ -1812,6 +2317,16 @@ export const InviteSchema = {
1812
2317
  type: 'string',
1813
2318
  description: 'Generated unique invite code.',
1814
2319
  example: '7kUZnH7nnKUFfvc4NK2KQF'
2320
+ },
2321
+ role: {
2322
+ type: 'string',
2323
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
2324
+ default: 'User',
2325
+ example: 'User',
2326
+ enum: [
2327
+ 'Administrator',
2328
+ 'User'
2329
+ ]
1815
2330
  }
1816
2331
  },
1817
2332
  required: [
@@ -1819,6 +2334,170 @@ export const InviteSchema = {
1819
2334
  ],
1820
2335
  additionalProperties: false
1821
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
+ };
1822
2501
  export const InvoiceSchema = {
1823
2502
  type: 'object',
1824
2503
  properties: {
@@ -2032,6 +2711,15 @@ export const MarketplaceListingSchema = {
2032
2711
  export const OrganizationCreateInputSchema = {
2033
2712
  type: 'object',
2034
2713
  properties: {
2714
+ type: {
2715
+ type: 'string',
2716
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2717
+ example: 'business',
2718
+ enum: [
2719
+ 'business',
2720
+ 'personal'
2721
+ ]
2722
+ },
2035
2723
  email: {
2036
2724
  type: 'string',
2037
2725
  format: 'email',
@@ -2040,11 +2728,13 @@ export const OrganizationCreateInputSchema = {
2040
2728
  },
2041
2729
  first_name: {
2042
2730
  type: 'string',
2731
+ minLength: 1,
2043
2732
  description: 'First name of the billing contact person.',
2044
2733
  example: 'John'
2045
2734
  },
2046
2735
  last_name: {
2047
2736
  type: 'string',
2737
+ minLength: 1,
2048
2738
  description: 'Last name of the billing contact person.',
2049
2739
  example: 'Doe'
2050
2740
  },
@@ -2063,6 +2753,7 @@ export const OrganizationCreateInputSchema = {
2063
2753
  }
2064
2754
  },
2065
2755
  required: [
2756
+ 'type',
2066
2757
  'email',
2067
2758
  'first_name',
2068
2759
  'last_name',
@@ -2071,6 +2762,20 @@ export const OrganizationCreateInputSchema = {
2071
2762
  ],
2072
2763
  additionalProperties: false
2073
2764
  };
2765
+ export const OrganizationCreateOutputSchema = {
2766
+ type: 'object',
2767
+ properties: {
2768
+ id: {
2769
+ type: 'string',
2770
+ description: 'Unique identifier of the newly created organization. Generated by the API and safe to use for client-side tracking immediately.',
2771
+ example: 'organization-id'
2772
+ }
2773
+ },
2774
+ required: [
2775
+ 'id'
2776
+ ],
2777
+ additionalProperties: false
2778
+ };
2074
2779
  export const OrganizationSchema = {
2075
2780
  type: 'object',
2076
2781
  properties: {
@@ -2087,6 +2792,15 @@ export const OrganizationSchema = {
2087
2792
  description: 'Name of the legal entity. This name will be used in invoices. Use your first and last name for individual accounts.',
2088
2793
  example: 'ACME Corp.'
2089
2794
  },
2795
+ type: {
2796
+ type: 'string',
2797
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2798
+ example: 'business',
2799
+ enum: [
2800
+ 'business',
2801
+ 'personal'
2802
+ ]
2803
+ },
2090
2804
  date_created: {
2091
2805
  type: 'string',
2092
2806
  format: 'date-time',
@@ -2118,6 +2832,17 @@ export const OrganizationSchema = {
2118
2832
  description: 'Available number of Pro clusters that can be created.',
2119
2833
  example: 999
2120
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
+ },
2121
2846
  fleets_max: {
2122
2847
  type: 'integer',
2123
2848
  minimum: 0,
@@ -2137,7 +2862,7 @@ export const OrganizationSchema = {
2137
2862
  type: 'array',
2138
2863
  items: {
2139
2864
  type: 'string',
2140
- example: 'northamerica-central-1'
2865
+ example: 'northamerica-central-1a'
2141
2866
  },
2142
2867
  minItems: 1,
2143
2868
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -2179,6 +2904,8 @@ export const OrganizationSchema = {
2179
2904
  'basic_clusters_available',
2180
2905
  'pro_clusters_max',
2181
2906
  'pro_clusters_available',
2907
+ 'enterprise_clusters_max',
2908
+ 'enterprise_clusters_available',
2182
2909
  'fleets_max',
2183
2910
  'cluster_tiers',
2184
2911
  'regions',
@@ -2196,13 +2923,25 @@ export const OrganizationSchema = {
2196
2923
  'closed',
2197
2924
  'suspended'
2198
2925
  ]
2926
+ },
2927
+ verification: {
2928
+ type: 'string',
2929
+ description: 'Verification status of the organization, which determines the assigned quota. `none` when billing information is incomplete, `submitted` when billing information is complete but the organization is not yet verified, `verified` when the organization is verified.',
2930
+ example: 'verified',
2931
+ enum: [
2932
+ 'none',
2933
+ 'submitted',
2934
+ 'verified'
2935
+ ]
2199
2936
  }
2200
2937
  },
2201
2938
  required: [
2202
2939
  'id',
2940
+ 'type',
2203
2941
  'date_created',
2204
2942
  'quota',
2205
- 'status'
2943
+ 'status',
2944
+ 'verification'
2206
2945
  ],
2207
2946
  additionalProperties: false
2208
2947
  };
@@ -2211,28 +2950,23 @@ export const PaymentMethodSchema = {
2211
2950
  properties: {
2212
2951
  id: {
2213
2952
  type: 'string',
2214
- format: 'uuid',
2215
- description: 'Unique identifier of the organization. UUID v4 string in canonical form.',
2216
- example: 'e94d30ec-a2dd-4dcb-832c-ac2be144ba91'
2217
- },
2218
- setup: {
2219
- type: 'boolean',
2220
- description: 'Whether organization payment method was set up and ready to use for payments.',
2221
- example: true
2953
+ description: 'Payment method identifier. Stripe payment method id for cards/SEPA; the constant `bank_transfer` for the invoice/bank-transfer method. Used to set as default or delete the payment method.',
2954
+ example: 'pm_1MtwBwLkdIwHu7ix28a3tqPa'
2222
2955
  },
2223
2956
  type: {
2224
2957
  type: 'string',
2225
- nullable: true,
2226
- description: 'Payment method type type. Only `card` payments supported at the moment.',
2958
+ description: 'Payment method type. `card`, `sepa_debit` for SEPA Direct Debit (business accounts only), or `bank_transfer` for paying invoices by bank transfer.',
2227
2959
  example: 'card',
2228
2960
  enum: [
2229
- 'card'
2961
+ 'card',
2962
+ 'sepa_debit',
2963
+ 'bank_transfer'
2230
2964
  ]
2231
2965
  },
2232
2966
  last4: {
2233
2967
  type: 'string',
2234
2968
  nullable: true,
2235
- description: 'Last 4 digits of the payment card number.',
2969
+ description: 'Last 4 digits of the payment card number, of the bank account (IBAN) for SEPA Direct Debit, or of the destination IBAN for bank transfer.',
2236
2970
  example: '4242'
2237
2971
  },
2238
2972
  exp_month: {
@@ -2240,42 +2974,56 @@ export const PaymentMethodSchema = {
2240
2974
  minimum: 1,
2241
2975
  maximum: 12,
2242
2976
  nullable: true,
2243
- description: 'Two-digit number representing the card\'s expiration month.',
2244
- example: '12'
2977
+ description: 'Two-digit number representing the card\'s expiration month. Null for SEPA Direct Debit and bank transfer.',
2978
+ example: 12
2245
2979
  },
2246
2980
  exp_year: {
2247
2981
  type: 'integer',
2248
- minimum: 2024,
2249
2982
  nullable: true,
2250
- description: 'Four-digit number representing the card\'s expiration year.',
2251
- example: '2028'
2983
+ description: 'Four-digit number representing the card\'s expiration year. May be in the past for an expired card still on file. Null for SEPA Direct Debit and bank transfer.',
2984
+ example: 2028
2252
2985
  },
2253
2986
  brand: {
2254
2987
  type: 'string',
2255
2988
  nullable: true,
2256
- description: 'Payment card brand. Can be `amex`, `diners`, `discover`, `eftpos_au`, `jcb`, `mastercard`, `unionpay`, `visa`, or `unknown`.',
2257
- example: 'visa',
2258
- enum: [
2259
- 'amex',
2260
- 'diners',
2261
- 'discover',
2262
- 'eftpos_au',
2263
- 'jcb',
2264
- 'mastercard',
2265
- 'unionpay',
2266
- 'visa',
2267
- 'unknown'
2268
- ]
2989
+ description: 'Payment card brand as reported by Stripe, e.g. `visa`, `mastercard`, `amex`, `cartes_bancaires`, or `unknown`. Null for SEPA Direct Debit and bank transfer.',
2990
+ example: 'visa'
2991
+ },
2992
+ iban: {
2993
+ type: 'string',
2994
+ nullable: true,
2995
+ description: 'Full destination IBAN to send bank transfers to. Set only for `bank_transfer`; null otherwise. This is Cloudfleet\'s virtual receiving account, shown in full so the customer can pay into it.',
2996
+ example: 'DE11243015658023127510'
2997
+ },
2998
+ bic: {
2999
+ type: 'string',
3000
+ nullable: true,
3001
+ description: 'BIC/SWIFT of the destination bank for bank transfers. Set only for `bank_transfer`; null otherwise.',
3002
+ example: 'SOGEDEFFXXX'
3003
+ },
3004
+ account_holder_name: {
3005
+ type: 'string',
3006
+ nullable: true,
3007
+ description: 'Account holder name of the destination bank account for bank transfers. Set only for `bank_transfer`; null otherwise.',
3008
+ example: 'Cloudfleet GmbH'
3009
+ },
3010
+ is_default: {
3011
+ type: 'boolean',
3012
+ description: 'Whether this payment method is the default used for invoices and active subscriptions. Always false for `bank_transfer` (it cannot be a Stripe default payment method).',
3013
+ example: true
2269
3014
  }
2270
3015
  },
2271
3016
  required: [
2272
3017
  'id',
2273
- 'setup',
2274
3018
  'type',
2275
3019
  'last4',
2276
3020
  'exp_month',
2277
3021
  'exp_year',
2278
- 'brand'
3022
+ 'brand',
3023
+ 'iban',
3024
+ 'bic',
3025
+ 'account_holder_name',
3026
+ 'is_default'
2279
3027
  ],
2280
3028
  additionalProperties: false
2281
3029
  };
@@ -2304,6 +3052,17 @@ export const PlatformQuotaSchema = {
2304
3052
  description: 'Available number of Pro clusters that can be created.',
2305
3053
  example: 999
2306
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
+ },
2307
3066
  fleets_max: {
2308
3067
  type: 'integer',
2309
3068
  minimum: 0,
@@ -2323,7 +3082,7 @@ export const PlatformQuotaSchema = {
2323
3082
  type: 'array',
2324
3083
  items: {
2325
3084
  type: 'string',
2326
- example: 'northamerica-central-1'
3085
+ example: 'northamerica-central-1a'
2327
3086
  },
2328
3087
  minItems: 1,
2329
3088
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -2365,6 +3124,8 @@ export const PlatformQuotaSchema = {
2365
3124
  'basic_clusters_available',
2366
3125
  'pro_clusters_max',
2367
3126
  'pro_clusters_available',
3127
+ 'enterprise_clusters_max',
3128
+ 'enterprise_clusters_available',
2368
3129
  'fleets_max',
2369
3130
  'cluster_tiers',
2370
3131
  'regions',
@@ -2638,6 +3399,73 @@ export const RegistryTagSchema = {
2638
3399
  ],
2639
3400
  additionalProperties: false
2640
3401
  };
3402
+ export const RoadmapItemCreateInputSchema = {
3403
+ type: 'object',
3404
+ properties: {
3405
+ text: {
3406
+ type: 'string',
3407
+ maxLength: 500,
3408
+ minLength: 1,
3409
+ description: 'Your suggestion in one or two sentences. It is reviewed before it appears on the roadmap.',
3410
+ example: 'Support for ARM nodes on Hetzner.'
3411
+ }
3412
+ },
3413
+ required: [
3414
+ 'text'
3415
+ ],
3416
+ additionalProperties: false
3417
+ };
3418
+ export const RoadmapItemSchema = {
3419
+ type: 'object',
3420
+ properties: {
3421
+ id: {
3422
+ type: 'string',
3423
+ description: 'Unique identifier of the roadmap item (Mongo ObjectId).',
3424
+ example: '60c72b2f9f1b2c001f8e4d3a'
3425
+ },
3426
+ text: {
3427
+ type: 'string',
3428
+ description: 'Short description of the roadmap item.',
3429
+ example: 'Support for ARM nodes on Hetzner.'
3430
+ },
3431
+ vote: {
3432
+ type: 'integer',
3433
+ nullable: true,
3434
+ description: 'The caller\'s vote on this item: -1 (down), 1 (up), 2 (double up), or null if the caller has not voted.',
3435
+ example: 1,
3436
+ enum: [
3437
+ -1,
3438
+ 1,
3439
+ 2
3440
+ ]
3441
+ }
3442
+ },
3443
+ required: [
3444
+ 'id',
3445
+ 'text',
3446
+ 'vote'
3447
+ ],
3448
+ additionalProperties: false
3449
+ };
3450
+ export const RoadmapVoteInputSchema = {
3451
+ type: 'object',
3452
+ properties: {
3453
+ value: {
3454
+ type: 'integer',
3455
+ description: 'Vote value: -1 (down), 1 (up), or 2 (double up).',
3456
+ example: 1,
3457
+ enum: [
3458
+ -1,
3459
+ 1,
3460
+ 2
3461
+ ]
3462
+ }
3463
+ },
3464
+ required: [
3465
+ 'value'
3466
+ ],
3467
+ additionalProperties: false
3468
+ };
2641
3469
  export const TicketAttachmentSchema = {
2642
3470
  type: 'object',
2643
3471
  properties: {
@@ -2707,172 +3535,6 @@ export const TicketCreateInputSchema = {
2707
3535
  ],
2708
3536
  additionalProperties: false
2709
3537
  };
2710
- export const TicketListResponseSchema = {
2711
- type: 'object',
2712
- properties: {
2713
- items: {
2714
- type: 'array',
2715
- items: {
2716
- type: 'object',
2717
- properties: {
2718
- id: {
2719
- type: 'string',
2720
- description: 'Unique identifier of the ticket (Mongo ObjectId).',
2721
- example: '60c72b2f9f1b2c001f8e4d3a'
2722
- },
2723
- status: {
2724
- type: 'string',
2725
- description: 'Current state of the ticket.',
2726
- example: 'waiting_on_us',
2727
- enum: [
2728
- 'waiting_on_us',
2729
- 'waiting_on_user',
2730
- 'closed'
2731
- ]
2732
- },
2733
- category: {
2734
- type: 'string',
2735
- description: 'Ticket category.',
2736
- example: 'technical',
2737
- enum: [
2738
- 'billing',
2739
- 'technical',
2740
- 'general'
2741
- ]
2742
- },
2743
- summary: {
2744
- type: 'string',
2745
- description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
2746
- example: 'My cluster cannot reach the registry. Logs attached.'
2747
- },
2748
- closed_at: {
2749
- type: 'string',
2750
- format: 'date-time',
2751
- nullable: true,
2752
- description: 'Closure timestamp. Null while the ticket is open.',
2753
- example: '2026-05-18T16:08:14.338Z'
2754
- },
2755
- date_created: {
2756
- type: 'string',
2757
- format: 'date-time',
2758
- description: 'Creation date of the ticket. ISO 8601 UTC.',
2759
- example: '2026-05-11T16:08:14.338Z'
2760
- },
2761
- date_updated: {
2762
- type: 'string',
2763
- format: 'date-time',
2764
- description: 'Last update date of the ticket. ISO 8601 UTC.',
2765
- example: '2026-05-11T16:08:14.338Z'
2766
- },
2767
- messages: {
2768
- type: 'array',
2769
- items: {
2770
- type: 'object',
2771
- properties: {
2772
- id: {
2773
- type: 'string',
2774
- description: 'Unique identifier of the message (Mongo ObjectId).',
2775
- example: '60c72b2f9f1b2c001f8e4d3b'
2776
- },
2777
- type: {
2778
- type: 'string',
2779
- description: 'Message type. Internal notes are filtered out of customer-facing responses.',
2780
- example: 'customer_reply',
2781
- enum: [
2782
- 'customer_reply',
2783
- 'agent_reply'
2784
- ]
2785
- },
2786
- body: {
2787
- type: 'string',
2788
- description: 'Message body in markdown.',
2789
- example: 'Thanks — that resolved it on my side.'
2790
- },
2791
- author_first_name: {
2792
- type: 'string',
2793
- nullable: true,
2794
- description: 'First name of the author. Null when not provided.',
2795
- example: 'Jane'
2796
- },
2797
- author_last_name: {
2798
- type: 'string',
2799
- nullable: true,
2800
- description: 'Last name of the author. Null when not provided.',
2801
- example: 'Doe'
2802
- },
2803
- attachments: {
2804
- type: 'array',
2805
- items: {
2806
- type: 'object',
2807
- properties: {
2808
- id: {
2809
- type: 'string',
2810
- description: 'Unique identifier of the attachment (Mongo ObjectId).',
2811
- example: '60c72b2f9f1b2c001f8e4d3c'
2812
- },
2813
- filename: {
2814
- type: 'string',
2815
- description: 'Original filename as uploaded.',
2816
- example: 'debug.log'
2817
- },
2818
- content_type: {
2819
- type: 'string',
2820
- description: 'MIME content type of the attachment.',
2821
- example: 'text/plain'
2822
- },
2823
- size: {
2824
- type: 'integer',
2825
- description: 'Size of the attachment in bytes.',
2826
- example: 12345
2827
- }
2828
- },
2829
- required: [
2830
- 'id',
2831
- 'filename',
2832
- 'content_type',
2833
- 'size'
2834
- ],
2835
- additionalProperties: false
2836
- },
2837
- description: 'Attachments associated with this message.',
2838
- example: []
2839
- },
2840
- date_created: {
2841
- type: 'string',
2842
- format: 'date-time',
2843
- description: 'Creation date of the message. ISO 8601 UTC.',
2844
- example: '2026-05-11T16:08:14.338Z'
2845
- }
2846
- },
2847
- required: [
2848
- 'id',
2849
- 'type',
2850
- 'body',
2851
- 'date_created'
2852
- ],
2853
- additionalProperties: false
2854
- },
2855
- description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
2856
- }
2857
- },
2858
- required: [
2859
- 'id',
2860
- 'status',
2861
- 'category',
2862
- 'summary',
2863
- 'date_created',
2864
- 'date_updated'
2865
- ],
2866
- additionalProperties: false
2867
- },
2868
- description: 'Tickets for the organization, ordered newest first. Messages are omitted from list responses.'
2869
- }
2870
- },
2871
- required: [
2872
- 'items'
2873
- ],
2874
- additionalProperties: false
2875
- };
2876
3538
  export const TicketMessageInputSchema = {
2877
3539
  type: 'object',
2878
3540
  properties: {
@@ -2914,11 +3576,13 @@ export const TicketMessageSchema = {
2914
3576
  },
2915
3577
  author_first_name: {
2916
3578
  type: 'string',
3579
+ nullable: true,
2917
3580
  description: 'First name of the author. Null when not provided.',
2918
3581
  example: 'Jane'
2919
3582
  },
2920
3583
  author_last_name: {
2921
3584
  type: 'string',
3585
+ nullable: true,
2922
3586
  description: 'Last name of the author. Null when not provided.',
2923
3587
  example: 'Doe'
2924
3588
  },
@@ -3010,6 +3674,7 @@ export const TicketSchema = {
3010
3674
  closed_at: {
3011
3675
  type: 'string',
3012
3676
  format: 'date-time',
3677
+ nullable: true,
3013
3678
  description: 'Closure timestamp. Null while the ticket is open.',
3014
3679
  example: '2026-05-18T16:08:14.338Z'
3015
3680
  },
@@ -3234,12 +3899,21 @@ export const UsageFacetsSchema = {
3234
3899
  product: {
3235
3900
  type: 'array',
3236
3901
  items: {
3237
- type: 'string'
3902
+ type: 'string',
3903
+ enum: [
3904
+ 'cfke_controlplane_basic',
3905
+ 'cfke_controlplane_pro',
3906
+ 'cfke_controlplane_enterprise',
3907
+ 'cfke_connected_nodes_basic',
3908
+ 'cfke_connected_nodes_pro',
3909
+ 'cfke_connected_nodes_enterprise',
3910
+ 'cfcr_storage'
3911
+ ]
3238
3912
  },
3239
3913
  description: 'List of unique products',
3240
3914
  example: [
3241
- 'cfke_controlplane',
3242
- 'cfke_connected_nodes'
3915
+ 'cfke_controlplane_pro',
3916
+ 'cfke_connected_nodes_pro'
3243
3917
  ]
3244
3918
  }
3245
3919
  },
@@ -3266,7 +3940,16 @@ export const UsageResponseSchema = {
3266
3940
  product: {
3267
3941
  type: 'string',
3268
3942
  description: 'The product the usage is associated with',
3269
- example: 'cfke_controlplane'
3943
+ example: 'cfke_controlplane_pro',
3944
+ enum: [
3945
+ 'cfke_controlplane_basic',
3946
+ 'cfke_controlplane_pro',
3947
+ 'cfke_controlplane_enterprise',
3948
+ 'cfke_connected_nodes_basic',
3949
+ 'cfke_connected_nodes_pro',
3950
+ 'cfke_connected_nodes_enterprise',
3951
+ 'cfcr_storage'
3952
+ ]
3270
3953
  },
3271
3954
  value: {
3272
3955
  type: 'number',
@@ -3314,12 +3997,21 @@ export const UsageResponseSchema = {
3314
3997
  product: {
3315
3998
  type: 'array',
3316
3999
  items: {
3317
- type: 'string'
4000
+ type: 'string',
4001
+ enum: [
4002
+ 'cfke_controlplane_basic',
4003
+ 'cfke_controlplane_pro',
4004
+ 'cfke_controlplane_enterprise',
4005
+ 'cfke_connected_nodes_basic',
4006
+ 'cfke_connected_nodes_pro',
4007
+ 'cfke_connected_nodes_enterprise',
4008
+ 'cfcr_storage'
4009
+ ]
3318
4010
  },
3319
4011
  description: 'List of unique products',
3320
4012
  example: [
3321
- 'cfke_controlplane',
3322
- 'cfke_connected_nodes'
4013
+ 'cfke_controlplane_pro',
4014
+ 'cfke_connected_nodes_pro'
3323
4015
  ]
3324
4016
  }
3325
4017
  },
@@ -3349,7 +4041,16 @@ export const UsageSchema = {
3349
4041
  product: {
3350
4042
  type: 'string',
3351
4043
  description: 'The product the usage is associated with',
3352
- example: 'cfke_controlplane'
4044
+ example: 'cfke_controlplane_pro',
4045
+ enum: [
4046
+ 'cfke_controlplane_basic',
4047
+ 'cfke_controlplane_pro',
4048
+ 'cfke_controlplane_enterprise',
4049
+ 'cfke_connected_nodes_basic',
4050
+ 'cfke_connected_nodes_pro',
4051
+ 'cfke_connected_nodes_enterprise',
4052
+ 'cfcr_storage'
4053
+ ]
3353
4054
  },
3354
4055
  value: {
3355
4056
  type: 'number',
@@ -3412,24 +4113,6 @@ export const UserCreateInputSchema = {
3412
4113
  type: 'string',
3413
4114
  minLength: 8,
3414
4115
  description: 'User password. Must be at least 8 characters long.'
3415
- },
3416
- status: {
3417
- type: 'string',
3418
- description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
3419
- example: 'active',
3420
- enum: [
3421
- 'active',
3422
- 'inactive'
3423
- ]
3424
- },
3425
- role: {
3426
- type: 'string',
3427
- description: 'User role. Can be \'Administrator\', \'User\'.',
3428
- example: 'User',
3429
- enum: [
3430
- 'Administrator',
3431
- 'User'
3432
- ]
3433
4116
  }
3434
4117
  },
3435
4118
  required: [