curl --request POST \
--url https://api.aireserve.com/v1/gpu/clusters/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"nodes": 5,
"gpusPerNode": 8,
"name": "<string>",
"orchestrator": "none",
"image": "<string>",
"diskGbPerNode": 50,
"volumeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"volumeMountPath": "/workspace",
"registryCredentialId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sshKeyIds": [],
"sshPublicKey": "<string>",
"env": {},
"ports": [
{
"port": 32768
}
],
"dockerStartCmd": [],
"publicPortsAcknowledged": false,
"maxHourlyPrice": "<string>"
}
'import requests
url = "https://api.aireserve.com/v1/gpu/clusters/quote"
payload = {
"nodes": 5,
"gpusPerNode": 8,
"name": "<string>",
"orchestrator": "none",
"image": "<string>",
"diskGbPerNode": 50,
"volumeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"volumeMountPath": "/workspace",
"registryCredentialId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sshKeyIds": [],
"sshPublicKey": "<string>",
"env": {},
"ports": [{ "port": 32768 }],
"dockerStartCmd": [],
"publicPortsAcknowledged": False,
"maxHourlyPrice": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
nodes: 5,
gpusPerNode: 8,
name: '<string>',
orchestrator: 'none',
image: '<string>',
diskGbPerNode: 50,
volumeId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
volumeMountPath: '/workspace',
registryCredentialId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sshKeyIds: [],
sshPublicKey: '<string>',
env: {},
ports: [{port: 32768}],
dockerStartCmd: [],
publicPortsAcknowledged: false,
maxHourlyPrice: '<string>'
})
};
fetch('https://api.aireserve.com/v1/gpu/clusters/quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"quoteId": "<string>",
"kind": "cluster",
"expiresAt": "2023-11-07T05:31:56Z",
"accelerator": "<string>",
"nodes": 0,
"gpusPerNode": 0,
"totalGpus": 0,
"orchestrator": "none",
"region": "<string>",
"availability": "LOW",
"price": {
"gpuUsdPerHour": "<string>",
"gpusUsdPerHour": "<string>",
"rootDiskUsdPerHour": "<string>",
"clusterUsdPerHour": "<string>",
"persistentStorageUsdPerHour": "<string>",
"totalRunningUsdPerHour": "<string>",
"storageOnlyUsdPerHour": "<string>",
"networkingIncluded": true
},
"storage": {
"rootGbPerNode": 0,
"rootPersistence": "ephemeral",
"persistent": {
"volumeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sizeGb": 0,
"mountPath": "<string>",
"usdPerHour": "<string>",
"billsUntilDeleted": true,
"survivesStop": true,
"survivesTerminate": true,
"multiAttach": false,
"status": "<string>"
}
},
"runtime": {
"type": "container",
"profile": "<string>"
},
"capabilities": {
"start": false,
"stop": false,
"restart": false,
"ssh": true,
"logs": true,
"persistentVolumes": true,
"stopPreservesRootDisk": false
},
"maxHourlyPrice": "<string>"
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}Quote GPU cluster
Price a multi-node cluster before launching it: nodes identical machines (2–8) of gpusPerNode GPUs (1–8) on a private interconnect in one location. Runs the same placement as a launch: an existing volumeId pins the cluster to where that volume lives, and inline storage prices one shared volume beside it, mounted at the same path on every node. Answers with the whole-cluster hourly price (inter-node networking included), what survives terminate, and a quoteId to launch exactly this. availability is the stock signal for one node; whether every node can be placed together is confirmed only at launch. A request that cannot be satisfied answers 409 no_capacity with a reason and alternatives, before anything is created or charged. Larger clusters are arranged through sales. Quotes expire after 120 seconds. Requires compute read access.
curl --request POST \
--url https://api.aireserve.com/v1/gpu/clusters/quote \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"nodes": 5,
"gpusPerNode": 8,
"name": "<string>",
"orchestrator": "none",
"image": "<string>",
"diskGbPerNode": 50,
"volumeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"volumeMountPath": "/workspace",
"registryCredentialId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sshKeyIds": [],
"sshPublicKey": "<string>",
"env": {},
"ports": [
{
"port": 32768
}
],
"dockerStartCmd": [],
"publicPortsAcknowledged": false,
"maxHourlyPrice": "<string>"
}
'import requests
url = "https://api.aireserve.com/v1/gpu/clusters/quote"
payload = {
"nodes": 5,
"gpusPerNode": 8,
"name": "<string>",
"orchestrator": "none",
"image": "<string>",
"diskGbPerNode": 50,
"volumeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"volumeMountPath": "/workspace",
"registryCredentialId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sshKeyIds": [],
"sshPublicKey": "<string>",
"env": {},
"ports": [{ "port": 32768 }],
"dockerStartCmd": [],
"publicPortsAcknowledged": False,
"maxHourlyPrice": "<string>"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
nodes: 5,
gpusPerNode: 8,
name: '<string>',
orchestrator: 'none',
image: '<string>',
diskGbPerNode: 50,
volumeId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
volumeMountPath: '/workspace',
registryCredentialId: '3c90c3cc-0d44-4b50-8888-8dd25736052a',
sshKeyIds: [],
sshPublicKey: '<string>',
env: {},
ports: [{port: 32768}],
dockerStartCmd: [],
publicPortsAcknowledged: false,
maxHourlyPrice: '<string>'
})
};
fetch('https://api.aireserve.com/v1/gpu/clusters/quote', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"id": "<string>",
"quoteId": "<string>",
"kind": "cluster",
"expiresAt": "2023-11-07T05:31:56Z",
"accelerator": "<string>",
"nodes": 0,
"gpusPerNode": 0,
"totalGpus": 0,
"orchestrator": "none",
"region": "<string>",
"availability": "LOW",
"price": {
"gpuUsdPerHour": "<string>",
"gpusUsdPerHour": "<string>",
"rootDiskUsdPerHour": "<string>",
"clusterUsdPerHour": "<string>",
"persistentStorageUsdPerHour": "<string>",
"totalRunningUsdPerHour": "<string>",
"storageOnlyUsdPerHour": "<string>",
"networkingIncluded": true
},
"storage": {
"rootGbPerNode": 0,
"rootPersistence": "ephemeral",
"persistent": {
"volumeId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"sizeGb": 0,
"mountPath": "<string>",
"usdPerHour": "<string>",
"billsUntilDeleted": true,
"survivesStop": true,
"survivesTerminate": true,
"multiAttach": false,
"status": "<string>"
}
},
"runtime": {
"type": "container",
"profile": "<string>"
},
"capabilities": {
"start": false,
"stop": false,
"restart": false,
"ssh": true,
"logs": true,
"persistentVolumes": true,
"stopPreservesRootDisk": false
},
"maxHourlyPrice": "<string>"
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}{
"error": {
"message": "<string>",
"type": "invalid_request_error",
"param": "<string>",
"code": "<string>",
"details": {}
}
}Authorizations
Your AI Reserve API key (aireserve_api_…) from the API Keys page in the portal (https://portal.aireserve.com/keys).
Body
A40_48GB, A100_80GB, H100_80GB, H100_NVL_94GB, H200_141GB, B200_180GB, B300_288GB, L40_48GB, L40S_48GB, RTX_2000_ADA_16GB, RTX_4000_ADA_20GB, RTX_6000_ADA_48GB, RTX_A5000_24GB, RTX_PRO_4000_24GB, RTX_PRO_4500_32GB, RTX_PRO_6000_96GB, RTX_PRO_6000_MIG_24GB, RTX_PRO_6000_MIG_48GB, MI300X_192GB 2 <= x <= 81 <= x <= 8north_america, united_states, canada, europe, asia_pacific, oceania 1 - 120none, slurm, ray 1 - 500^(?![A-Za-z][A-Za-z0-9+.-]*:\/\/)[A-Za-z0-9][A-Za-z0-9./_:@-]*$1 <= x <= 1024^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$120^\/[A-Za-z0-9_-]+(?:\/[A-Za-z0-9_-]+)*\/?$Show child attributes
Show child attributes
^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$20^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$1 - 16384Show child attributes
Show child attributes
Show child attributes
Show child attributes
324096^\d{1,7}(?:\.\d{1,6})?$Response
Priced. The request can be launched as quoted.
A priced, placeable cluster request. If this is returned, the request can be launched as quoted; a request that cannot be satisfied answers 409 no_capacity instead.
Signed quote token. Same as quoteId.
Pass as quoteId to POST /v1/gpu/clusters to launch exactly what was quoted. Expires after 120 seconds.
cluster ^(?:(?:\d\d[2468][048]|\d\d[13579][26]|\d\d0[48]|[02468][048]00|[13579][26]00)-02-29|\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\d|30)|(?:02)-(?:0[1-9]|1\d|2[0-8])))T(?:(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d(?:\.\d+)?(?:Z|([+-](?:[01]\d|2[0-3]):[0-5]\d)))$-9007199254740991 <= x <= 9007199254740991-9007199254740991 <= x <= 9007199254740991-9007199254740991 <= x <= 9007199254740991none, slurm, ray Normalized region the cluster would run in.
Stock signal for ONE node of this shape at the chosen location. Placement of all nodes together is confirmed only at launch; a launch that cannot be fully placed fails its operation with no_capacity.
LOW, MEDIUM, HIGH, UNKNOWN Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
USD amount as a six-decimal string. Never a float.
^\d+(?:\.\d{1,6})?$