curl --request POST \
--url https://api.aireserve.com/v1/gpu/volumes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "my-workspace",
"dataCenterId": "EU-RO-1",
"sizeGb": 50,
"quoteId": "<quote-id>",
"storageBillingAcknowledged": true
}
'import requests
url = "https://api.aireserve.com/v1/gpu/volumes"
payload = {
"name": "my-workspace",
"dataCenterId": "EU-RO-1",
"sizeGb": 50,
"quoteId": "<quote-id>",
"storageBillingAcknowledged": True
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'my-workspace',
dataCenterId: 'EU-RO-1',
sizeGb: 50,
quoteId: '<quote-id>',
storageBillingAcknowledged: true
})
};
fetch('https://api.aireserve.com/v1/gpu/volumes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"accepted": true,
"resourceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"operationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "accepted",
"resourceType": "pod"
}Create volume
Create a new RunPod network volume. Requires a signed quoteId from POST /v1/gpu/quotes. Authorizes and captures the first storage hour from your wallet before dispatching to RunPod. Storage billing accrues continuously while the volume exists, independent of pod state. Returns 202 Accepted. Requires compute manage access. Idempotency-Key header is required.
curl --request POST \
--url https://api.aireserve.com/v1/gpu/volumes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '
{
"name": "my-workspace",
"dataCenterId": "EU-RO-1",
"sizeGb": 50,
"quoteId": "<quote-id>",
"storageBillingAcknowledged": true
}
'import requests
url = "https://api.aireserve.com/v1/gpu/volumes"
payload = {
"name": "my-workspace",
"dataCenterId": "EU-RO-1",
"sizeGb": 50,
"quoteId": "<quote-id>",
"storageBillingAcknowledged": True
}
headers = {
"Idempotency-Key": "<idempotency-key>",
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {
'Idempotency-Key': '<idempotency-key>',
Authorization: 'Bearer <token>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
name: 'my-workspace',
dataCenterId: 'EU-RO-1',
sizeGb: 50,
quoteId: '<quote-id>',
storageBillingAcknowledged: true
})
};
fetch('https://api.aireserve.com/v1/gpu/volumes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));{
"accepted": true,
"resourceId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"operationId": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"status": "accepted",
"resourceType": "pod"
}Authorizations
Your AI Reserve API key (aireserve_api_…) from the API Keys page in the portal (https://portal.aireserve.com/keys).
Headers
Body
120Data center for the volume. Must match any pod you intend to attach it to.
Initial size in GiB. Growth-only after creation.
10 <= x <= 4096Signed quote token from POST /v1/gpu/quotes with kind: volume.
Must be true. Confirms you understand that storage billing accrues continuously while the volume exists.
true Response
Volume creation accepted.
Response to a 202 Accepted Compute mutation. All fields are camelCase. Use operationId to poll GET /v1/gpu/operations/{id} for terminal status.
true ID of the resource created or mutated.
ID for the durable operation record. Poll GET /v1/gpu/operations/{id} for terminal status.
accepted, pending pod, volume, template, registry, ssh_key