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

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