@cloudfleet/sdk 0.0.1-80ccdf7 → 0.0.1-81297bc

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',
@@ -454,33 +448,21 @@ export const ClusterCreateInputSchema = {
454
448
  },
455
449
  region: {
456
450
  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'
465
- ]
451
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
452
+ example: 'europe-central-1a'
466
453
  },
467
454
  version_channel: {
468
455
  type: 'string',
469
456
  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
457
  description: 'Version of the kubernetes cluster.',
471
458
  default: '1.x.x-cfke.x',
472
- example: '1.x.x-cfke.x',
473
- 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'
478
- ]
459
+ example: '1.x.x-cfke.x'
479
460
  }
480
461
  },
481
462
  required: [
482
463
  'name',
483
- 'tier'
464
+ 'tier',
465
+ 'region'
484
466
  ],
485
467
  additionalProperties: false
486
468
  };
@@ -503,6 +485,11 @@ export const ClusterJoinInformationSchema = {
503
485
  description: 'Cluster DNS IP address. This is the IP address of the kube-dns service in the cluster.',
504
486
  example: '10.96.0.10'
505
487
  },
488
+ pod_cidr: {
489
+ type: 'string',
490
+ description: 'Pod CIDR for the cluster. Used to configure iptables rules on nodes to prevent Tailscale routing loops.',
491
+ example: '10.244.0.0/16'
492
+ },
506
493
  auth_key: {
507
494
  type: 'string',
508
495
  description: 'Authentication key for the cluster.',
@@ -578,6 +565,7 @@ export const ClusterJoinInformationSchema = {
578
565
  'certificate_authority',
579
566
  'endpoint',
580
567
  'cluster_dns',
568
+ 'pod_cidr',
581
569
  'auth_key',
582
570
  'bootstrap_token',
583
571
  'versions',
@@ -607,15 +595,8 @@ export const ClusterSchema = {
607
595
  },
608
596
  region: {
609
597
  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',
613
- enum: [
614
- 'staging-1a',
615
- 'northamerica-central-1',
616
- 'europe-central-1a',
617
- 'northamerica-central-1a'
618
- ]
598
+ description: 'Cloudfleet control plane region. This field can not be updated after creation.',
599
+ example: 'europe-central-1a'
619
600
  },
620
601
  id: {
621
602
  type: 'string',
@@ -642,7 +623,7 @@ export const ClusterSchema = {
642
623
  {
643
624
  type: 'string',
644
625
  format: 'uri',
645
- description: 'URL of the Kubernetes cluster control plane. This is the endpoint that kubectl uses to connect to the cluster.',
626
+ 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)',
646
627
  example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.cloudfleet.dev:6443'
647
628
  },
648
629
  {
@@ -653,6 +634,22 @@ export const ClusterSchema = {
653
634
  }
654
635
  ]
655
636
  },
637
+ endpoint_public: {
638
+ anyOf: [
639
+ {
640
+ type: 'string',
641
+ format: 'uri',
642
+ 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.',
643
+ example: 'https://2ae6557c-c61f-49c6-b4c1-a65473470a03.staging.cfke.io'
644
+ },
645
+ {
646
+ type: 'string',
647
+ enum: [
648
+ ''
649
+ ]
650
+ }
651
+ ]
652
+ },
656
653
  certificate_ca: {
657
654
  type: 'string',
658
655
  description: 'Certificate authority data for the kubernetes cluster. This is the root certificate authority for the cluster.',
@@ -688,6 +685,7 @@ export const ClusterSchema = {
688
685
  required: [
689
686
  'name',
690
687
  'tier',
688
+ 'region',
691
689
  'id',
692
690
  'status'
693
691
  ],
@@ -732,15 +730,12 @@ export const FleetCreateInputSchema = {
732
730
  type: 'object',
733
731
  properties: {
734
732
  cpu: {
735
- type: 'number',
736
- format: 'float',
733
+ type: 'integer',
737
734
  minimum: 0,
738
- description: 'CPU limit in cores.'
735
+ maximum: 100000,
736
+ description: 'CPU limit in cores. Maximum 100,000.'
739
737
  }
740
738
  },
741
- required: [
742
- 'cpu'
743
- ],
744
739
  additionalProperties: false,
745
740
  description: 'Limits define a set of bounds for provisioning capacity.'
746
741
  },
@@ -748,16 +743,17 @@ export const FleetCreateInputSchema = {
748
743
  type: 'object',
749
744
  properties: {
750
745
  enabled: {
751
- type: 'boolean',
752
- default: true
746
+ type: 'boolean'
753
747
  },
754
748
  project: {
755
749
  type: 'string',
756
- description: 'Project GCP Project id to deploy instances into'
750
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
751
+ 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.',
752
+ example: 'my-cloudfleet-project'
757
753
  }
758
754
  },
759
755
  required: [
760
- 'project'
756
+ 'enabled'
761
757
  ],
762
758
  additionalProperties: false
763
759
  },
@@ -765,16 +761,18 @@ export const FleetCreateInputSchema = {
765
761
  type: 'object',
766
762
  properties: {
767
763
  enabled: {
768
- type: 'boolean',
769
- default: true
764
+ type: 'boolean'
770
765
  },
771
766
  apiKey: {
772
767
  type: 'string',
773
- description: 'Hetzner Cloud API key with read / write access'
768
+ maxLength: 64,
769
+ minLength: 64,
770
+ pattern: '^[A-Za-z0-9]+$',
771
+ description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
774
772
  }
775
773
  },
776
774
  required: [
777
- 'apiKey'
775
+ 'enabled'
778
776
  ],
779
777
  additionalProperties: false
780
778
  },
@@ -782,19 +780,308 @@ export const FleetCreateInputSchema = {
782
780
  type: 'object',
783
781
  properties: {
784
782
  enabled: {
785
- type: 'boolean',
786
- default: true
783
+ type: 'boolean'
787
784
  },
788
785
  controllerRoleArn: {
789
786
  type: 'string',
790
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
787
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
788
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
789
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
791
790
  }
792
791
  },
793
792
  required: [
794
- 'controllerRoleArn'
793
+ 'enabled'
795
794
  ],
796
795
  additionalProperties: false
797
796
  },
797
+ constraints: {
798
+ type: 'object',
799
+ properties: {
800
+ 'karpenter.sh/capacity-type': {
801
+ type: 'array',
802
+ items: {
803
+ type: 'string',
804
+ enum: [
805
+ 'on-demand',
806
+ 'spot'
807
+ ]
808
+ },
809
+ minItems: 1,
810
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
811
+ default: [
812
+ 'on-demand',
813
+ 'spot'
814
+ ]
815
+ },
816
+ 'kubernetes.io/arch': {
817
+ type: 'array',
818
+ items: {
819
+ type: 'string',
820
+ enum: [
821
+ 'amd64',
822
+ 'arm64'
823
+ ]
824
+ },
825
+ minItems: 1,
826
+ description: 'Allowed values for `kubernetes.io/arch`.',
827
+ default: [
828
+ 'amd64'
829
+ ]
830
+ },
831
+ 'cfke.io/instance-family': {
832
+ type: 'array',
833
+ items: {
834
+ type: 'string',
835
+ enum: [
836
+ 'a1',
837
+ 'a2',
838
+ 'a3',
839
+ 'a4',
840
+ 'c1',
841
+ 'c2',
842
+ 'c2d',
843
+ 'c3',
844
+ 'c3d',
845
+ 'c4',
846
+ 'c4a',
847
+ 'c4d',
848
+ 'c5',
849
+ 'c5a',
850
+ 'c5ad',
851
+ 'c5d',
852
+ 'c5n',
853
+ 'c6a',
854
+ 'c6g',
855
+ 'c6gd',
856
+ 'c6gn',
857
+ 'c6i',
858
+ 'c6id',
859
+ 'c6in',
860
+ 'c7a',
861
+ 'c7g',
862
+ 'c7gd',
863
+ 'c7gn',
864
+ 'c7i',
865
+ 'c7i-flex',
866
+ 'c8g',
867
+ 'c8gd',
868
+ 'cax',
869
+ 'ccx',
870
+ 'cpx',
871
+ 'cx',
872
+ 'd2',
873
+ 'd3',
874
+ 'd3en',
875
+ 'dl1',
876
+ 'dl2q',
877
+ 'e2',
878
+ 'f1',
879
+ 'f2',
880
+ 'g1',
881
+ 'g2',
882
+ 'g4ad',
883
+ 'g4dn',
884
+ 'g5',
885
+ 'g5g',
886
+ 'g6',
887
+ 'g6e',
888
+ 'gr6',
889
+ 'h1',
890
+ 'h3',
891
+ 'hpc6a',
892
+ 'hpc6id',
893
+ 'hpc7a',
894
+ 'hpc7g',
895
+ 'i2',
896
+ 'i3',
897
+ 'i3en',
898
+ 'i4g',
899
+ 'i4i',
900
+ 'i7i',
901
+ 'i7ie',
902
+ 'i8g',
903
+ 'im4gn',
904
+ 'inf1',
905
+ 'inf2',
906
+ 'is4gen',
907
+ 'm1',
908
+ 'm2',
909
+ 'm3',
910
+ 'm4',
911
+ 'm5',
912
+ 'm5a',
913
+ 'm5ad',
914
+ 'm5d',
915
+ 'm5dn',
916
+ 'm5n',
917
+ 'm5zn',
918
+ 'm6a',
919
+ 'm6g',
920
+ 'm6gd',
921
+ 'm6i',
922
+ 'm6id',
923
+ 'm6idn',
924
+ 'm6in',
925
+ 'm7a',
926
+ 'm7g',
927
+ 'm7gd',
928
+ 'm7i',
929
+ 'm7i-flex',
930
+ 'm8g',
931
+ 'm8gd',
932
+ 'n1',
933
+ 'n2',
934
+ 'n2d',
935
+ 'n4',
936
+ 'p3',
937
+ 'p3dn',
938
+ 'p4d',
939
+ 'p4de',
940
+ 'p5',
941
+ 'p5e',
942
+ 'p5en',
943
+ 'p6-b200',
944
+ 'r3',
945
+ 'r4',
946
+ 'r5',
947
+ 'r5a',
948
+ 'r5ad',
949
+ 'r5b',
950
+ 'r5d',
951
+ 'r5dn',
952
+ 'r5n',
953
+ 'r6a',
954
+ 'r6g',
955
+ 'r6gd',
956
+ 'r6i',
957
+ 'r6id',
958
+ 'r6idn',
959
+ 'r6in',
960
+ 'r7a',
961
+ 'r7g',
962
+ 'r7gd',
963
+ 'r7i',
964
+ 'r7iz',
965
+ 'r8g',
966
+ 'r8gd',
967
+ 't2',
968
+ 't2a',
969
+ 't2d',
970
+ 't3',
971
+ 't3a',
972
+ 't4g',
973
+ 'trn1',
974
+ 'trn1n',
975
+ 'u-3tb1',
976
+ 'u-6tb1',
977
+ 'u7i-12tb',
978
+ 'u7i-6tb',
979
+ 'u7i-8tb',
980
+ 'u7in-16tb',
981
+ 'u7in-24tb',
982
+ 'u7in-32tb',
983
+ 'vt1',
984
+ 'x1',
985
+ 'x1e',
986
+ 'x2gd',
987
+ 'x2idn',
988
+ 'x2iedn',
989
+ 'x2iezn',
990
+ 'x4',
991
+ 'x8g',
992
+ 'z1d',
993
+ 'z3'
994
+ ]
995
+ },
996
+ description: 'Allowed values for `cfke.io/instance-family`.'
997
+ },
998
+ 'topology.kubernetes.io/region': {
999
+ type: 'array',
1000
+ items: {
1001
+ type: 'string',
1002
+ enum: [
1003
+ 'africa-south1',
1004
+ 'ap-northeast-1',
1005
+ 'ap-northeast-2',
1006
+ 'ap-northeast-3',
1007
+ 'ap-south-1',
1008
+ 'ap-southeast-1',
1009
+ 'ap-southeast-2',
1010
+ 'ash',
1011
+ 'asia-east1',
1012
+ 'asia-east2',
1013
+ 'asia-northeast1',
1014
+ 'asia-northeast2',
1015
+ 'asia-northeast3',
1016
+ 'asia-south1',
1017
+ 'asia-south2',
1018
+ 'asia-southeast1',
1019
+ 'asia-southeast2',
1020
+ 'australia-southeast1',
1021
+ 'australia-southeast2',
1022
+ 'ca-central-1',
1023
+ 'eu-central-1',
1024
+ 'eu-central-2',
1025
+ 'eu-north-1',
1026
+ 'eu-west-1',
1027
+ 'eu-west-2',
1028
+ 'eu-west-3',
1029
+ 'europe-central2',
1030
+ 'europe-north1',
1031
+ 'europe-southwest1',
1032
+ 'europe-west1',
1033
+ 'europe-west10',
1034
+ 'europe-west12',
1035
+ 'europe-west2',
1036
+ 'europe-west3',
1037
+ 'europe-west4',
1038
+ 'europe-west6',
1039
+ 'europe-west8',
1040
+ 'europe-west9',
1041
+ 'fsn1',
1042
+ 'hel1',
1043
+ 'hil',
1044
+ 'me-central1',
1045
+ 'me-central2',
1046
+ 'me-west1',
1047
+ 'nbg1',
1048
+ 'northamerica-northeast1',
1049
+ 'northamerica-northeast2',
1050
+ 'sa-east-1',
1051
+ 'sin',
1052
+ 'southamerica-east1',
1053
+ 'southamerica-west1',
1054
+ 'us-central1',
1055
+ 'us-east-1',
1056
+ 'us-east-2',
1057
+ 'us-east1',
1058
+ 'us-east4',
1059
+ 'us-east5',
1060
+ 'us-south1',
1061
+ 'us-west-1',
1062
+ 'us-west-2',
1063
+ 'us-west1',
1064
+ 'us-west2',
1065
+ 'us-west3',
1066
+ 'us-west4'
1067
+ ]
1068
+ },
1069
+ description: 'Allowed values for `topology.kubernetes.io/region`.'
1070
+ }
1071
+ },
1072
+ additionalProperties: false,
1073
+ 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.'
1074
+ },
1075
+ scalingProfile: {
1076
+ type: 'string',
1077
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1078
+ default: 'conservative',
1079
+ example: 'conservative',
1080
+ enum: [
1081
+ 'aggressive',
1082
+ 'conservative'
1083
+ ]
1084
+ },
798
1085
  id: {
799
1086
  type: 'string',
800
1087
  maxLength: 63,
@@ -816,15 +1103,12 @@ export const FleetSchema = {
816
1103
  type: 'object',
817
1104
  properties: {
818
1105
  cpu: {
819
- type: 'number',
820
- format: 'float',
1106
+ type: 'integer',
821
1107
  minimum: 0,
822
- description: 'CPU limit in cores.'
1108
+ maximum: 100000,
1109
+ description: 'CPU limit in cores. Maximum 100,000.'
823
1110
  }
824
1111
  },
825
- required: [
826
- 'cpu'
827
- ],
828
1112
  additionalProperties: false,
829
1113
  description: 'Limits define a set of bounds for provisioning capacity.'
830
1114
  },
@@ -832,16 +1116,17 @@ export const FleetSchema = {
832
1116
  type: 'object',
833
1117
  properties: {
834
1118
  enabled: {
835
- type: 'boolean',
836
- default: true
1119
+ type: 'boolean'
837
1120
  },
838
1121
  project: {
839
1122
  type: 'string',
840
- description: 'Project GCP Project id to deploy instances into'
1123
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1124
+ 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.',
1125
+ example: 'my-cloudfleet-project'
841
1126
  }
842
1127
  },
843
1128
  required: [
844
- 'project'
1129
+ 'enabled'
845
1130
  ],
846
1131
  additionalProperties: false
847
1132
  },
@@ -849,16 +1134,16 @@ export const FleetSchema = {
849
1134
  type: 'object',
850
1135
  properties: {
851
1136
  enabled: {
852
- type: 'boolean',
853
- default: true
1137
+ type: 'boolean'
854
1138
  },
855
1139
  apiKey: {
856
1140
  type: 'string',
857
- description: 'Hetzner Cloud API key with read / write access'
1141
+ pattern: '^\\*{64}$',
1142
+ 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.'
858
1143
  }
859
1144
  },
860
1145
  required: [
861
- 'apiKey'
1146
+ 'enabled'
862
1147
  ],
863
1148
  additionalProperties: false
864
1149
  },
@@ -866,19 +1151,308 @@ export const FleetSchema = {
866
1151
  type: 'object',
867
1152
  properties: {
868
1153
  enabled: {
869
- type: 'boolean',
870
- default: true
1154
+ type: 'boolean'
871
1155
  },
872
1156
  controllerRoleArn: {
873
1157
  type: 'string',
874
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1158
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1159
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1160
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
875
1161
  }
876
1162
  },
877
1163
  required: [
878
- 'controllerRoleArn'
1164
+ 'enabled'
879
1165
  ],
880
1166
  additionalProperties: false
881
1167
  },
1168
+ constraints: {
1169
+ type: 'object',
1170
+ properties: {
1171
+ 'karpenter.sh/capacity-type': {
1172
+ type: 'array',
1173
+ items: {
1174
+ type: 'string',
1175
+ enum: [
1176
+ 'on-demand',
1177
+ 'spot'
1178
+ ]
1179
+ },
1180
+ minItems: 1,
1181
+ description: 'Allowed values for `karpenter.sh/capacity-type`.',
1182
+ default: [
1183
+ 'on-demand',
1184
+ 'spot'
1185
+ ]
1186
+ },
1187
+ 'kubernetes.io/arch': {
1188
+ type: 'array',
1189
+ items: {
1190
+ type: 'string',
1191
+ enum: [
1192
+ 'amd64',
1193
+ 'arm64'
1194
+ ]
1195
+ },
1196
+ minItems: 1,
1197
+ description: 'Allowed values for `kubernetes.io/arch`.',
1198
+ default: [
1199
+ 'amd64'
1200
+ ]
1201
+ },
1202
+ 'cfke.io/instance-family': {
1203
+ type: 'array',
1204
+ items: {
1205
+ type: 'string',
1206
+ enum: [
1207
+ 'a1',
1208
+ 'a2',
1209
+ 'a3',
1210
+ 'a4',
1211
+ 'c1',
1212
+ 'c2',
1213
+ 'c2d',
1214
+ 'c3',
1215
+ 'c3d',
1216
+ 'c4',
1217
+ 'c4a',
1218
+ 'c4d',
1219
+ 'c5',
1220
+ 'c5a',
1221
+ 'c5ad',
1222
+ 'c5d',
1223
+ 'c5n',
1224
+ 'c6a',
1225
+ 'c6g',
1226
+ 'c6gd',
1227
+ 'c6gn',
1228
+ 'c6i',
1229
+ 'c6id',
1230
+ 'c6in',
1231
+ 'c7a',
1232
+ 'c7g',
1233
+ 'c7gd',
1234
+ 'c7gn',
1235
+ 'c7i',
1236
+ 'c7i-flex',
1237
+ 'c8g',
1238
+ 'c8gd',
1239
+ 'cax',
1240
+ 'ccx',
1241
+ 'cpx',
1242
+ 'cx',
1243
+ 'd2',
1244
+ 'd3',
1245
+ 'd3en',
1246
+ 'dl1',
1247
+ 'dl2q',
1248
+ 'e2',
1249
+ 'f1',
1250
+ 'f2',
1251
+ 'g1',
1252
+ 'g2',
1253
+ 'g4ad',
1254
+ 'g4dn',
1255
+ 'g5',
1256
+ 'g5g',
1257
+ 'g6',
1258
+ 'g6e',
1259
+ 'gr6',
1260
+ 'h1',
1261
+ 'h3',
1262
+ 'hpc6a',
1263
+ 'hpc6id',
1264
+ 'hpc7a',
1265
+ 'hpc7g',
1266
+ 'i2',
1267
+ 'i3',
1268
+ 'i3en',
1269
+ 'i4g',
1270
+ 'i4i',
1271
+ 'i7i',
1272
+ 'i7ie',
1273
+ 'i8g',
1274
+ 'im4gn',
1275
+ 'inf1',
1276
+ 'inf2',
1277
+ 'is4gen',
1278
+ 'm1',
1279
+ 'm2',
1280
+ 'm3',
1281
+ 'm4',
1282
+ 'm5',
1283
+ 'm5a',
1284
+ 'm5ad',
1285
+ 'm5d',
1286
+ 'm5dn',
1287
+ 'm5n',
1288
+ 'm5zn',
1289
+ 'm6a',
1290
+ 'm6g',
1291
+ 'm6gd',
1292
+ 'm6i',
1293
+ 'm6id',
1294
+ 'm6idn',
1295
+ 'm6in',
1296
+ 'm7a',
1297
+ 'm7g',
1298
+ 'm7gd',
1299
+ 'm7i',
1300
+ 'm7i-flex',
1301
+ 'm8g',
1302
+ 'm8gd',
1303
+ 'n1',
1304
+ 'n2',
1305
+ 'n2d',
1306
+ 'n4',
1307
+ 'p3',
1308
+ 'p3dn',
1309
+ 'p4d',
1310
+ 'p4de',
1311
+ 'p5',
1312
+ 'p5e',
1313
+ 'p5en',
1314
+ 'p6-b200',
1315
+ 'r3',
1316
+ 'r4',
1317
+ 'r5',
1318
+ 'r5a',
1319
+ 'r5ad',
1320
+ 'r5b',
1321
+ 'r5d',
1322
+ 'r5dn',
1323
+ 'r5n',
1324
+ 'r6a',
1325
+ 'r6g',
1326
+ 'r6gd',
1327
+ 'r6i',
1328
+ 'r6id',
1329
+ 'r6idn',
1330
+ 'r6in',
1331
+ 'r7a',
1332
+ 'r7g',
1333
+ 'r7gd',
1334
+ 'r7i',
1335
+ 'r7iz',
1336
+ 'r8g',
1337
+ 'r8gd',
1338
+ 't2',
1339
+ 't2a',
1340
+ 't2d',
1341
+ 't3',
1342
+ 't3a',
1343
+ 't4g',
1344
+ 'trn1',
1345
+ 'trn1n',
1346
+ 'u-3tb1',
1347
+ 'u-6tb1',
1348
+ 'u7i-12tb',
1349
+ 'u7i-6tb',
1350
+ 'u7i-8tb',
1351
+ 'u7in-16tb',
1352
+ 'u7in-24tb',
1353
+ 'u7in-32tb',
1354
+ 'vt1',
1355
+ 'x1',
1356
+ 'x1e',
1357
+ 'x2gd',
1358
+ 'x2idn',
1359
+ 'x2iedn',
1360
+ 'x2iezn',
1361
+ 'x4',
1362
+ 'x8g',
1363
+ 'z1d',
1364
+ 'z3'
1365
+ ]
1366
+ },
1367
+ description: 'Allowed values for `cfke.io/instance-family`.'
1368
+ },
1369
+ 'topology.kubernetes.io/region': {
1370
+ type: 'array',
1371
+ items: {
1372
+ type: 'string',
1373
+ enum: [
1374
+ 'africa-south1',
1375
+ 'ap-northeast-1',
1376
+ 'ap-northeast-2',
1377
+ 'ap-northeast-3',
1378
+ 'ap-south-1',
1379
+ 'ap-southeast-1',
1380
+ 'ap-southeast-2',
1381
+ 'ash',
1382
+ 'asia-east1',
1383
+ 'asia-east2',
1384
+ 'asia-northeast1',
1385
+ 'asia-northeast2',
1386
+ 'asia-northeast3',
1387
+ 'asia-south1',
1388
+ 'asia-south2',
1389
+ 'asia-southeast1',
1390
+ 'asia-southeast2',
1391
+ 'australia-southeast1',
1392
+ 'australia-southeast2',
1393
+ 'ca-central-1',
1394
+ 'eu-central-1',
1395
+ 'eu-central-2',
1396
+ 'eu-north-1',
1397
+ 'eu-west-1',
1398
+ 'eu-west-2',
1399
+ 'eu-west-3',
1400
+ 'europe-central2',
1401
+ 'europe-north1',
1402
+ 'europe-southwest1',
1403
+ 'europe-west1',
1404
+ 'europe-west10',
1405
+ 'europe-west12',
1406
+ 'europe-west2',
1407
+ 'europe-west3',
1408
+ 'europe-west4',
1409
+ 'europe-west6',
1410
+ 'europe-west8',
1411
+ 'europe-west9',
1412
+ 'fsn1',
1413
+ 'hel1',
1414
+ 'hil',
1415
+ 'me-central1',
1416
+ 'me-central2',
1417
+ 'me-west1',
1418
+ 'nbg1',
1419
+ 'northamerica-northeast1',
1420
+ 'northamerica-northeast2',
1421
+ 'sa-east-1',
1422
+ 'sin',
1423
+ 'southamerica-east1',
1424
+ 'southamerica-west1',
1425
+ 'us-central1',
1426
+ 'us-east-1',
1427
+ 'us-east-2',
1428
+ 'us-east1',
1429
+ 'us-east4',
1430
+ 'us-east5',
1431
+ 'us-south1',
1432
+ 'us-west-1',
1433
+ 'us-west-2',
1434
+ 'us-west1',
1435
+ 'us-west2',
1436
+ 'us-west3',
1437
+ 'us-west4'
1438
+ ]
1439
+ },
1440
+ description: 'Allowed values for `topology.kubernetes.io/region`.'
1441
+ }
1442
+ },
1443
+ additionalProperties: false,
1444
+ 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.'
1445
+ },
1446
+ scalingProfile: {
1447
+ type: 'string',
1448
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1449
+ default: 'conservative',
1450
+ example: 'conservative',
1451
+ enum: [
1452
+ 'aggressive',
1453
+ 'conservative'
1454
+ ]
1455
+ },
882
1456
  id: {
883
1457
  type: 'string',
884
1458
  maxLength: 63,
@@ -889,6 +1463,7 @@ export const FleetSchema = {
889
1463
  }
890
1464
  },
891
1465
  required: [
1466
+ 'scalingProfile',
892
1467
  'id'
893
1468
  ],
894
1469
  additionalProperties: false
@@ -900,15 +1475,12 @@ export const FleetUpdateInputSchema = {
900
1475
  type: 'object',
901
1476
  properties: {
902
1477
  cpu: {
903
- type: 'number',
904
- format: 'float',
1478
+ type: 'integer',
905
1479
  minimum: 0,
906
- description: 'CPU limit in cores.'
1480
+ maximum: 100000,
1481
+ description: 'CPU limit in cores. Maximum 100,000.'
907
1482
  }
908
1483
  },
909
- required: [
910
- 'cpu'
911
- ],
912
1484
  additionalProperties: false,
913
1485
  description: 'Limits define a set of bounds for provisioning capacity.'
914
1486
  },
@@ -916,16 +1488,17 @@ export const FleetUpdateInputSchema = {
916
1488
  type: 'object',
917
1489
  properties: {
918
1490
  enabled: {
919
- type: 'boolean',
920
- default: true
1491
+ type: 'boolean'
921
1492
  },
922
1493
  project: {
923
1494
  type: 'string',
924
- description: 'Project GCP Project id to deploy instances into'
1495
+ pattern: '^[a-z][a-z0-9-]{4,28}[a-z0-9]$',
1496
+ 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.',
1497
+ example: 'my-cloudfleet-project'
925
1498
  }
926
1499
  },
927
1500
  required: [
928
- 'project'
1501
+ 'enabled'
929
1502
  ],
930
1503
  additionalProperties: false
931
1504
  },
@@ -933,16 +1506,18 @@ export const FleetUpdateInputSchema = {
933
1506
  type: 'object',
934
1507
  properties: {
935
1508
  enabled: {
936
- type: 'boolean',
937
- default: true
1509
+ type: 'boolean'
938
1510
  },
939
1511
  apiKey: {
940
1512
  type: 'string',
941
- description: 'Hetzner Cloud API key with read / write access'
1513
+ maxLength: 64,
1514
+ minLength: 64,
1515
+ pattern: '^[A-Za-z0-9]+$',
1516
+ description: 'Hetzner Cloud API token with read / write access (64 alphanumeric characters). Omit this field to keep the existing value.'
942
1517
  }
943
1518
  },
944
1519
  required: [
945
- 'apiKey'
1520
+ 'enabled'
946
1521
  ],
947
1522
  additionalProperties: false
948
1523
  },
@@ -950,20 +1525,329 @@ export const FleetUpdateInputSchema = {
950
1525
  type: 'object',
951
1526
  properties: {
952
1527
  enabled: {
953
- type: 'boolean',
954
- default: true
1528
+ type: 'boolean'
955
1529
  },
956
1530
  controllerRoleArn: {
957
1531
  type: 'string',
958
- description: 'ControllerRoleArn is the AWS IAM role that Karpenter uses to manage resources.'
1532
+ pattern: '^arn:aws(-[a-z]+)*:iam::\\d{12}:role\\/[\\w+=,.@/-]+$',
1533
+ description: 'AWS IAM role ARN that Karpenter uses to manage resources. Omit when AWS is disabled.',
1534
+ example: 'arn:aws:iam::123456789012:role/Cloudfleet'
959
1535
  }
960
1536
  },
961
1537
  required: [
962
- 'controllerRoleArn'
1538
+ 'enabled'
963
1539
  ],
964
1540
  additionalProperties: false
1541
+ },
1542
+ constraints: {
1543
+ type: 'object',
1544
+ properties: {
1545
+ 'karpenter.sh/capacity-type': {
1546
+ type: 'array',
1547
+ items: {
1548
+ type: 'string',
1549
+ enum: [
1550
+ 'on-demand',
1551
+ 'spot'
1552
+ ]
1553
+ },
1554
+ minItems: 1,
1555
+ description: 'Allowed values for `karpenter.sh/capacity-type`.'
1556
+ },
1557
+ 'kubernetes.io/arch': {
1558
+ type: 'array',
1559
+ items: {
1560
+ type: 'string',
1561
+ enum: [
1562
+ 'amd64',
1563
+ 'arm64'
1564
+ ]
1565
+ },
1566
+ minItems: 1,
1567
+ description: 'Allowed values for `kubernetes.io/arch`.'
1568
+ },
1569
+ 'cfke.io/instance-family': {
1570
+ type: 'array',
1571
+ items: {
1572
+ type: 'string',
1573
+ enum: [
1574
+ 'a1',
1575
+ 'a2',
1576
+ 'a3',
1577
+ 'a4',
1578
+ 'c1',
1579
+ 'c2',
1580
+ 'c2d',
1581
+ 'c3',
1582
+ 'c3d',
1583
+ 'c4',
1584
+ 'c4a',
1585
+ 'c4d',
1586
+ 'c5',
1587
+ 'c5a',
1588
+ 'c5ad',
1589
+ 'c5d',
1590
+ 'c5n',
1591
+ 'c6a',
1592
+ 'c6g',
1593
+ 'c6gd',
1594
+ 'c6gn',
1595
+ 'c6i',
1596
+ 'c6id',
1597
+ 'c6in',
1598
+ 'c7a',
1599
+ 'c7g',
1600
+ 'c7gd',
1601
+ 'c7gn',
1602
+ 'c7i',
1603
+ 'c7i-flex',
1604
+ 'c8g',
1605
+ 'c8gd',
1606
+ 'cax',
1607
+ 'ccx',
1608
+ 'cpx',
1609
+ 'cx',
1610
+ 'd2',
1611
+ 'd3',
1612
+ 'd3en',
1613
+ 'dl1',
1614
+ 'dl2q',
1615
+ 'e2',
1616
+ 'f1',
1617
+ 'f2',
1618
+ 'g1',
1619
+ 'g2',
1620
+ 'g4ad',
1621
+ 'g4dn',
1622
+ 'g5',
1623
+ 'g5g',
1624
+ 'g6',
1625
+ 'g6e',
1626
+ 'gr6',
1627
+ 'h1',
1628
+ 'h3',
1629
+ 'hpc6a',
1630
+ 'hpc6id',
1631
+ 'hpc7a',
1632
+ 'hpc7g',
1633
+ 'i2',
1634
+ 'i3',
1635
+ 'i3en',
1636
+ 'i4g',
1637
+ 'i4i',
1638
+ 'i7i',
1639
+ 'i7ie',
1640
+ 'i8g',
1641
+ 'im4gn',
1642
+ 'inf1',
1643
+ 'inf2',
1644
+ 'is4gen',
1645
+ 'm1',
1646
+ 'm2',
1647
+ 'm3',
1648
+ 'm4',
1649
+ 'm5',
1650
+ 'm5a',
1651
+ 'm5ad',
1652
+ 'm5d',
1653
+ 'm5dn',
1654
+ 'm5n',
1655
+ 'm5zn',
1656
+ 'm6a',
1657
+ 'm6g',
1658
+ 'm6gd',
1659
+ 'm6i',
1660
+ 'm6id',
1661
+ 'm6idn',
1662
+ 'm6in',
1663
+ 'm7a',
1664
+ 'm7g',
1665
+ 'm7gd',
1666
+ 'm7i',
1667
+ 'm7i-flex',
1668
+ 'm8g',
1669
+ 'm8gd',
1670
+ 'n1',
1671
+ 'n2',
1672
+ 'n2d',
1673
+ 'n4',
1674
+ 'p3',
1675
+ 'p3dn',
1676
+ 'p4d',
1677
+ 'p4de',
1678
+ 'p5',
1679
+ 'p5e',
1680
+ 'p5en',
1681
+ 'p6-b200',
1682
+ 'r3',
1683
+ 'r4',
1684
+ 'r5',
1685
+ 'r5a',
1686
+ 'r5ad',
1687
+ 'r5b',
1688
+ 'r5d',
1689
+ 'r5dn',
1690
+ 'r5n',
1691
+ 'r6a',
1692
+ 'r6g',
1693
+ 'r6gd',
1694
+ 'r6i',
1695
+ 'r6id',
1696
+ 'r6idn',
1697
+ 'r6in',
1698
+ 'r7a',
1699
+ 'r7g',
1700
+ 'r7gd',
1701
+ 'r7i',
1702
+ 'r7iz',
1703
+ 'r8g',
1704
+ 'r8gd',
1705
+ 't2',
1706
+ 't2a',
1707
+ 't2d',
1708
+ 't3',
1709
+ 't3a',
1710
+ 't4g',
1711
+ 'trn1',
1712
+ 'trn1n',
1713
+ 'u-3tb1',
1714
+ 'u-6tb1',
1715
+ 'u7i-12tb',
1716
+ 'u7i-6tb',
1717
+ 'u7i-8tb',
1718
+ 'u7in-16tb',
1719
+ 'u7in-24tb',
1720
+ 'u7in-32tb',
1721
+ 'vt1',
1722
+ 'x1',
1723
+ 'x1e',
1724
+ 'x2gd',
1725
+ 'x2idn',
1726
+ 'x2iedn',
1727
+ 'x2iezn',
1728
+ 'x4',
1729
+ 'x8g',
1730
+ 'z1d',
1731
+ 'z3'
1732
+ ]
1733
+ },
1734
+ description: 'Allowed values for `cfke.io/instance-family`.'
1735
+ },
1736
+ 'topology.kubernetes.io/region': {
1737
+ type: 'array',
1738
+ items: {
1739
+ type: 'string',
1740
+ enum: [
1741
+ 'africa-south1',
1742
+ 'ap-northeast-1',
1743
+ 'ap-northeast-2',
1744
+ 'ap-northeast-3',
1745
+ 'ap-south-1',
1746
+ 'ap-southeast-1',
1747
+ 'ap-southeast-2',
1748
+ 'ash',
1749
+ 'asia-east1',
1750
+ 'asia-east2',
1751
+ 'asia-northeast1',
1752
+ 'asia-northeast2',
1753
+ 'asia-northeast3',
1754
+ 'asia-south1',
1755
+ 'asia-south2',
1756
+ 'asia-southeast1',
1757
+ 'asia-southeast2',
1758
+ 'australia-southeast1',
1759
+ 'australia-southeast2',
1760
+ 'ca-central-1',
1761
+ 'eu-central-1',
1762
+ 'eu-central-2',
1763
+ 'eu-north-1',
1764
+ 'eu-west-1',
1765
+ 'eu-west-2',
1766
+ 'eu-west-3',
1767
+ 'europe-central2',
1768
+ 'europe-north1',
1769
+ 'europe-southwest1',
1770
+ 'europe-west1',
1771
+ 'europe-west10',
1772
+ 'europe-west12',
1773
+ 'europe-west2',
1774
+ 'europe-west3',
1775
+ 'europe-west4',
1776
+ 'europe-west6',
1777
+ 'europe-west8',
1778
+ 'europe-west9',
1779
+ 'fsn1',
1780
+ 'hel1',
1781
+ 'hil',
1782
+ 'me-central1',
1783
+ 'me-central2',
1784
+ 'me-west1',
1785
+ 'nbg1',
1786
+ 'northamerica-northeast1',
1787
+ 'northamerica-northeast2',
1788
+ 'sa-east-1',
1789
+ 'sin',
1790
+ 'southamerica-east1',
1791
+ 'southamerica-west1',
1792
+ 'us-central1',
1793
+ 'us-east-1',
1794
+ 'us-east-2',
1795
+ 'us-east1',
1796
+ 'us-east4',
1797
+ 'us-east5',
1798
+ 'us-south1',
1799
+ 'us-west-1',
1800
+ 'us-west-2',
1801
+ 'us-west1',
1802
+ 'us-west2',
1803
+ 'us-west3',
1804
+ 'us-west4'
1805
+ ]
1806
+ },
1807
+ description: 'Allowed values for `topology.kubernetes.io/region`.'
1808
+ }
1809
+ },
1810
+ additionalProperties: false,
1811
+ 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.'
1812
+ },
1813
+ scalingProfile: {
1814
+ type: 'string',
1815
+ description: 'Controls scale-up / scale-down responsiveness. `aggressive` prioritizes cost-optimization. `conservative` prioritizes stability of the fleet.',
1816
+ example: 'conservative',
1817
+ enum: [
1818
+ 'aggressive',
1819
+ 'conservative'
1820
+ ]
965
1821
  }
966
1822
  },
1823
+ required: [
1824
+ 'scalingProfile'
1825
+ ],
1826
+ additionalProperties: false
1827
+ };
1828
+ export const InviteCreateInputSchema = {
1829
+ type: 'object',
1830
+ properties: {
1831
+ email: {
1832
+ type: 'string',
1833
+ format: 'email',
1834
+ description: 'Email address of the user to invite.',
1835
+ example: 'email@example.com'
1836
+ },
1837
+ role: {
1838
+ type: 'string',
1839
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
1840
+ default: 'User',
1841
+ example: 'User',
1842
+ enum: [
1843
+ 'Administrator',
1844
+ 'User'
1845
+ ]
1846
+ }
1847
+ },
1848
+ required: [
1849
+ 'email'
1850
+ ],
967
1851
  additionalProperties: false
968
1852
  };
969
1853
  export const InviteSchema = {
@@ -996,6 +1880,16 @@ export const InviteSchema = {
996
1880
  type: 'string',
997
1881
  description: 'Generated unique invite code.',
998
1882
  example: '7kUZnH7nnKUFfvc4NK2KQF'
1883
+ },
1884
+ role: {
1885
+ type: 'string',
1886
+ description: 'Role the invited user will be assigned on redemption. Can be \'Administrator\' or \'User\'.',
1887
+ default: 'User',
1888
+ example: 'User',
1889
+ enum: [
1890
+ 'Administrator',
1891
+ 'User'
1892
+ ]
999
1893
  }
1000
1894
  },
1001
1895
  required: [
@@ -1216,6 +2110,15 @@ export const MarketplaceListingSchema = {
1216
2110
  export const OrganizationCreateInputSchema = {
1217
2111
  type: 'object',
1218
2112
  properties: {
2113
+ type: {
2114
+ type: 'string',
2115
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2116
+ example: 'business',
2117
+ enum: [
2118
+ 'business',
2119
+ 'personal'
2120
+ ]
2121
+ },
1219
2122
  email: {
1220
2123
  type: 'string',
1221
2124
  format: 'email',
@@ -1224,11 +2127,13 @@ export const OrganizationCreateInputSchema = {
1224
2127
  },
1225
2128
  first_name: {
1226
2129
  type: 'string',
2130
+ minLength: 1,
1227
2131
  description: 'First name of the billing contact person.',
1228
2132
  example: 'John'
1229
2133
  },
1230
2134
  last_name: {
1231
2135
  type: 'string',
2136
+ minLength: 1,
1232
2137
  description: 'Last name of the billing contact person.',
1233
2138
  example: 'Doe'
1234
2139
  },
@@ -1247,6 +2152,7 @@ export const OrganizationCreateInputSchema = {
1247
2152
  }
1248
2153
  },
1249
2154
  required: [
2155
+ 'type',
1250
2156
  'email',
1251
2157
  'first_name',
1252
2158
  'last_name',
@@ -1255,6 +2161,20 @@ export const OrganizationCreateInputSchema = {
1255
2161
  ],
1256
2162
  additionalProperties: false
1257
2163
  };
2164
+ export const OrganizationCreateOutputSchema = {
2165
+ type: 'object',
2166
+ properties: {
2167
+ id: {
2168
+ type: 'string',
2169
+ description: 'Unique identifier of the newly created organization. Generated by the API and safe to use for client-side tracking immediately.',
2170
+ example: 'organization-id'
2171
+ }
2172
+ },
2173
+ required: [
2174
+ 'id'
2175
+ ],
2176
+ additionalProperties: false
2177
+ };
1258
2178
  export const OrganizationSchema = {
1259
2179
  type: 'object',
1260
2180
  properties: {
@@ -1271,6 +2191,15 @@ export const OrganizationSchema = {
1271
2191
  description: 'Name of the legal entity. This name will be used in invoices. Use your first and last name for individual accounts.',
1272
2192
  example: 'ACME Corp.'
1273
2193
  },
2194
+ type: {
2195
+ type: 'string',
2196
+ description: 'Type of the organization. `business` for legal entities, `personal` for individuals.',
2197
+ example: 'business',
2198
+ enum: [
2199
+ 'business',
2200
+ 'personal'
2201
+ ]
2202
+ },
1274
2203
  date_created: {
1275
2204
  type: 'string',
1276
2205
  format: 'date-time',
@@ -1321,7 +2250,7 @@ export const OrganizationSchema = {
1321
2250
  type: 'array',
1322
2251
  items: {
1323
2252
  type: 'string',
1324
- example: 'northamerica-central-1'
2253
+ example: 'northamerica-central-1a'
1325
2254
  },
1326
2255
  minItems: 1,
1327
2256
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -1351,18 +2280,6 @@ export const OrganizationSchema = {
1351
2280
  minItems: 1,
1352
2281
  description: 'List of CFKE control plane versions available for the organization.'
1353
2282
  },
1354
- copilot_user_hourly_tokens: {
1355
- type: 'integer',
1356
- minimum: 0,
1357
- description: 'User-level maximum number of tokens Cloudfleet Copilot can process per hour.',
1358
- example: 42000
1359
- },
1360
- copilot_organization_hourly_tokens: {
1361
- type: 'integer',
1362
- minimum: 0,
1363
- description: 'Organization-level maximum number of tokens Cloudfleet Copilot can process per hour.',
1364
- example: 242000
1365
- },
1366
2283
  cfcr_storage_gb: {
1367
2284
  type: 'integer',
1368
2285
  minimum: -1,
@@ -1379,8 +2296,6 @@ export const OrganizationSchema = {
1379
2296
  'cluster_tiers',
1380
2297
  'regions',
1381
2298
  'versions',
1382
- 'copilot_user_hourly_tokens',
1383
- 'copilot_organization_hourly_tokens',
1384
2299
  'cfcr_storage_gb'
1385
2300
  ],
1386
2301
  additionalProperties: false,
@@ -1394,13 +2309,25 @@ export const OrganizationSchema = {
1394
2309
  'closed',
1395
2310
  'suspended'
1396
2311
  ]
2312
+ },
2313
+ verification: {
2314
+ type: 'string',
2315
+ 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.',
2316
+ example: 'verified',
2317
+ enum: [
2318
+ 'none',
2319
+ 'submitted',
2320
+ 'verified'
2321
+ ]
1397
2322
  }
1398
2323
  },
1399
2324
  required: [
1400
2325
  'id',
2326
+ 'type',
1401
2327
  'date_created',
1402
2328
  'quota',
1403
- 'status'
2329
+ 'status',
2330
+ 'verification'
1404
2331
  ],
1405
2332
  additionalProperties: false
1406
2333
  };
@@ -1409,28 +2336,23 @@ export const PaymentMethodSchema = {
1409
2336
  properties: {
1410
2337
  id: {
1411
2338
  type: 'string',
1412
- format: 'uuid',
1413
- description: 'Unique identifier of the organization. UUID v4 string in canonical form.',
1414
- example: 'e94d30ec-a2dd-4dcb-832c-ac2be144ba91'
1415
- },
1416
- setup: {
1417
- type: 'boolean',
1418
- description: 'Whether organization payment method was set up and ready to use for payments.',
1419
- example: true
2339
+ 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.',
2340
+ example: 'pm_1MtwBwLkdIwHu7ix28a3tqPa'
1420
2341
  },
1421
2342
  type: {
1422
2343
  type: 'string',
1423
- nullable: true,
1424
- description: 'Payment method type type. Only `card` payments supported at the moment.',
2344
+ description: 'Payment method type. `card`, `sepa_debit` for SEPA Direct Debit (business accounts only), or `bank_transfer` for paying invoices by bank transfer.',
1425
2345
  example: 'card',
1426
2346
  enum: [
1427
- 'card'
2347
+ 'card',
2348
+ 'sepa_debit',
2349
+ 'bank_transfer'
1428
2350
  ]
1429
2351
  },
1430
2352
  last4: {
1431
2353
  type: 'string',
1432
2354
  nullable: true,
1433
- description: 'Last 4 digits of the payment card number.',
2355
+ 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.',
1434
2356
  example: '4242'
1435
2357
  },
1436
2358
  exp_month: {
@@ -1438,42 +2360,56 @@ export const PaymentMethodSchema = {
1438
2360
  minimum: 1,
1439
2361
  maximum: 12,
1440
2362
  nullable: true,
1441
- description: 'Two-digit number representing the card\'s expiration month.',
1442
- example: '12'
2363
+ description: 'Two-digit number representing the card\'s expiration month. Null for SEPA Direct Debit and bank transfer.',
2364
+ example: 12
1443
2365
  },
1444
2366
  exp_year: {
1445
2367
  type: 'integer',
1446
- minimum: 2024,
1447
2368
  nullable: true,
1448
- description: 'Four-digit number representing the card\'s expiration year.',
1449
- example: '2028'
2369
+ 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.',
2370
+ example: 2028
1450
2371
  },
1451
2372
  brand: {
1452
2373
  type: 'string',
1453
2374
  nullable: true,
1454
- description: 'Payment card brand. Can be `amex`, `diners`, `discover`, `eftpos_au`, `jcb`, `mastercard`, `unionpay`, `visa`, or `unknown`.',
1455
- example: 'visa',
1456
- enum: [
1457
- 'amex',
1458
- 'diners',
1459
- 'discover',
1460
- 'eftpos_au',
1461
- 'jcb',
1462
- 'mastercard',
1463
- 'unionpay',
1464
- 'visa',
1465
- 'unknown'
1466
- ]
2375
+ 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.',
2376
+ example: 'visa'
2377
+ },
2378
+ iban: {
2379
+ type: 'string',
2380
+ nullable: true,
2381
+ 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.',
2382
+ example: 'DE11243015658023127510'
2383
+ },
2384
+ bic: {
2385
+ type: 'string',
2386
+ nullable: true,
2387
+ description: 'BIC/SWIFT of the destination bank for bank transfers. Set only for `bank_transfer`; null otherwise.',
2388
+ example: 'SOGEDEFFXXX'
2389
+ },
2390
+ account_holder_name: {
2391
+ type: 'string',
2392
+ nullable: true,
2393
+ description: 'Account holder name of the destination bank account for bank transfers. Set only for `bank_transfer`; null otherwise.',
2394
+ example: 'Cloudfleet GmbH'
2395
+ },
2396
+ is_default: {
2397
+ type: 'boolean',
2398
+ 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).',
2399
+ example: true
1467
2400
  }
1468
2401
  },
1469
2402
  required: [
1470
2403
  'id',
1471
- 'setup',
1472
2404
  'type',
1473
2405
  'last4',
1474
2406
  'exp_month',
1475
2407
  'exp_year',
1476
- 'brand'
2408
+ 'brand',
2409
+ 'iban',
2410
+ 'bic',
2411
+ 'account_holder_name',
2412
+ 'is_default'
1477
2413
  ],
1478
2414
  additionalProperties: false
1479
2415
  };
@@ -1521,7 +2457,7 @@ export const PlatformQuotaSchema = {
1521
2457
  type: 'array',
1522
2458
  items: {
1523
2459
  type: 'string',
1524
- example: 'northamerica-central-1'
2460
+ example: 'northamerica-central-1a'
1525
2461
  },
1526
2462
  minItems: 1,
1527
2463
  description: 'List of Cloudfleet control plane regions available for the organization.'
@@ -1551,18 +2487,6 @@ export const PlatformQuotaSchema = {
1551
2487
  minItems: 1,
1552
2488
  description: 'List of CFKE control plane versions available for the organization.'
1553
2489
  },
1554
- copilot_user_hourly_tokens: {
1555
- type: 'integer',
1556
- minimum: 0,
1557
- description: 'User-level maximum number of tokens Cloudfleet Copilot can process per hour.',
1558
- example: 42000
1559
- },
1560
- copilot_organization_hourly_tokens: {
1561
- type: 'integer',
1562
- minimum: 0,
1563
- description: 'Organization-level maximum number of tokens Cloudfleet Copilot can process per hour.',
1564
- example: 242000
1565
- },
1566
2490
  cfcr_storage_gb: {
1567
2491
  type: 'integer',
1568
2492
  minimum: -1,
@@ -1579,8 +2503,6 @@ export const PlatformQuotaSchema = {
1579
2503
  'cluster_tiers',
1580
2504
  'regions',
1581
2505
  'versions',
1582
- 'copilot_user_hourly_tokens',
1583
- 'copilot_organization_hourly_tokens',
1584
2506
  'cfcr_storage_gb'
1585
2507
  ],
1586
2508
  additionalProperties: false
@@ -1850,6 +2772,492 @@ export const RegistryTagSchema = {
1850
2772
  ],
1851
2773
  additionalProperties: false
1852
2774
  };
2775
+ export const TicketAttachmentSchema = {
2776
+ type: 'object',
2777
+ properties: {
2778
+ id: {
2779
+ type: 'string',
2780
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
2781
+ example: '60c72b2f9f1b2c001f8e4d3c'
2782
+ },
2783
+ filename: {
2784
+ type: 'string',
2785
+ description: 'Original filename as uploaded.',
2786
+ example: 'debug.log'
2787
+ },
2788
+ content_type: {
2789
+ type: 'string',
2790
+ description: 'MIME content type of the attachment.',
2791
+ example: 'text/plain'
2792
+ },
2793
+ size: {
2794
+ type: 'integer',
2795
+ description: 'Size of the attachment in bytes.',
2796
+ example: 12345
2797
+ }
2798
+ },
2799
+ required: [
2800
+ 'id',
2801
+ 'filename',
2802
+ 'content_type',
2803
+ 'size'
2804
+ ],
2805
+ additionalProperties: false
2806
+ };
2807
+ export const TicketCreateInputSchema = {
2808
+ type: 'object',
2809
+ properties: {
2810
+ category: {
2811
+ type: 'string',
2812
+ description: 'Ticket category. Drives auto-assignment and may carry a subcategory in `properties`.',
2813
+ example: 'technical',
2814
+ enum: [
2815
+ 'billing',
2816
+ 'technical',
2817
+ 'general'
2818
+ ]
2819
+ },
2820
+ body: {
2821
+ type: 'string',
2822
+ maxLength: 50000,
2823
+ minLength: 1,
2824
+ pattern: '\\S',
2825
+ description: 'Initial message body in markdown. There is no separate subject — the first message body is the description.',
2826
+ example: 'My cluster cannot reach the registry. Logs attached.'
2827
+ },
2828
+ properties: {
2829
+ type: 'object',
2830
+ additionalProperties: true,
2831
+ description: 'Free-form key/value bag set by the UI (e.g. `subcategory`, `cluster_id`, `cluster_name`, `region`).',
2832
+ example: {
2833
+ subcategory: 'cluster-question',
2834
+ cluster_id: '60c72b2f9f1b2c001f8e4d3a'
2835
+ }
2836
+ }
2837
+ },
2838
+ required: [
2839
+ 'category',
2840
+ 'body'
2841
+ ],
2842
+ additionalProperties: false
2843
+ };
2844
+ export const TicketListResponseSchema = {
2845
+ type: 'object',
2846
+ properties: {
2847
+ items: {
2848
+ type: 'array',
2849
+ items: {
2850
+ type: 'object',
2851
+ properties: {
2852
+ id: {
2853
+ type: 'string',
2854
+ description: 'Unique identifier of the ticket (Mongo ObjectId).',
2855
+ example: '60c72b2f9f1b2c001f8e4d3a'
2856
+ },
2857
+ status: {
2858
+ type: 'string',
2859
+ description: 'Current state of the ticket.',
2860
+ example: 'waiting_on_us',
2861
+ enum: [
2862
+ 'waiting_on_us',
2863
+ 'waiting_on_user',
2864
+ 'closed'
2865
+ ]
2866
+ },
2867
+ category: {
2868
+ type: 'string',
2869
+ description: 'Ticket category.',
2870
+ example: 'technical',
2871
+ enum: [
2872
+ 'billing',
2873
+ 'technical',
2874
+ 'general'
2875
+ ]
2876
+ },
2877
+ summary: {
2878
+ type: 'string',
2879
+ description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
2880
+ example: 'My cluster cannot reach the registry. Logs attached.'
2881
+ },
2882
+ closed_at: {
2883
+ type: 'string',
2884
+ format: 'date-time',
2885
+ nullable: true,
2886
+ description: 'Closure timestamp. Null while the ticket is open.',
2887
+ example: '2026-05-18T16:08:14.338Z'
2888
+ },
2889
+ date_created: {
2890
+ type: 'string',
2891
+ format: 'date-time',
2892
+ description: 'Creation date of the ticket. ISO 8601 UTC.',
2893
+ example: '2026-05-11T16:08:14.338Z'
2894
+ },
2895
+ date_updated: {
2896
+ type: 'string',
2897
+ format: 'date-time',
2898
+ description: 'Last update date of the ticket. ISO 8601 UTC.',
2899
+ example: '2026-05-11T16:08:14.338Z'
2900
+ },
2901
+ messages: {
2902
+ type: 'array',
2903
+ items: {
2904
+ type: 'object',
2905
+ properties: {
2906
+ id: {
2907
+ type: 'string',
2908
+ description: 'Unique identifier of the message (Mongo ObjectId).',
2909
+ example: '60c72b2f9f1b2c001f8e4d3b'
2910
+ },
2911
+ type: {
2912
+ type: 'string',
2913
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
2914
+ example: 'customer_reply',
2915
+ enum: [
2916
+ 'customer_reply',
2917
+ 'agent_reply'
2918
+ ]
2919
+ },
2920
+ body: {
2921
+ type: 'string',
2922
+ description: 'Message body in markdown.',
2923
+ example: 'Thanks — that resolved it on my side.'
2924
+ },
2925
+ author_first_name: {
2926
+ type: 'string',
2927
+ nullable: true,
2928
+ description: 'First name of the author. Null when not provided.',
2929
+ example: 'Jane'
2930
+ },
2931
+ author_last_name: {
2932
+ type: 'string',
2933
+ nullable: true,
2934
+ description: 'Last name of the author. Null when not provided.',
2935
+ example: 'Doe'
2936
+ },
2937
+ attachments: {
2938
+ type: 'array',
2939
+ items: {
2940
+ type: 'object',
2941
+ properties: {
2942
+ id: {
2943
+ type: 'string',
2944
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
2945
+ example: '60c72b2f9f1b2c001f8e4d3c'
2946
+ },
2947
+ filename: {
2948
+ type: 'string',
2949
+ description: 'Original filename as uploaded.',
2950
+ example: 'debug.log'
2951
+ },
2952
+ content_type: {
2953
+ type: 'string',
2954
+ description: 'MIME content type of the attachment.',
2955
+ example: 'text/plain'
2956
+ },
2957
+ size: {
2958
+ type: 'integer',
2959
+ description: 'Size of the attachment in bytes.',
2960
+ example: 12345
2961
+ }
2962
+ },
2963
+ required: [
2964
+ 'id',
2965
+ 'filename',
2966
+ 'content_type',
2967
+ 'size'
2968
+ ],
2969
+ additionalProperties: false
2970
+ },
2971
+ description: 'Attachments associated with this message.',
2972
+ example: []
2973
+ },
2974
+ date_created: {
2975
+ type: 'string',
2976
+ format: 'date-time',
2977
+ description: 'Creation date of the message. ISO 8601 UTC.',
2978
+ example: '2026-05-11T16:08:14.338Z'
2979
+ }
2980
+ },
2981
+ required: [
2982
+ 'id',
2983
+ 'type',
2984
+ 'body',
2985
+ 'date_created'
2986
+ ],
2987
+ additionalProperties: false
2988
+ },
2989
+ description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
2990
+ }
2991
+ },
2992
+ required: [
2993
+ 'id',
2994
+ 'status',
2995
+ 'category',
2996
+ 'summary',
2997
+ 'date_created',
2998
+ 'date_updated'
2999
+ ],
3000
+ additionalProperties: false
3001
+ },
3002
+ description: 'Tickets for the organization, ordered newest first. Messages are omitted from list responses.'
3003
+ }
3004
+ },
3005
+ required: [
3006
+ 'items'
3007
+ ],
3008
+ additionalProperties: false
3009
+ };
3010
+ export const TicketMessageInputSchema = {
3011
+ type: 'object',
3012
+ properties: {
3013
+ body: {
3014
+ type: 'string',
3015
+ maxLength: 50000,
3016
+ minLength: 1,
3017
+ pattern: '\\S',
3018
+ description: 'Reply body in markdown.',
3019
+ example: 'Thanks — that resolved it on my side.'
3020
+ }
3021
+ },
3022
+ required: [
3023
+ 'body'
3024
+ ],
3025
+ additionalProperties: false
3026
+ };
3027
+ export const TicketMessageSchema = {
3028
+ type: 'object',
3029
+ properties: {
3030
+ id: {
3031
+ type: 'string',
3032
+ description: 'Unique identifier of the message (Mongo ObjectId).',
3033
+ example: '60c72b2f9f1b2c001f8e4d3b'
3034
+ },
3035
+ type: {
3036
+ type: 'string',
3037
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3038
+ example: 'customer_reply',
3039
+ enum: [
3040
+ 'customer_reply',
3041
+ 'agent_reply'
3042
+ ]
3043
+ },
3044
+ body: {
3045
+ type: 'string',
3046
+ description: 'Message body in markdown.',
3047
+ example: 'Thanks — that resolved it on my side.'
3048
+ },
3049
+ author_first_name: {
3050
+ type: 'string',
3051
+ description: 'First name of the author. Null when not provided.',
3052
+ example: 'Jane'
3053
+ },
3054
+ author_last_name: {
3055
+ type: 'string',
3056
+ description: 'Last name of the author. Null when not provided.',
3057
+ example: 'Doe'
3058
+ },
3059
+ attachments: {
3060
+ type: 'array',
3061
+ items: {
3062
+ type: 'object',
3063
+ properties: {
3064
+ id: {
3065
+ type: 'string',
3066
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3067
+ example: '60c72b2f9f1b2c001f8e4d3c'
3068
+ },
3069
+ filename: {
3070
+ type: 'string',
3071
+ description: 'Original filename as uploaded.',
3072
+ example: 'debug.log'
3073
+ },
3074
+ content_type: {
3075
+ type: 'string',
3076
+ description: 'MIME content type of the attachment.',
3077
+ example: 'text/plain'
3078
+ },
3079
+ size: {
3080
+ type: 'integer',
3081
+ description: 'Size of the attachment in bytes.',
3082
+ example: 12345
3083
+ }
3084
+ },
3085
+ required: [
3086
+ 'id',
3087
+ 'filename',
3088
+ 'content_type',
3089
+ 'size'
3090
+ ],
3091
+ additionalProperties: false
3092
+ },
3093
+ description: 'Attachments associated with this message.',
3094
+ example: []
3095
+ },
3096
+ date_created: {
3097
+ type: 'string',
3098
+ format: 'date-time',
3099
+ description: 'Creation date of the message. ISO 8601 UTC.',
3100
+ example: '2026-05-11T16:08:14.338Z'
3101
+ }
3102
+ },
3103
+ required: [
3104
+ 'id',
3105
+ 'type',
3106
+ 'body',
3107
+ 'date_created'
3108
+ ],
3109
+ additionalProperties: false
3110
+ };
3111
+ export const TicketSchema = {
3112
+ type: 'object',
3113
+ properties: {
3114
+ id: {
3115
+ type: 'string',
3116
+ description: 'Unique identifier of the ticket (Mongo ObjectId).',
3117
+ example: '60c72b2f9f1b2c001f8e4d3a'
3118
+ },
3119
+ status: {
3120
+ type: 'string',
3121
+ description: 'Current state of the ticket.',
3122
+ example: 'waiting_on_us',
3123
+ enum: [
3124
+ 'waiting_on_us',
3125
+ 'waiting_on_user',
3126
+ 'closed'
3127
+ ]
3128
+ },
3129
+ category: {
3130
+ type: 'string',
3131
+ description: 'Ticket category.',
3132
+ example: 'technical',
3133
+ enum: [
3134
+ 'billing',
3135
+ 'technical',
3136
+ 'general'
3137
+ ]
3138
+ },
3139
+ summary: {
3140
+ type: 'string',
3141
+ description: 'First 128 characters of the initial message body, with markdown formatting and newlines stripped. Used for ticket list previews.',
3142
+ example: 'My cluster cannot reach the registry. Logs attached.'
3143
+ },
3144
+ closed_at: {
3145
+ type: 'string',
3146
+ format: 'date-time',
3147
+ description: 'Closure timestamp. Null while the ticket is open.',
3148
+ example: '2026-05-18T16:08:14.338Z'
3149
+ },
3150
+ date_created: {
3151
+ type: 'string',
3152
+ format: 'date-time',
3153
+ description: 'Creation date of the ticket. ISO 8601 UTC.',
3154
+ example: '2026-05-11T16:08:14.338Z'
3155
+ },
3156
+ date_updated: {
3157
+ type: 'string',
3158
+ format: 'date-time',
3159
+ description: 'Last update date of the ticket. ISO 8601 UTC.',
3160
+ example: '2026-05-11T16:08:14.338Z'
3161
+ },
3162
+ messages: {
3163
+ type: 'array',
3164
+ items: {
3165
+ type: 'object',
3166
+ properties: {
3167
+ id: {
3168
+ type: 'string',
3169
+ description: 'Unique identifier of the message (Mongo ObjectId).',
3170
+ example: '60c72b2f9f1b2c001f8e4d3b'
3171
+ },
3172
+ type: {
3173
+ type: 'string',
3174
+ description: 'Message type. Internal notes are filtered out of customer-facing responses.',
3175
+ example: 'customer_reply',
3176
+ enum: [
3177
+ 'customer_reply',
3178
+ 'agent_reply'
3179
+ ]
3180
+ },
3181
+ body: {
3182
+ type: 'string',
3183
+ description: 'Message body in markdown.',
3184
+ example: 'Thanks — that resolved it on my side.'
3185
+ },
3186
+ author_first_name: {
3187
+ type: 'string',
3188
+ description: 'First name of the author. Null when not provided.',
3189
+ example: 'Jane'
3190
+ },
3191
+ author_last_name: {
3192
+ type: 'string',
3193
+ description: 'Last name of the author. Null when not provided.',
3194
+ example: 'Doe'
3195
+ },
3196
+ attachments: {
3197
+ type: 'array',
3198
+ items: {
3199
+ type: 'object',
3200
+ properties: {
3201
+ id: {
3202
+ type: 'string',
3203
+ description: 'Unique identifier of the attachment (Mongo ObjectId).',
3204
+ example: '60c72b2f9f1b2c001f8e4d3c'
3205
+ },
3206
+ filename: {
3207
+ type: 'string',
3208
+ description: 'Original filename as uploaded.',
3209
+ example: 'debug.log'
3210
+ },
3211
+ content_type: {
3212
+ type: 'string',
3213
+ description: 'MIME content type of the attachment.',
3214
+ example: 'text/plain'
3215
+ },
3216
+ size: {
3217
+ type: 'integer',
3218
+ description: 'Size of the attachment in bytes.',
3219
+ example: 12345
3220
+ }
3221
+ },
3222
+ required: [
3223
+ 'id',
3224
+ 'filename',
3225
+ 'content_type',
3226
+ 'size'
3227
+ ],
3228
+ additionalProperties: false
3229
+ },
3230
+ description: 'Attachments associated with this message.',
3231
+ example: []
3232
+ },
3233
+ date_created: {
3234
+ type: 'string',
3235
+ format: 'date-time',
3236
+ description: 'Creation date of the message. ISO 8601 UTC.',
3237
+ example: '2026-05-11T16:08:14.338Z'
3238
+ }
3239
+ },
3240
+ required: [
3241
+ 'id',
3242
+ 'type',
3243
+ 'body',
3244
+ 'date_created'
3245
+ ],
3246
+ additionalProperties: false
3247
+ },
3248
+ description: 'Messages on the ticket in chronological order. Internal notes are excluded. Returned by the detail endpoint only.'
3249
+ }
3250
+ },
3251
+ required: [
3252
+ 'id',
3253
+ 'status',
3254
+ 'category',
3255
+ 'summary',
3256
+ 'date_created',
3257
+ 'date_updated'
3258
+ ],
3259
+ additionalProperties: false
3260
+ };
1853
3261
  export const TokenCreateInputSchema = {
1854
3262
  type: 'object',
1855
3263
  properties: {
@@ -2138,24 +3546,6 @@ export const UserCreateInputSchema = {
2138
3546
  type: 'string',
2139
3547
  minLength: 8,
2140
3548
  description: 'User password. Must be at least 8 characters long.'
2141
- },
2142
- status: {
2143
- type: 'string',
2144
- description: 'Status of the user. Can be `active` or `inactive`. Inactive users cannot log in or manage organization resources.',
2145
- example: 'active',
2146
- enum: [
2147
- 'active',
2148
- 'inactive'
2149
- ]
2150
- },
2151
- role: {
2152
- type: 'string',
2153
- description: 'User role. Can be \'Administrator\', \'User\'.',
2154
- example: 'User',
2155
- enum: [
2156
- 'Administrator',
2157
- 'User'
2158
- ]
2159
3549
  }
2160
3550
  },
2161
3551
  required: [