curl --request POST \
--url https://storage.{region}.basaltic.sh/v1/volumes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "data-vol-01",
"volume_type": "ssd",
"size_gb": 100,
"performance": {
"iops": 6000,
"throughput_mib_s": 250
},
"description": "Primary data volume for app-01",
"tags": {
"environment": "production",
"team": "backend"
},
"architecture": "amd64",
"source_image": "ubuntu-24.04",
"source_snapshot": "019f24a8-4bbe-7441-93af-6bbac0413943",
"bootable": false
}
'import requests
url = "https://storage.{region}.basaltic.sh/v1/volumes"
payload = {
"name": "data-vol-01",
"volume_type": "ssd",
"size_gb": 100,
"performance": {
"iops": 6000,
"throughput_mib_s": 250
},
"description": "Primary data volume for app-01",
"tags": {
"environment": "production",
"team": "backend"
},
"architecture": "amd64",
"source_image": "ubuntu-24.04",
"source_snapshot": "019f24a8-4bbe-7441-93af-6bbac0413943",
"bootable": False
}
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({
name: 'data-vol-01',
volume_type: 'ssd',
size_gb: 100,
performance: {iops: 6000, throughput_mib_s: 250},
description: 'Primary data volume for app-01',
tags: {environment: 'production', team: 'backend'},
architecture: 'amd64',
source_image: 'ubuntu-24.04',
source_snapshot: '019f24a8-4bbe-7441-93af-6bbac0413943',
bootable: false
})
};
fetch('https://storage.{region}.basaltic.sh/v1/volumes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://storage.{region}.basaltic.sh/v1/volumes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'data-vol-01',
'volume_type' => 'ssd',
'size_gb' => 100,
'performance' => [
'iops' => 6000,
'throughput_mib_s' => 250
],
'description' => 'Primary data volume for app-01',
'tags' => [
'environment' => 'production',
'team' => 'backend'
],
'architecture' => 'amd64',
'source_image' => 'ubuntu-24.04',
'source_snapshot' => '019f24a8-4bbe-7441-93af-6bbac0413943',
'bootable' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://storage.{region}.basaltic.sh/v1/volumes"
payload := strings.NewReader("{\n \"name\": \"data-vol-01\",\n \"volume_type\": \"ssd\",\n \"size_gb\": 100,\n \"performance\": {\n \"iops\": 6000,\n \"throughput_mib_s\": 250\n },\n \"description\": \"Primary data volume for app-01\",\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n },\n \"architecture\": \"amd64\",\n \"source_image\": \"ubuntu-24.04\",\n \"source_snapshot\": \"019f24a8-4bbe-7441-93af-6bbac0413943\",\n \"bootable\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://storage.{region}.basaltic.sh/v1/volumes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"data-vol-01\",\n \"volume_type\": \"ssd\",\n \"size_gb\": 100,\n \"performance\": {\n \"iops\": 6000,\n \"throughput_mib_s\": 250\n },\n \"description\": \"Primary data volume for app-01\",\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n },\n \"architecture\": \"amd64\",\n \"source_image\": \"ubuntu-24.04\",\n \"source_snapshot\": \"019f24a8-4bbe-7441-93af-6bbac0413943\",\n \"bootable\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://storage.{region}.basaltic.sh/v1/volumes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"data-vol-01\",\n \"volume_type\": \"ssd\",\n \"size_gb\": 100,\n \"performance\": {\n \"iops\": 6000,\n \"throughput_mib_s\": 250\n },\n \"description\": \"Primary data volume for app-01\",\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n },\n \"architecture\": \"amd64\",\n \"source_image\": \"ubuntu-24.04\",\n \"source_snapshot\": \"019f24a8-4bbe-7441-93af-6bbac0413943\",\n \"bootable\": false\n}"
response = http.request(request)
puts response.read_body{
"volume": {
"faults": [
{
"code": "BACKUP_FAILED",
"severity": "error",
"message": "Backup upload failed.",
"details": {},
"first_at": "2023-11-07T05:31:56Z",
"last_at": "2023-11-07T05:31:56Z",
"occurrences": 1
}
],
"id": "5f8d2c1a-9b3e-4d7a-8c6f-1e2a3b4c5d6e",
"crn": "crn:storage:sa-saopaulo-1:my-account:volume/data-volume-01",
"name": "data-vol-01",
"description": "Primary data volume for app-01",
"tags": {
"environment": "production",
"team": "backend"
},
"volume_type": "ssd",
"size_gb": 100,
"performance": {
"requested": {
"iops": 3000,
"bytes_per_sec": 131072000,
"burst_iops": 0,
"burst_bytes_per_sec": 0,
"burst_seconds": 0
},
"applied": {
"iops": 3000,
"bytes_per_sec": 131072000,
"burst_iops": 0,
"burst_bytes_per_sec": 0,
"burst_seconds": 0
},
"state": "creating",
"operation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"applied_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"included_io_limits": {
"iops": 3000,
"bytes_per_sec": 131072000,
"burst_iops": 0,
"burst_bytes_per_sec": 0,
"burst_seconds": 0
},
"status": "available",
"bootable": false,
"source_image_id": "a3c9e7b1-2d4f-4a6b-8e1c-9f0a1b2c3d4e",
"source_snapshot_id": "019f24a8-4bbe-7441-93af-6bbac0413943",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:31:12Z"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}Criar volume
Aceitar uma solicitação de criação de volume. A linha é persistente no status creating e provisionada assíncrona — poll GET até que o status mude para available (sucesso) ou error, com falhas ativas.
curl --request POST \
--url https://storage.{region}.basaltic.sh/v1/volumes \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"name": "data-vol-01",
"volume_type": "ssd",
"size_gb": 100,
"performance": {
"iops": 6000,
"throughput_mib_s": 250
},
"description": "Primary data volume for app-01",
"tags": {
"environment": "production",
"team": "backend"
},
"architecture": "amd64",
"source_image": "ubuntu-24.04",
"source_snapshot": "019f24a8-4bbe-7441-93af-6bbac0413943",
"bootable": false
}
'import requests
url = "https://storage.{region}.basaltic.sh/v1/volumes"
payload = {
"name": "data-vol-01",
"volume_type": "ssd",
"size_gb": 100,
"performance": {
"iops": 6000,
"throughput_mib_s": 250
},
"description": "Primary data volume for app-01",
"tags": {
"environment": "production",
"team": "backend"
},
"architecture": "amd64",
"source_image": "ubuntu-24.04",
"source_snapshot": "019f24a8-4bbe-7441-93af-6bbac0413943",
"bootable": False
}
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({
name: 'data-vol-01',
volume_type: 'ssd',
size_gb: 100,
performance: {iops: 6000, throughput_mib_s: 250},
description: 'Primary data volume for app-01',
tags: {environment: 'production', team: 'backend'},
architecture: 'amd64',
source_image: 'ubuntu-24.04',
source_snapshot: '019f24a8-4bbe-7441-93af-6bbac0413943',
bootable: false
})
};
fetch('https://storage.{region}.basaltic.sh/v1/volumes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://storage.{region}.basaltic.sh/v1/volumes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'data-vol-01',
'volume_type' => 'ssd',
'size_gb' => 100,
'performance' => [
'iops' => 6000,
'throughput_mib_s' => 250
],
'description' => 'Primary data volume for app-01',
'tags' => [
'environment' => 'production',
'team' => 'backend'
],
'architecture' => 'amd64',
'source_image' => 'ubuntu-24.04',
'source_snapshot' => '019f24a8-4bbe-7441-93af-6bbac0413943',
'bootable' => false
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://storage.{region}.basaltic.sh/v1/volumes"
payload := strings.NewReader("{\n \"name\": \"data-vol-01\",\n \"volume_type\": \"ssd\",\n \"size_gb\": 100,\n \"performance\": {\n \"iops\": 6000,\n \"throughput_mib_s\": 250\n },\n \"description\": \"Primary data volume for app-01\",\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n },\n \"architecture\": \"amd64\",\n \"source_image\": \"ubuntu-24.04\",\n \"source_snapshot\": \"019f24a8-4bbe-7441-93af-6bbac0413943\",\n \"bootable\": false\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://storage.{region}.basaltic.sh/v1/volumes")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"data-vol-01\",\n \"volume_type\": \"ssd\",\n \"size_gb\": 100,\n \"performance\": {\n \"iops\": 6000,\n \"throughput_mib_s\": 250\n },\n \"description\": \"Primary data volume for app-01\",\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n },\n \"architecture\": \"amd64\",\n \"source_image\": \"ubuntu-24.04\",\n \"source_snapshot\": \"019f24a8-4bbe-7441-93af-6bbac0413943\",\n \"bootable\": false\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://storage.{region}.basaltic.sh/v1/volumes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"data-vol-01\",\n \"volume_type\": \"ssd\",\n \"size_gb\": 100,\n \"performance\": {\n \"iops\": 6000,\n \"throughput_mib_s\": 250\n },\n \"description\": \"Primary data volume for app-01\",\n \"tags\": {\n \"environment\": \"production\",\n \"team\": \"backend\"\n },\n \"architecture\": \"amd64\",\n \"source_image\": \"ubuntu-24.04\",\n \"source_snapshot\": \"019f24a8-4bbe-7441-93af-6bbac0413943\",\n \"bootable\": false\n}"
response = http.request(request)
puts response.read_body{
"volume": {
"faults": [
{
"code": "BACKUP_FAILED",
"severity": "error",
"message": "Backup upload failed.",
"details": {},
"first_at": "2023-11-07T05:31:56Z",
"last_at": "2023-11-07T05:31:56Z",
"occurrences": 1
}
],
"id": "5f8d2c1a-9b3e-4d7a-8c6f-1e2a3b4c5d6e",
"crn": "crn:storage:sa-saopaulo-1:my-account:volume/data-volume-01",
"name": "data-vol-01",
"description": "Primary data volume for app-01",
"tags": {
"environment": "production",
"team": "backend"
},
"volume_type": "ssd",
"size_gb": 100,
"performance": {
"requested": {
"iops": 3000,
"bytes_per_sec": 131072000,
"burst_iops": 0,
"burst_bytes_per_sec": 0,
"burst_seconds": 0
},
"applied": {
"iops": 3000,
"bytes_per_sec": 131072000,
"burst_iops": 0,
"burst_bytes_per_sec": 0,
"burst_seconds": 0
},
"state": "creating",
"operation_id": "3c90c3cc-0d44-4b50-8888-8dd25736052a",
"applied_at": "2023-11-07T05:31:56Z",
"last_error": "<string>"
},
"included_io_limits": {
"iops": 3000,
"bytes_per_sec": 131072000,
"burst_iops": 0,
"burst_bytes_per_sec": 0,
"burst_seconds": 0
},
"status": "available",
"bootable": false,
"source_image_id": "a3c9e7b1-2d4f-4a6b-8e1c-9f0a1b2c3d4e",
"source_snapshot_id": "019f24a8-4bbe-7441-93af-6bbac0413943",
"created_at": "2026-01-15T09:30:00Z",
"updated_at": "2026-01-15T09:31:12Z"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "UNAUTHORIZED",
"message": "Authentication required",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "ACCESS_DENIED",
"message": "You don't have permission to perform this action",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INVALID_INPUT",
"message": "Invalid request parameters",
"request_id": "550e8400-e29b-41d4-a716-446655440000",
"params": {
"instances": 2,
"pools": 0
}
}
}{
"error": {
"code": "IDEMPOTENCY_KEY_REUSED",
"message": "This Idempotency-Key was already used with a different request payload",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}{
"error": {
"code": "INTERNAL_ERROR",
"message": "An internal error occurred",
"request_id": "550e8400-e29b-41d4-a716-446655440000"
}
}storage:CreateVolume. Consulte permissões de armazenamento para obter a lista completa, o que cada uma abrange e um exemplo de política.Autorizações
Um token bearer OAuth 2.0, enviado como Authorization: Bearer <token>. Esta é a forma recomendada de autenticação.
Obtenha o token trocando o par de chaves de acesso de uma conta de serviço em POST /v1/oauth/token com grant_type=client_credentials. Esse é o fluxo padrão de credenciais de cliente; bibliotecas compatíveis com OAuth podem obter e renovar o token para você.
curl -s -u "$KEY_ID:$SECRET" -d grant_type=client_credentials \
https://iam.basaltic.sh/v1/oauth/token
Os tokens duram uma hora por padrão. O mesmo par de chaves de acesso também serve como credencial AWS SigV4 para o endpoint de objetos compatível com S3, que aceita somente esse método de autenticação.
Cabeçalhos
Chave opcional gerada pelo cliente que torna uma criação segura para reprodução. A reintentar uma solicitação com a mesma chave retorna o resultado original literalmente em vez de criar um recurso duplicado. A reutilização de uma chave com um corpo de solicitação diferente é rejeitada (422); uma solicitação cuja chave ainda está sendo processada retorna 409. Os registros são honrados por 24 horas. Use um UUID ou token exclusivo semelhante.
255Corpo
Os nomes de recursos não devem começar com o prefixo literal crn: ou ser UUIDs (formas canônicas, compactas, entre colchetes ou urn:uuid:, em qualquer caso).
1 - 128"data-vol-01"
As camadas em que um novo volume pode ser provisionado. hdd é uma camada armazenada válida, mas seu pool é reservado para armazenamento a frio, portanto, a criação de um volume de bloco nele é rejeitada.
ssd, nvme "ssd"
1 <= x <= 16384100
Desempenho de leitura/gravação combinado total sustentado de provisionamento independente. As dimensões omitidas mantêm seu valor atual (incluído na criação). O SSD permite até 8000 IOPS e 250 MiB/s; o NVMe até 12000 e 500 MiB/s. O mínimo é a cota incluída do volume; cotas maiores permanecem disponíveis gratuitamente. O rendimento é inteiro MiB/s, exceto uma fração exata de permissão de legado pode ser selecionada para remover o complemento pago. Os aumentos exigem cota de conta, capacidade regional e armazenamento saudável. Fatura de extras aplicados por duração decorrido, incluindo enquanto desligado ou parado.
Show child attributes
Show child attributes
"Primary data volume for app-01"
Show child attributes
Show child attributes
{
"environment": "production",
"team": "backend"
}
Arquitetura usada para resolução de nome source_image. Uma imagem completa CRN fixa sua própria arquitetura.
"amd64"
Imagem UUID, nome, nome:versão, ou imagem CRN completa//arquitectura//versão/. Os nomes são resolvidos na conta do chamador primeiro, depois as imagens do catálogo da plataforma são marcadas, usando a arquitetura (padrão amd64).
"ubuntu-24.04"
Clonar a partir de um snapshot disponível de propriedade da conta UUID ou CRN aninhado volume//snapshot/Nomes de instantâneos nuos são rejeitados porque essa solicitação não tem volume de origem fixo.Mutuamente exclusivo com source_image; size_gb deve ser pelo menos o tamanho congelado do instantâneo.
"019f24a8-4bbe-7441-93af-6bbac0413943"
false
Resposta
Criação de volume aceita (status=creating)
Show child attributes
Show child attributes

