From ac69a93f0664a39616c4ca0e7ae59c8b3b25a62a Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Wed, 26 Nov 2025 10:28:14 -0600 Subject: [PATCH 01/10] chore: Add Instant Clusters to OpenAPI spec --- openapi.yaml | 634 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 634 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index d39a1c9..c7d5241 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3296,6 +3296,316 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorData' + /gpu_cluster: + put: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['GPUClusterService'] + summary: Update a GPU Cluster. + operationId: GPUClusterService_Update + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusterUpdateRequest' + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusterUpdateResponse' + x-codeSamples: + - lang: TypeScript + label: Together AI SDK (TypeScript) + source: | + client.clusters.create() + - lang: Shell + label: cURL + source: | + curl -X PUT \ + -H "Authorization Bearer $TOGETHER_API_KEY" \ + --data '{ "cluster_id": "cluster id", "cluster_type": "kubernetes", "num_gpus": 24 }' \ + https://manager.cloud.together.ai/api/v1/gpu_cluster + post: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['GPUClusterService'] + summary: Create GPU Cluster + operationId: GPUClusterService_Create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusterCreateRequest' + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusterCreateResponse' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X POST \ + -H "Authorization Bearer $TOGETHER_API_KEY" \ + --data '{ "region": "us-west-2", "gpu_type": "H100_SXM", "num_gpus": 8, "cluster_name": "my-gpu-cluster", "duration_days": 7, "driver_version": "CUDA_12_6_560" }' \ + https://manager.cloud.together.ai/api/v1/gpu_cluster + /gpu_cluster/{cluster_id}: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['GPUClusterService'] + summary: Get GPU cluster by cluster ID + operationId: GPUClusterService_Get + parameters: + - name: cluster_id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusterInfo' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X GET \ + -H "Authorization Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/gpu_cluster/${CLUSTER_ID} + delete: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['GPUClusterService'] + summary: Delete GPU cluster by cluster ID + operationId: GPUClusterService_Delete + parameters: + - name: cluster_id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GPUCLusterDeleteResponse' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X DELETE \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/gpu_cluster/${CLUSTER_ID} + /gpu_clusters: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['GPUClusterService'] + summary: List all GPU clusters. + operationId: GPUClusterService_List + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusters' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X GET \ + -H "Authorization Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/gpu_clusters + /instance-types: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['InstanceTypesService'] + summary: List instance types + operationId: InstanceTypesService_List + parameters: + - name: region + in: query + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/InstanceTypesResponse' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X POST \ + -H "Authorization Bearer $TOGETHER_API_KEY" \ + --data '{ "region": "us-west-2"}' \ + https://manager.cloud.together.ai/api/v1/instance_types + /regions: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['RegionService'] + summary: List regions and corresponding supported driver versions + operationId: RegionService_List + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/RegionListResponse' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X GET \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/regions + /shared_volume: + put: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['SharedVolumeService'] + summary: Update a shared volume. + operationId: SharedVolumeService_Update + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumeUpdateRequest' + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumeInfo' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X PUT \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + --data '{ "volume_id": "12345-67890-12345-67890", "size_tib": 3}' \ + https://manager.cloud.together.ai/api/v1/shared_volume + post: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['SharedVolumeService'] + summary: Create a shared volume. + operationId: SharedVolumeService_Create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumeCreateRequest' + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumeCreateResponse' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X POST \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + --data '{ "volume_name": "my-shared-volume", "size_tib": 2, "region": "us-west-2" }' \ + https://manager.cloud.together.ai/api/v1/shared_volume + /shared_volume/{volume_id}: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['SharedVolumeService'] + summary: Get shared volume by volume Id. + operationId: SharedVolumeService_Get + parameters: + - name: volume_id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumeInfo' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X GET \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/shared_volume/${SHARED_VOLUME_ID} + delete: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['SharedVolumeService'] + summary: Delete shared volume by volume id. + operationId: SharedVolumeService_Delete + parameters: + - name: volume_id + in: path + required: true + schema: + type: string + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumeDeleteResponse' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X DELETE \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/shared_volume/${SHARED_VOLUME_ID} + /shared_volumes: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['SharedVolumeService'] + summary: List all shared volumes. + operationId: SharedVolumeService_List + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumes' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X GET \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/shared_volumes /clusters/availability-zones: get: tags: ['endpoints'] @@ -5308,6 +5618,330 @@ components: x-default: default schemas: + ErrorResponse: + type: object + properties: + code: + type: integer + format: int32 + message: + type: string + GPUCLusterDeleteResponse: + type: object + properties: + cluster_id: + type: string + GPUClusterControlPlaneNode: + type: object + properties: + node_id: + type: string + node_name: + type: string + status: + type: string + host_name: + type: string + num_cpu_cores: + type: integer + format: uint32 + memory_gib: + type: number + format: float + network: + type: string + GPUClusterCreateRequest: + required: + - region + - gpu_type + - num_gpus + - cluster_name + - duration_days + - driver_version + - billing_type + type: object + properties: + cluster_type: + enum: + - UNKNOWN_TYPE + - KUBERNETES + - SLURM + type: string + description: GPU Cluster create request. + format: enum + region: + type: string + description: Region to create the GPU cluster in. Valid values are us-central-8 and us-central-4. + gpu_type: + enum: + - UNKNOWN_GPU_TYPE + - H100_SXM + - H200_SXM + - RTX_6000_PCI + - L40_PCIE + - B200_SXM + - H100_SXM_INF + type: string + description: Type of GPU to use in the cluster + format: enum + num_gpus: + type: integer + description: Number of GPUs to allocate in the cluster. This must be multiple of 8. For example, 8, 16 or 24 + format: int32 + cluster_name: + type: string + description: Name of the GPU cluster. + duration_days: + type: integer + description: Duration in days to keep the cluster running. + format: uint32 + driver_version: + enum: + - UNKNOWN_DRIVER + - CUDA_12_5_555 + - CUDA_12_6_560 + - CUDA_12_6_565 + - CUDA_12_8_570 + type: string + description: NVIDIA driver version to use in the cluster. + format: enum + shared_volume: + $ref: '#/components/schemas/SharedVolumeCreateRequest' + volume_id: + type: string + billing_type: + enum: + - UNSPECIFIED + - RESERVED + - ON_DEMAND + type: string + format: enum + description: GPU Cluster create request + GPUClusterCreateResponse: + type: object + properties: + cluster_id: + type: string + GPUClusterGPUWorkerNode: + type: object + properties: + node_id: + type: string + node_name: + type: string + status: + type: string + host_name: + type: string + num_cpu_cores: + type: integer + format: uint32 + num_gpus: + type: integer + format: uint32 + memory_gib: + type: number + format: float + networks: + type: array + items: + type: string + GPUClusterInfo: + type: object + properties: + cluster_id: + type: string + cluster_type: + enum: + - UNKNOWN_TYPE + - KUBERNETES + - SLURM + type: string + format: enum + region: + type: string + gpu_type: + enum: + - UNKNOWN_GPU_TYPE + - H100_SXM + - H200_SXM + - RTX_6000_PCI + - L40_PCIE + - B200_SXM + - H100_SXM_INF + type: string + format: enum + cluster_name: + type: string + duration_hours: + type: integer + format: uint32 + driver_version: + enum: + - UNKNOWN_DRIVER + - CUDA_12_5_555 + - CUDA_12_6_560 + - CUDA_12_6_565 + - CUDA_12_8_570 + type: string + format: enum + volumes: + type: array + items: + $ref: '#/components/schemas/GPUClusterVolume' + status: + enum: + - WaitingForControlPlaneNodes + - WaitingForDataPlaneNodes + - WaitingForSubnet + - WaitingForSharedVolume + - InstallingDrivers + - RunningAcceptanceTests + - Paused + - OnDemandComputePaused + - Ready + - Degraded + - Deleting + type: string + description: Current status of the GPU cluster. + control_plane_nodes: + type: array + items: + $ref: '#/components/schemas/GPUClusterControlPlaneNode' + gpu_worker_nodes: + type: array + items: + $ref: '#/components/schemas/GPUClusterGPUWorkerNode' + kube_config: + type: string + num_gpus: + type: integer + format: int32 + GPUClusterUpdateRequest: + type: object + properties: + cluster_id: + type: string + cluster_type: + enum: + - UNKNOWN_TYPE + - KUBERNETES + - SLURM + type: string + format: enum + num_gpus: + type: integer + format: uint32 + GPUClusterUpdateResponse: + type: object + properties: + cluster_id: + type: string + GPUClusterVolume: + type: object + properties: + volume_id: + type: string + volume_name: + type: string + size_tib: + type: integer + format: uint32 + status: + type: string + GPUClusters: + type: object + properties: + clusters: + type: array + items: + $ref: '#/components/schemas/GPUClusterInfo' + InstanceTypesResponse: + type: object + properties: + types: + type: array + items: + enum: + - UNKNOWN_GPU_TYPE + - H100_SXM + - H200_SXM + - RTX_6000_PCI + - L40_PCIE + - B200_SXM + - H100_SXM_INF + type: string + format: enum + error: + $ref: '#/components/schemas/ErrorResponse' + Region: + type: object + properties: + id: + type: string + name: + type: string + availability_zones: + type: array + items: + type: string + driver_versions: + type: array + items: + type: string + RegionListResponse: + type: object + properties: + regions: + type: array + items: + $ref: '#/components/schemas/Region' + SharedVolumeCreateRequest: + type: object + properties: + volume_name: + type: string + size_tib: + type: integer + description: Volume size in whole tebibytes (TiB). + format: uint32 + region: + type: string + SharedVolumeCreateResponse: + type: object + properties: + volume_id: + type: string + SharedVolumeDeleteResponse: + type: object + properties: + success: + type: boolean + SharedVolumeInfo: + type: object + properties: + volume_id: + type: string + volume_name: + type: string + size_tib: + type: integer + format: uint32 + SharedVolumeUpdateRequest: + type: object + properties: + volume_id: + type: string + size_tib: + type: integer + format: uint32 + SharedVolumes: + type: object + properties: + volumes: + type: array + items: + $ref: '#/components/schemas/SharedVolumeInfo' ListVoicesResponse: description: Response containing a list of models and their available voices. type: object From c0e82486da29fea6def24c8b3b490a36040a6afb Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Wed, 26 Nov 2025 10:33:06 -0600 Subject: [PATCH 02/10] move list to /gpu_cluster path --- openapi.yaml | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index c7d5241..558559e 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3297,6 +3297,26 @@ paths: schema: $ref: '#/components/schemas/ErrorData' /gpu_cluster: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['GPUClusterService'] + summary: List all GPU clusters. + operationId: GPUClusterService_List + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusters' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X GET \ + -H "Authorization Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/gpu_clusters put: servers: - url: https://manager.cloud.together.ai/api/v1 @@ -3408,27 +3428,6 @@ paths: curl -X DELETE \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ https://manager.cloud.together.ai/api/v1/gpu_cluster/${CLUSTER_ID} - /gpu_clusters: - get: - servers: - - url: https://manager.cloud.together.ai/api/v1 - tags: ['GPUClusterService'] - summary: List all GPU clusters. - operationId: GPUClusterService_List - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GPUClusters' - x-codeSamples: - - lang: Shell - label: cURL - source: | - curl -X GET \ - -H "Authorization Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/gpu_clusters /instance-types: get: servers: From bfb6e7f475eb58d882ce9f90e107a6bf4b47958d Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Wed, 26 Nov 2025 10:33:58 -0600 Subject: [PATCH 03/10] move shared_volumes to shared_volume path --- openapi.yaml | 41 ++++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 21 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 558559e..4dcf982 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3477,6 +3477,26 @@ paths: -H "Authorization: Bearer $TOGETHER_API_KEY" \ https://manager.cloud.together.ai/api/v1/regions /shared_volume: + get: + servers: + - url: https://manager.cloud.together.ai/api/v1 + tags: ['SharedVolumeService'] + summary: List all shared volumes. + operationId: SharedVolumeService_List + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/SharedVolumes' + x-codeSamples: + - lang: Shell + label: cURL + source: | + curl -X GET \ + -H "Authorization: Bearer $TOGETHER_API_KEY" \ + https://manager.cloud.together.ai/api/v1/shared_volumes put: servers: - url: https://manager.cloud.together.ai/api/v1 @@ -3584,27 +3604,6 @@ paths: curl -X DELETE \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ https://manager.cloud.together.ai/api/v1/shared_volume/${SHARED_VOLUME_ID} - /shared_volumes: - get: - servers: - - url: https://manager.cloud.together.ai/api/v1 - tags: ['SharedVolumeService'] - summary: List all shared volumes. - operationId: SharedVolumeService_List - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/SharedVolumes' - x-codeSamples: - - lang: Shell - label: cURL - source: | - curl -X GET \ - -H "Authorization: Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/shared_volumes /clusters/availability-zones: get: tags: ['endpoints'] From 3b883637d2542f1e9aa1d13b06fbac9a325b9718 Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Mon, 1 Dec 2025 12:04:31 -0600 Subject: [PATCH 04/10] Update openapi.yaml --- openapi.yaml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 4dcf982..6114215 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -5896,6 +5896,10 @@ components: $ref: '#/components/schemas/Region' SharedVolumeCreateRequest: type: object + required: + - volume_name + - size_tib + - region properties: volume_name: type: string @@ -5905,6 +5909,7 @@ components: format: uint32 region: type: string + description: Region name. Usable regions can be found from `client.clusters.list_regions()` SharedVolumeCreateResponse: type: object properties: From 24791e8edbdbc8bafe446b92cac98e1cef4e1dff Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Fri, 12 Dec 2025 14:58:04 -0600 Subject: [PATCH 05/10] rename secret per request from Yogish --- openapi.yaml | 14 ++++---------- 1 file changed, 4 insertions(+), 10 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 6114215..4b59a69 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3296,10 +3296,8 @@ paths: application/json: schema: $ref: '#/components/schemas/ErrorData' - /gpu_cluster: + /clusters: get: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['GPUClusterService'] summary: List all GPU clusters. operationId: GPUClusterService_List @@ -3316,10 +3314,8 @@ paths: source: | curl -X GET \ -H "Authorization Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/gpu_clusters + https://api.together.ai/v1/clusters put: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['GPUClusterService'] summary: Update a GPU Cluster. operationId: GPUClusterService_Update @@ -3347,10 +3343,8 @@ paths: curl -X PUT \ -H "Authorization Bearer $TOGETHER_API_KEY" \ --data '{ "cluster_id": "cluster id", "cluster_type": "kubernetes", "num_gpus": 24 }' \ - https://manager.cloud.together.ai/api/v1/gpu_cluster + https://api.together.ai/v1/clusters post: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['GPUClusterService'] summary: Create GPU Cluster operationId: GPUClusterService_Create @@ -3374,7 +3368,7 @@ paths: curl -X POST \ -H "Authorization Bearer $TOGETHER_API_KEY" \ --data '{ "region": "us-west-2", "gpu_type": "H100_SXM", "num_gpus": 8, "cluster_name": "my-gpu-cluster", "duration_days": 7, "driver_version": "CUDA_12_6_560" }' \ - https://manager.cloud.together.ai/api/v1/gpu_cluster + https://api.together.ai/v1/clusters /gpu_cluster/{cluster_id}: get: servers: From 7fcf26029954763351a2b6960939e857b33d60dd Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Fri, 12 Dec 2025 15:36:34 -0600 Subject: [PATCH 06/10] Update url references --- openapi.yaml | 67 ++++++++++------------------------------------------ 1 file changed, 12 insertions(+), 55 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 4b59a69..f9a011b 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3369,10 +3369,8 @@ paths: -H "Authorization Bearer $TOGETHER_API_KEY" \ --data '{ "region": "us-west-2", "gpu_type": "H100_SXM", "num_gpus": 8, "cluster_name": "my-gpu-cluster", "duration_days": 7, "driver_version": "CUDA_12_6_560" }' \ https://api.together.ai/v1/clusters - /gpu_cluster/{cluster_id}: + /clusters/{cluster_id}: get: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['GPUClusterService'] summary: Get GPU cluster by cluster ID operationId: GPUClusterService_Get @@ -3395,10 +3393,8 @@ paths: source: | curl -X GET \ -H "Authorization Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/gpu_cluster/${CLUSTER_ID} + https://api.together.ai/v1/clusters/${CLUSTER_ID} delete: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['GPUClusterService'] summary: Delete GPU cluster by cluster ID operationId: GPUClusterService_Delete @@ -3421,38 +3417,9 @@ paths: source: | curl -X DELETE \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/gpu_cluster/${CLUSTER_ID} - /instance-types: + https://api.together.ai/v1/clusters/${CLUSTER_ID} + /clusters/regions: get: - servers: - - url: https://manager.cloud.together.ai/api/v1 - tags: ['InstanceTypesService'] - summary: List instance types - operationId: InstanceTypesService_List - parameters: - - name: region - in: query - schema: - type: string - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/InstanceTypesResponse' - x-codeSamples: - - lang: Shell - label: cURL - source: | - curl -X POST \ - -H "Authorization Bearer $TOGETHER_API_KEY" \ - --data '{ "region": "us-west-2"}' \ - https://manager.cloud.together.ai/api/v1/instance_types - /regions: - get: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['RegionService'] summary: List regions and corresponding supported driver versions operationId: RegionService_List @@ -3469,11 +3436,9 @@ paths: source: | curl -X GET \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/regions - /shared_volume: + https://api.together.ai/v1/clusters/regions + /clusters/storages get: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['SharedVolumeService'] summary: List all shared volumes. operationId: SharedVolumeService_List @@ -3490,10 +3455,8 @@ paths: source: | curl -X GET \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/shared_volumes + https://api.together.ai/v1/clusters/storages put: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['SharedVolumeService'] summary: Update a shared volume. operationId: SharedVolumeService_Update @@ -3517,10 +3480,8 @@ paths: curl -X PUT \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ --data '{ "volume_id": "12345-67890-12345-67890", "size_tib": 3}' \ - https://manager.cloud.together.ai/api/v1/shared_volume + https://api.together.ai/v1/clusters/storages post: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['SharedVolumeService'] summary: Create a shared volume. operationId: SharedVolumeService_Create @@ -3544,11 +3505,9 @@ paths: curl -X POST \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ --data '{ "volume_name": "my-shared-volume", "size_tib": 2, "region": "us-west-2" }' \ - https://manager.cloud.together.ai/api/v1/shared_volume - /shared_volume/{volume_id}: + https://api.together.ai/v1/clusters/storages + /clusters/storages/{volume_id}: get: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['SharedVolumeService'] summary: Get shared volume by volume Id. operationId: SharedVolumeService_Get @@ -3571,10 +3530,8 @@ paths: source: | curl -X GET \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/shared_volume/${SHARED_VOLUME_ID} + https://api.together.ai/v1/clusters/storages/${VOLUME_ID} delete: - servers: - - url: https://manager.cloud.together.ai/api/v1 tags: ['SharedVolumeService'] summary: Delete shared volume by volume id. operationId: SharedVolumeService_Delete @@ -3597,7 +3554,7 @@ paths: source: | curl -X DELETE \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ - https://manager.cloud.together.ai/api/v1/shared_volume/${SHARED_VOLUME_ID} + https://api.together.ai/v1/clusters/storages/${VOLUME_ID} /clusters/availability-zones: get: tags: ['endpoints'] From 106c7ba1f06c010caee68b16752f762d70547478 Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Fri, 12 Dec 2025 15:48:21 -0600 Subject: [PATCH 07/10] fix --- openapi.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/openapi.yaml b/openapi.yaml index f9a011b..0855ff5 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3437,7 +3437,7 @@ paths: curl -X GET \ -H "Authorization: Bearer $TOGETHER_API_KEY" \ https://api.together.ai/v1/clusters/regions - /clusters/storages + /clusters/storages: get: tags: ['SharedVolumeService'] summary: List all shared volumes. From 85d32c31ffe43113eba65e1347278f06d7982f71 Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Tue, 16 Dec 2025 09:20:58 -0600 Subject: [PATCH 08/10] fix required fields --- openapi.yaml | 625 ++++++++++++++++++++++++++------------------------- 1 file changed, 317 insertions(+), 308 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 0855ff5..82ae72e 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -5568,334 +5568,343 @@ components: schemas: ErrorResponse: - type: object - properties: - code: - type: integer - format: int32 - message: - type: string + type: object + properties: + code: + type: integer + message: + type: string GPUCLusterDeleteResponse: - type: object - properties: - cluster_id: - type: string + type: object + required: ['cluster_id'] + properties: + cluster_id: + type: string GPUClusterControlPlaneNode: - type: object - properties: - node_id: - type: string - node_name: - type: string - status: - type: string - host_name: - type: string - num_cpu_cores: - type: integer - format: uint32 - memory_gib: - type: number - format: float - network: - type: string + type: object + required: + - node_id + - node_name + - status + - host_name + - num_cpu_cores + - memory_gib + - network + properties: + node_id: + type: string + node_name: + type: string + status: + type: string + host_name: + type: string + num_cpu_cores: + type: integer + memory_gib: + type: number + network: + type: string GPUClusterCreateRequest: - required: - - region - - gpu_type - - num_gpus - - cluster_name - - duration_days - - driver_version - - billing_type - type: object - properties: - cluster_type: - enum: - - UNKNOWN_TYPE - - KUBERNETES - - SLURM - type: string - description: GPU Cluster create request. - format: enum - region: - type: string - description: Region to create the GPU cluster in. Valid values are us-central-8 and us-central-4. - gpu_type: - enum: - - UNKNOWN_GPU_TYPE - - H100_SXM - - H200_SXM - - RTX_6000_PCI - - L40_PCIE - - B200_SXM - - H100_SXM_INF - type: string - description: Type of GPU to use in the cluster - format: enum - num_gpus: - type: integer - description: Number of GPUs to allocate in the cluster. This must be multiple of 8. For example, 8, 16 or 24 - format: int32 - cluster_name: - type: string - description: Name of the GPU cluster. - duration_days: - type: integer - description: Duration in days to keep the cluster running. - format: uint32 - driver_version: - enum: - - UNKNOWN_DRIVER - - CUDA_12_5_555 - - CUDA_12_6_560 - - CUDA_12_6_565 - - CUDA_12_8_570 - type: string - description: NVIDIA driver version to use in the cluster. - format: enum - shared_volume: - $ref: '#/components/schemas/SharedVolumeCreateRequest' - volume_id: - type: string - billing_type: - enum: - - UNSPECIFIED - - RESERVED - - ON_DEMAND - type: string - format: enum - description: GPU Cluster create request + description: GPU Cluster create request + required: + - region + - gpu_type + - num_gpus + - cluster_name + - duration_days + - driver_version + - billing_type + type: object + properties: + cluster_type: + type: string + enum: [KUBERNETES, SLURM] + region: + description: Region to create the GPU cluster in. Valid values are us-central-8 and us-central-4. + type: string + enum: [us-central-8, us-central-4] + gpu_type: + description: Type of GPU to use in the cluster + type: string + enum: + - H100_SXM + - H200_SXM + - RTX_6000_PCI + - L40_PCIE + - B200_SXM + - H100_SXM_INF + num_gpus: + description: Number of GPUs to allocate in the cluster. This must be multiple of 8. For example, 8, 16 or 24 + type: integer + cluster_name: + description: Name of the GPU cluster. + type: string + duration_days: + description: Duration in days to keep the cluster running. + type: integer + driver_version: + description: NVIDIA driver version to use in the cluster. + type: string + enum: + - CUDA_12_5_555 + - CUDA_12_6_560 + - CUDA_12_6_565 + - CUDA_12_8_570 + shared_volume: + $ref: '#/components/schemas/SharedVolumeCreateRequest' + volume_id: + type: string + billing_type: + type: string + enum: + - RESERVED + - ON_DEMAND GPUClusterCreateResponse: - type: object - properties: - cluster_id: - type: string + type: object + required: ['cluster_id'] + properties: + cluster_id: + type: string GPUClusterGPUWorkerNode: - type: object - properties: - node_id: - type: string - node_name: - type: string - status: - type: string - host_name: - type: string - num_cpu_cores: - type: integer - format: uint32 - num_gpus: - type: integer - format: uint32 - memory_gib: - type: number - format: float - networks: - type: array - items: - type: string + type: object + required: + - node_id + - node_name + - status + - host_name + - num_cpu_cores + - num_gpus + - memory_gib + - networks + properties: + node_id: + type: string + node_name: + type: string + status: + type: string + host_name: + type: string + num_cpu_cores: + type: integer + num_gpus: + type: integer + memory_gib: + type: number + networks: + type: array + items: + type: string GPUClusterInfo: - type: object - properties: - cluster_id: - type: string - cluster_type: - enum: - - UNKNOWN_TYPE - - KUBERNETES - - SLURM - type: string - format: enum - region: - type: string - gpu_type: - enum: - - UNKNOWN_GPU_TYPE - - H100_SXM - - H200_SXM - - RTX_6000_PCI - - L40_PCIE - - B200_SXM - - H100_SXM_INF - type: string - format: enum - cluster_name: - type: string - duration_hours: - type: integer - format: uint32 - driver_version: - enum: - - UNKNOWN_DRIVER - - CUDA_12_5_555 - - CUDA_12_6_560 - - CUDA_12_6_565 - - CUDA_12_8_570 - type: string - format: enum - volumes: - type: array - items: - $ref: '#/components/schemas/GPUClusterVolume' - status: - enum: - - WaitingForControlPlaneNodes - - WaitingForDataPlaneNodes - - WaitingForSubnet - - WaitingForSharedVolume - - InstallingDrivers - - RunningAcceptanceTests - - Paused - - OnDemandComputePaused - - Ready - - Degraded - - Deleting - type: string - description: Current status of the GPU cluster. - control_plane_nodes: - type: array - items: - $ref: '#/components/schemas/GPUClusterControlPlaneNode' - gpu_worker_nodes: - type: array - items: - $ref: '#/components/schemas/GPUClusterGPUWorkerNode' - kube_config: - type: string - num_gpus: - type: integer - format: int32 + type: object + required: + - cluster_id + - cluster_type + - region + - gpu_type + - cluster_name + - duration_hours + - driver_version + - volumes + - status + - control_plane_nodes + - gpu_worker_nodes + - kube_config + - num_gpus + properties: + cluster_id: + type: string + cluster_type: + enum: [KUBERNETES, SLURM] + region: + type: string + gpu_type: + enum: + - H100_SXM + - H200_SXM + - RTX_6000_PCI + - L40_PCIE + - B200_SXM + - H100_SXM_INF + cluster_name: + type: string + duration_hours: + type: integer + driver_version: + enum: + - CUDA_12_5_555 + - CUDA_12_6_560 + - CUDA_12_6_565 + - CUDA_12_8_570 + volumes: + type: array + items: + $ref: '#/components/schemas/GPUClusterVolume' + status: + description: Current status of the GPU cluster. + enum: + - WaitingForControlPlaneNodes + - WaitingForDataPlaneNodes + - WaitingForSubnet + - WaitingForSharedVolume + - InstallingDrivers + - RunningAcceptanceTests + - Paused + - OnDemandComputePaused + - Ready + - Degraded + - Deleting + control_plane_nodes: + type: array + items: + $ref: '#/components/schemas/GPUClusterControlPlaneNode' + gpu_worker_nodes: + type: array + items: + $ref: '#/components/schemas/GPUClusterGPUWorkerNode' + kube_config: + type: string + num_gpus: + type: integer GPUClusterUpdateRequest: type: object + required: [cluster_id] properties: - cluster_id: - type: string - cluster_type: - enum: - - UNKNOWN_TYPE - - KUBERNETES - - SLURM - type: string - format: enum - num_gpus: - type: integer - format: uint32 + cluster_id: + type: string + cluster_type: + enum: [KUBERNETES, SLURM] + num_gpus: + type: integer GPUClusterUpdateResponse: - type: object - properties: - cluster_id: - type: string + type: object + required: [cluster_id] + properties: + cluster_id: + type: string GPUClusterVolume: - type: object - properties: - volume_id: - type: string - volume_name: - type: string - size_tib: - type: integer - format: uint32 - status: - type: string + type: object + required: + - volume_id + - volume_name + - size_tib + - status + properties: + volume_id: + type: string + volume_name: + type: string + size_tib: + type: integer + status: + type: string GPUClusters: - type: object - properties: - clusters: - type: array - items: - $ref: '#/components/schemas/GPUClusterInfo' + type: object + required: [clusters] + properties: + clusters: + type: array + items: + $ref: '#/components/schemas/GPUClusterInfo' InstanceTypesResponse: - type: object - properties: - types: - type: array - items: - enum: - - UNKNOWN_GPU_TYPE - - H100_SXM - - H200_SXM - - RTX_6000_PCI - - L40_PCIE - - B200_SXM - - H100_SXM_INF - type: string - format: enum - error: - $ref: '#/components/schemas/ErrorResponse' + type: object + properties: + types: + type: array + items: + enum: + - H100_SXM + - H200_SXM + - RTX_6000_PCI + - L40_PCIE + - B200_SXM + - H100_SXM_INF + error: + $ref: '#/components/schemas/ErrorResponse' Region: - type: object - properties: - id: - type: string - name: - type: string - availability_zones: - type: array - items: - type: string - driver_versions: - type: array - items: - type: string + type: object + required: + - id + - name + - availability_zones + - driver_versions + properties: + id: + type: string + name: + type: string + availability_zones: + type: array + items: + type: string + driver_versions: + type: array + items: + type: string RegionListResponse: - type: object - properties: - regions: - type: array - items: - $ref: '#/components/schemas/Region' + type: object + required: [regions] + properties: + regions: + type: array + items: + $ref: '#/components/schemas/Region' SharedVolumeCreateRequest: - type: object - required: - - volume_name - - size_tib - - region - properties: - volume_name: - type: string - size_tib: - type: integer - description: Volume size in whole tebibytes (TiB). - format: uint32 - region: - type: string - description: Region name. Usable regions can be found from `client.clusters.list_regions()` + type: object + required: + - volume_name + - size_tib + - region + properties: + volume_name: + type: string + size_tib: + description: Volume size in whole tebibytes (TiB). + type: integer + region: + type: string + description: Region name. Usable regions can be found from `client.clusters.list_regions()` SharedVolumeCreateResponse: - type: object - properties: - volume_id: - type: string + type: object + required: [volume_id] + properties: + volume_id: + type: string SharedVolumeDeleteResponse: - type: object - properties: - success: - type: boolean - SharedVolumeInfo: - type: object - properties: - volume_id: - type: string - volume_name: - type: string - size_tib: - type: integer - format: uint32 + type: object + required: [success] + properties: + success: + type: boolean + SharedVolumeInfo: + type: object + required: + - volume_id + - volume_name + - size_tib + properties: + volume_id: + type: string + volume_name: + type: string + size_tib: + type: integer SharedVolumeUpdateRequest: - type: object - properties: - volume_id: - type: string - size_tib: - type: integer - format: uint32 + type: object + properties: + volume_id: + type: string + size_tib: + type: integer SharedVolumes: - type: object - properties: - volumes: - type: array - items: - $ref: '#/components/schemas/SharedVolumeInfo' + type: object + required: [volumes] + properties: + volumes: + type: array + items: + $ref: '#/components/schemas/SharedVolumeInfo' ListVoicesResponse: description: Response containing a list of models and their available voices. type: object From 1a2da896059633ca6aa2859f288cd83d4e18f120 Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Sat, 20 Dec 2025 14:59:23 -0600 Subject: [PATCH 09/10] move update to url path put --- openapi.yaml | 61 +++++++++++++++++++++++++--------------------------- 1 file changed, 29 insertions(+), 32 deletions(-) diff --git a/openapi.yaml b/openapi.yaml index 82ae72e..263ed3e 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3315,35 +3315,6 @@ paths: curl -X GET \ -H "Authorization Bearer $TOGETHER_API_KEY" \ https://api.together.ai/v1/clusters - put: - tags: ['GPUClusterService'] - summary: Update a GPU Cluster. - operationId: GPUClusterService_Update - requestBody: - content: - application/json: - schema: - $ref: '#/components/schemas/GPUClusterUpdateRequest' - required: true - responses: - "200": - description: OK - content: - application/json: - schema: - $ref: '#/components/schemas/GPUClusterUpdateResponse' - x-codeSamples: - - lang: TypeScript - label: Together AI SDK (TypeScript) - source: | - client.clusters.create() - - lang: Shell - label: cURL - source: | - curl -X PUT \ - -H "Authorization Bearer $TOGETHER_API_KEY" \ - --data '{ "cluster_id": "cluster id", "cluster_type": "kubernetes", "num_gpus": 24 }' \ - https://api.together.ai/v1/clusters post: tags: ['GPUClusterService'] summary: Create GPU Cluster @@ -3394,6 +3365,35 @@ paths: curl -X GET \ -H "Authorization Bearer $TOGETHER_API_KEY" \ https://api.together.ai/v1/clusters/${CLUSTER_ID} + put: + tags: ['GPUClusterService'] + summary: Update a GPU Cluster. + operationId: GPUClusterService_Update + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusterUpdateRequest' + required: true + responses: + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/GPUClusterUpdateResponse' + x-codeSamples: + - lang: TypeScript + label: Together AI SDK (TypeScript) + source: | + client.clusters.create() + - lang: Shell + label: cURL + source: | + curl -X PUT \ + -H "Authorization Bearer $TOGETHER_API_KEY" \ + --data '{ "cluster_id": "cluster id", "cluster_type": "kubernetes", "num_gpus": 24 }' \ + https://api.together.ai/v1/clusters delete: tags: ['GPUClusterService'] summary: Delete GPU cluster by cluster ID @@ -5769,10 +5769,7 @@ components: type: integer GPUClusterUpdateRequest: type: object - required: [cluster_id] properties: - cluster_id: - type: string cluster_type: enum: [KUBERNETES, SLURM] num_gpus: From be800547a8384bf4e23ee22c8c5618d8b68bf7bc Mon Sep 17 00:00:00 2001 From: Blaine Kasten Date: Sat, 20 Dec 2025 15:06:28 -0600 Subject: [PATCH 10/10] add path parameter --- openapi.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/openapi.yaml b/openapi.yaml index 263ed3e..293f635 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -3369,6 +3369,12 @@ paths: tags: ['GPUClusterService'] summary: Update a GPU Cluster. operationId: GPUClusterService_Update + parameters: + - name: cluster_id + in: path + required: true + schema: + type: string requestBody: content: application/json: