Download OpenAPI specification:Download
Most API endpoints are secured using Bearer Token Authentication. To access the API, you need to include a valid token in the Authorization header of your requests.
Example:
Authorization: Bearer <your-token>
There are two methods to obtain Bearer tokens for API authentication:
API Keys are long-term tokens that provide persistent access to the API.
OAuth Applications provide short-lived tokens using client credentials.
client_id and client_secret/v1/oauth2/token endpoint (see below)401 Unauthorized responseIf you have trouble authenticating or accessing the API, please contact support@openmetal.io for assistance.
Exchange OAuth Application client credentials for a short-lived Bearer token.
This endpoint uses Basic Authentication with your OAuth App credentials:
client_idclient_secretThe Authorization header should contain the Base64-encoded credentials in the format:
Authorization: Basic <Base64(client_id:client_secret)>
Example cURL request:
curl --location 'https://api.central.openmetal.io/v1/oauth2/token?grant_type=client_credentials' \
--header 'Authorization: Basic <Base64-encoded-credentials>'
| grant_type required | string Value: "client_credentials" Example: grant_type=client_credentials The OAuth grant type. Currently only "client_credentials" is supported. |
{- "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
- "expires_in": 14400,
- "token_type": "bearer"
}Operations for managing a collection of servers. Private clouds or a group of baremetal nodes will be owned by a cloud resource.
[- {
- "id": "0Absd1",
- "label": "My first cloud",
- "description": "This cloud is for testing purposes.",
- "created_at": "2021-01-01T00:00:00Z",
- "fields": {
- "cloud_type": "pcc",
- "cloud_uuid": "0000000-0000-00-00000",
- "cloud_version": "2.0",
- "owner_name": "My Company",
- "organization_id": "0a2erc",
- "hostname": "127.0.0.1",
- "order_id": "0a2erc",
- "pod_location": "pod_2",
- "provision_status": "complete",
- "provision_completion_time": "2021-01-01T00:00:00Z",
- "pending_delete": false
}
}
]Retrieve details of a specific cloud by their ID.
| cloudId required | string The ID of the cloud to retrieve. |
{- "id": "0Absd1",
- "label": "My first cloud",
- "description": "This cloud is for testing purposes.",
- "created_at": "2021-01-01T00:00:00Z",
- "fields": {
- "cloud_type": "pcc",
- "cloud_uuid": "0000000-0000-00-00000",
- "cloud_version": "2.0",
- "owner_name": "My Company",
- "organization_id": "0a2erc",
- "hostname": "127.0.0.1",
- "order_id": "0a2erc",
- "pod_location": "pod_2",
- "provision_status": "complete",
- "provision_completion_time": "2021-01-01T00:00:00Z",
- "pending_delete": false
}
}Delete a cloud resource and reclaim all associated infrastructure.
Important: The cloud will be immediately deactivated upon successful deletion. However, there is a 3-day delay before servers are fully decommissioned and wiped. Clouds will enter a "pending-delete" state during this period.
| cloudId required | string Example: 0Absd1 The ID of the cloud to delete. |
Get detailed stats for a specific cloud including node hardware information, power states, VLAN configuration, and service assignments.
| cloudId required | string The ID of the cloud to retrieve. |
{- "name": "US East - Production Cloud",
- "description": "A Pre-prepared cloud generated automatically",
- "label": "deploy-v2,pcc,pcc-3.0.7",
- "cloud_uuid": "00000000-0000-0000-0000-000000000001",
- "cloud_state": "RUNNING",
- "cloud_hostname": "198.51.100.10",
- "cloud_hosts": [
- "00000000-0000-0000-0000-000000000010",
- "00000000-0000-0000-0000-000000000011",
- "00000000-0000-0000-0000-000000000012"
], - "external_vip_address": "198.51.100.10",
- "internal_vip_address": "192.168.3.254",
- "maintenance": false,
- "creation_date": "2025-01-15T10:45:24.510406",
- "pending_number": 0,
- "pending_tasks": [
- "string"
], - "pending_date": null,
- "prevent_delete": false,
- "nodes": [
- {
- "uuid": "00000000-0000-0000-0000-000000000010",
- "state": "active",
- "power_state": "power on",
- "hostname": "great-wombat.local",
- "type": "mb_standard_v1",
- "cpu": 16,
- "memory": "135 GB",
- "rack": "504",
- "chassis": "36",
- "disks": [
- {
- "name": "/dev/nvme0n1",
- "size": "480 GB",
- "root": true
}
], - "labels": [
- "control",
- "storage",
- "compute"
], - "kolla_services": {
- "control": true,
- "monitoring": true,
- "network": true,
- "storage": true,
- "compute": true
}, - "ceph_services": {
- "mons": true,
- "mgrs": true,
- "osds": true,
- "rgws": true
}, - "networks": [
- {
- "mac_address": "aa:bb:cc:dd:ee:01"
}
], - "ipaddress": "198.51.100.12",
- "vlans": [
- {
- "vlan": 123,
- "ip": "198.51.100.12/28",
- "mtu": 1500,
- "label": "inventory"
}
], - "maintenance": false,
- "creation_date": "2023-10-24T17:33:42.512412",
- "last_updated": "2025-12-19T10:52:21.008394",
- "assigned_date": "2025-12-19T10:46:57.296469",
- "properties": {
- "cpu": {
- "model_name": "Intel(R) Xeon(R) D-2141I CPU @ 2.20GHz",
- "frequency": "3000.0000",
- "count": 16,
- "architecture": "x86_64"
}, - "memory": {
- "total": 134807142400,
- "physical_mb": 131072
}, - "root_disk": {
- "name": "/dev/nvme0n1",
- "model": "Micron_7300_MTFDHBA480TDF",
- "size": 480103981056,
- "rotational": false
}, - "disks": [
- {
- "name": "/dev/nvme0n1",
- "model": "Micron_7300_MTFDHBA480TDF",
- "size": 480103981056,
- "rotational": false
}
]
}
}
], - "vlans": [
- {
- "id": 123,
- "uuid": "00000000-0000-0000-0000-000000000020",
- "label": "inventory",
- "vlan_type": "routed",
- "state": "ROUTED",
- "prefixes": [
- {
- "id": 123,
- "cidr": "198.51.100.112/28",
- "prefix_type": "routed",
- "usage": "inventory",
- "status": "ROUTED",
- "managed_addressing": "pool",
- "ip_addrs": [
- {
- "label": "inventory",
- "assigned_host": "d26beb51-559c-42fe-b062-3012e3ebc6c1",
- "ip": "198.51.100.118/28"
}
]
}
]
}
], - "keys": [
- {
- "cloud_uuid": "ecda121b-a8b8-45cc-8097-c08b123f28db",
- "public_key": "ssh-rsa AAAA...truncated"
}
]
}Assign an existing VLAN resource to a private cloud.
Requirements:
| cloudId required | string Example: 0Absd1 The ID of the cloud to assign the VLAN to. |
| vlanId required | string Example: vl4nXy2Z9a The ID of the VLAN resource to assign. |
{- "id": "vl4nXy2Z9a",
- "type": "vlans",
- "label": "production-vlan",
- "description": "VLAN for production workloads",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vlan_type": "routed",
- "alterable": true,
- "cloud_id": "0Absd1"
}
}Unassign a VLAN resource from a private cloud.
This removes the association between the VLAN and the cloud but does not delete the VLAN resource itself.
Important: You cannot remove all VLAN assignments. A VLAN needs to have at least one cloud assignment.
| cloudId required | string Example: 0Absd1 The ID of the cloud to unassign the VLAN from. |
| vlanId required | string Example: vl4nXy2Z9a The ID of the VLAN resource to unassign. |
Remove a hardware node from a cloud. The node is detached from the cloud and its inventory is cleaned up asynchronously.
Requires the manage capability on the cloud resource. This limits access to users with the owner role on the cloud (resource owner, organization admin, or support agent).
| cloudId required | string Example: 0Absd1 The Central resource ID of the cloud (hash ID format). |
| nodeUuid required | string <uuid> Example: 550e8400-e29b-41d4-a716-446655440000 The UUID of the node to remove. This can be found in the |
{- "name": "US East - Production Cloud",
- "description": "A Pre-prepared cloud generated automatically",
- "label": "deploy-v2,pcc,pcc-3.0.7",
- "cloud_uuid": "00000000-0000-0000-0000-000000000001",
- "cloud_state": "RUNNING",
- "cloud_hostname": "198.51.100.10",
- "cloud_hosts": [
- "00000000-0000-0000-0000-000000000010",
- "00000000-0000-0000-0000-000000000011",
- "00000000-0000-0000-0000-000000000012"
], - "external_vip_address": "198.51.100.10",
- "internal_vip_address": "192.168.3.254",
- "maintenance": false,
- "creation_date": "2025-01-15T10:45:24.510406",
- "pending_number": 0,
- "pending_tasks": [
- "string"
], - "pending_date": null,
- "prevent_delete": false,
- "nodes": [
- {
- "uuid": "00000000-0000-0000-0000-000000000010",
- "state": "active",
- "power_state": "power on",
- "hostname": "great-wombat.local",
- "type": "mb_standard_v1",
- "cpu": 16,
- "memory": "135 GB",
- "rack": "504",
- "chassis": "36",
- "disks": [
- {
- "name": "/dev/nvme0n1",
- "size": "480 GB",
- "root": true
}
], - "labels": [
- "control",
- "storage",
- "compute"
], - "kolla_services": {
- "control": true,
- "monitoring": true,
- "network": true,
- "storage": true,
- "compute": true
}, - "ceph_services": {
- "mons": true,
- "mgrs": true,
- "osds": true,
- "rgws": true
}, - "networks": [
- {
- "mac_address": "aa:bb:cc:dd:ee:01"
}
], - "ipaddress": "198.51.100.12",
- "vlans": [
- {
- "vlan": 123,
- "ip": "198.51.100.12/28",
- "mtu": 1500,
- "label": "inventory"
}
], - "maintenance": false,
- "creation_date": "2023-10-24T17:33:42.512412",
- "last_updated": "2025-12-19T10:52:21.008394",
- "assigned_date": "2025-12-19T10:46:57.296469",
- "properties": {
- "cpu": {
- "model_name": "Intel(R) Xeon(R) D-2141I CPU @ 2.20GHz",
- "frequency": "3000.0000",
- "count": 16,
- "architecture": "x86_64"
}, - "memory": {
- "total": 134807142400,
- "physical_mb": 131072
}, - "root_disk": {
- "name": "/dev/nvme0n1",
- "model": "Micron_7300_MTFDHBA480TDF",
- "size": 480103981056,
- "rotational": false
}, - "disks": [
- {
- "name": "/dev/nvme0n1",
- "model": "Micron_7300_MTFDHBA480TDF",
- "size": 480103981056,
- "rotational": false
}
]
}
}
], - "vlans": [
- {
- "id": 123,
- "uuid": "00000000-0000-0000-0000-000000000020",
- "label": "inventory",
- "vlan_type": "routed",
- "state": "ROUTED",
- "prefixes": [
- {
- "id": 123,
- "cidr": "198.51.100.112/28",
- "prefix_type": "routed",
- "usage": "inventory",
- "status": "ROUTED",
- "managed_addressing": "pool",
- "ip_addrs": [
- {
- "label": "inventory",
- "assigned_host": "d26beb51-559c-42fe-b062-3012e3ebc6c1",
- "ip": "198.51.100.118/28"
}
]
}
]
}
], - "keys": [
- {
- "cloud_uuid": "ecda121b-a8b8-45cc-8097-c08b123f28db",
- "public_key": "ssh-rsa AAAA...truncated"
}
]
}Operations for managing custom deployment configurations.
A configuration is a reusable template that defines what operating system image and/or cloud-init user data should be applied to bare metal hardware during provisioning. Instead of specifying an OS image directly in each order, you can create a configuration once and reference it by ID when placing bare metal orders via the deployment_configuration field in order modifications.
Configurations currently support disk deployment mode:
| Mode | Required Fields | Description |
|---|---|---|
| Disk | image_source |
Traditional whole-disk image written directly to disk |
Disk mode requires image_os_hash_algo and image_os_hash_value for image integrity verification. Valid hash algorithms are md5, sha256, and sha512.
Cloud-init user data (cloud_init.data) can be combined with disk deployment.
Retrieve a list of all custom deployment configurations for your organization.
[- {
- "id": "0a7Y8ABym5",
- "label": "Ubuntu 22.04 Disk Deploy",
- "description": "Standard whole-disk image deployment",
- "fields": {
- "image_os_hash_algo": "sha256",
- "image_os_hash_value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "cloud_init": {
- "data": "{\"packages\":[\"nginx\"],\"runcmd\":[\"/var/lib/cloud/scripts/per-once/setup.sh\"]}"
}, - "organization_id": "mWLBVbB7Eq"
}, - "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00"
}
]Create a new custom deployment configuration with an OS image and/or cloud-init user data.
Set image_source in the fields object to a whole-disk image URL for disk deployment.
image_os_hash_algo and image_os_hash_value are required when image_source is setimage_os_hash_algo must be one of: md5, sha256, sha512| label required | string A user-friendly name for the configuration. |
| description | string A description of the configuration (optional). |
object Configuration fields containing deployment image and/or cloud-init settings.
Disk deployments ( |
Deploy a whole-disk OS image directly to the node's disk. This is the most common deployment mode.
{- "label": "Ubuntu 22.04 Disk Deploy",
- "description": "Standard whole-disk image deployment",
- "fields": {
- "image_os_hash_algo": "sha256",
- "image_os_hash_value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855"
}
}{- "id": "0a7Y8ABym5",
- "label": "Ubuntu 22.04 Disk Deploy",
- "description": "Standard whole-disk image deployment",
- "fields": {
- "image_os_hash_algo": "sha256",
- "image_os_hash_value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "cloud_init": {
- "data": "{\"packages\":[\"nginx\"],\"runcmd\":[\"/var/lib/cloud/scripts/per-once/setup.sh\"]}"
}, - "organization_id": "mWLBVbB7Eq"
}, - "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00"
}Retrieve details of a specific deployment configuration by its ID.
| configurationId required | string Example: 0a7Y8ABym5 The ID of the deployment configuration to retrieve. |
{- "id": "0a7Y8ABym5",
- "label": "Ubuntu 22.04 Disk Deploy",
- "description": "Standard whole-disk image deployment",
- "fields": {
- "image_os_hash_algo": "sha256",
- "image_os_hash_value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "cloud_init": {
- "data": "{\"packages\":[\"nginx\"],\"runcmd\":[\"/var/lib/cloud/scripts/per-once/setup.sh\"]}"
}, - "organization_id": "mWLBVbB7Eq"
}, - "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00"
}Update an existing deployment configuration. The configuration ID must be included in the request body.
Only include the fields you want to change — the server merges incoming fields with existing fields before re-validating. This means you can update a single field (e.g., change image_source) without resending the entire configuration.
| configurationId required | string Example: 0a7Y8ABym5 The ID of the deployment configuration to update. |
| id required | string The ID of the deployment configuration to update. Must match the path parameter. |
| label | string A user-friendly name for the configuration. |
| description | string A description of the configuration. |
object Configuration fields to update. Only include fields you want to change. The server merges these with existing fields before validating. |
Change the disk image URL on an existing disk deployment configuration. Hash fields and other settings are preserved.
{- "id": "0a7Y8ABym5",
- "fields": {
- "image_os_hash_value": "f1d2d2f924e986ac86fdf7b36c94bcdf32beec15f1d2d2f924e986ac86fdf7b3"
}
}{- "id": "0a7Y8ABym5",
- "label": "Ubuntu 22.04 Disk Deploy",
- "description": "Standard whole-disk image deployment",
- "fields": {
- "image_os_hash_algo": "sha256",
- "image_os_hash_value": "e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855",
- "cloud_init": {
- "data": "{\"packages\":[\"nginx\"],\"runcmd\":[\"/var/lib/cloud/scripts/per-once/setup.sh\"]}"
}, - "organization_id": "mWLBVbB7Eq"
}, - "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00"
}Retrieve a list of available operating system images for node deployment at a specific pod location. This endpoint does not require authentication.
| pod_location required | string (PodLocations) Enum: "pod_1" "pod_2" "pod_3" "pod_5" Example: pod_1 The unique datacenter identifier (e.g., "pod_1", "pod_2", etc.). Available locations can be retrieved from the inventory locations endpoint. |
{- "Ubuntu": {
- "24.04 LTS": {
- "image_md5": "80721a522260ffd987c2fa3899739608",
- "image_sha256": "071fceadf1ea57a388ff7a1ccb4127155d691a511f6a207b4c11b120563855e2"
}
}
}Operations for retrieving inventory information such as available locations and availability.
Retrieve a list of available datacenter locations and their details.
{- "locations": {
- "pod_1": {
- "label": "US-East",
- "displayName": "Ashburn, VA",
- "region": "US",
- "code": "iad3",
- "latitude": 39.0438,
- "longitude": -77.4874,
- "release_status": "released"
}, - "pod_2": {
- "label": "US-West",
- "displayName": "Los Angeles, CA",
- "region": "US",
- "code": "lax3",
- "latitude": 33.9425,
- "longitude": -118.4081,
- "release_status": "released"
}
}
}Retrieve current inventory availability information for a specific datacenter location. This endpoint shows available hardware SKUs and their counts.
| pod_location required | string Example: pod_1 The unique datacenter identifier (e.g., "pod_1", "pod_2", etc.). Available locations can be retrieved from the inventory locations endpoint. |
{- "medium_v4": {
- "count": 3,
- "max_size": 2
}, - "large_v4": {
- "count": 10,
- "max_size": 8
}, - "timestamp": "2025-08-29T13:05:27+00:00",
- "pod_location": "pod_1"
}Retrieve a catalog of available OpenMetal cloud products including hardware configurations and addon services.
This is a public endpoint that provides the complete product catalog, including:
Note: This endpoint is publicly accessible and does not require authentication.
| location | string (PodLocations) Enum: "pod_1" "pod_2" "pod_3" "pod_5" Example: location=pod_1 Datacenter location identifier to get location-specific pricing. Available locations can be retrieved from the inventory locations endpoint. |
{- "hardware": {
- "medium_v4": {
- "id": 17,
- "name": "medium_v4",
- "model": "SYS-221BT-HNR",
- "display_name": null,
- "variant_label": "v4",
- "createdAt": "2024-06-03T14:59:45.175Z",
- "updatedAt": "2024-06-06T15:12:36.849Z",
- "publishedAt": null,
- "network": {
- "id": 57,
- "speed": 10,
- "count": 2
}, - "storage": {
- "nvme_ssd": {
- "id": 125,
- "name": "nvme_ssd",
- "model": null,
- "raw": "6400",
- "type": "nvme_ssd",
- "drives": [
- {
- "id": 118,
- "raw": "6400",
- "count": 1
}
]
}, - "boot": {
- "id": 126,
- "name": "boot",
- "model": null,
- "raw": "960",
- "type": null,
- "drives": [
- {
- "id": 117,
- "raw": "480",
- "count": 2
}
]
}
}, - "locations": {
- "pod_1": {
- "label": "US-East",
- "displayName": "Ashburn, VA",
- "region": "US",
- "code": "iad3",
- "release_status": "released"
}
}, - "processor": {
- "id": 61,
- "raw_cores": 24,
- "compute_cores": 24,
- "raw_threads": 48,
- "type": "2 x Intel Xeon Silver 4510 - 2.4/4.1 Ghz",
- "name": "Intel Xeon Silver 4510",
- "speed": "2.4/4.1Ghz",
- "cpuCount": 2
}, - "ram": {
- "id": 61,
- "raw": "256",
- "compute": "256",
- "type": "DDR5",
- "speed": "4400MHz"
}, - "gpu": null,
- "products": [
- {
- "name": "Storage and Compute - Medium v4",
- "add_on_code": "storage_and_compute_medium_v4",
- "hourly_cost": 1.38,
- "hourly_cost_ltu": 1.1,
- "30_day_cost": 792,
- "hourly_cost_mils": 1380,
- "hourly_cost_ltu_mils": 1100,
- "30_day_cost_mils": 792000,
- "bandwidth": {
- "id": 44,
- "egress_allotment": 500,
- "allotment_unit": "Mbps"
}, - "type": "server"
}
]
}
}, - "addons": {
- "memory": [
- {
- "name": "Memory - 64GB DDR5",
- "add_on_code": "memory_64gb_ddr5",
- "hourly_cost": 0.09,
- "hourly_cost_ltu": 0.07,
- "30_day_cost": 50.4,
- "hourly_cost_mils": 90,
- "hourly_cost_ltu_mils": 70,
- "30_day_cost_mils": 50400,
- "type": "memory",
- "specs": {
- "name": "64gb_ddr5",
- "label": "64GB DDR5",
- "memory": {
- "id": 68,
- "raw": "64",
- "compute": "64",
- "type": "DDR5",
- "speed": "4800Mhz"
}
}
}
], - "storage": [
- {
- "name": "Drive - 12.8TB Micron 7450 MAX",
- "add_on_code": "drive_12_8_micron_7450_max",
- "hourly_cost": 0.51,
- "hourly_cost_ltu": 0.41,
- "30_day_cost": 295.2,
- "hourly_cost_mils": 510,
- "hourly_cost_ltu_mils": 410,
- "30_day_cost_mils": 295200,
- "type": "storage",
- "specs": {
- "name": "12.8TB Micron 7450 MAX",
- "raw": "12800",
- "model": "Micron 7450 NVMe",
- "storage": {
- "id": 140,
- "name": "12.8TB Micron 7450 MAX",
- "model": "MTFDKCC12T8TFS-1BC1ZABYYR",
- "raw": "12800",
- "type": "nvme_ssd"
}
}
}
], - "ip_block": [
- {
- "name": "IPv4 Block - /28",
- "add_on_code": "ipv4_block_28",
- "hourly_cost": 0.07,
- "hourly_cost_ltu": 0.06,
- "30_day_cost": 43.2,
- "hourly_cost_mils": 70,
- "hourly_cost_ltu_mils": 60,
- "30_day_cost_mils": 43200,
- "type": "ip_block"
}
], - "other": [
- { }
]
}
}Retrieve a list of all IP Address Block (prefix) resources that have been created by you or organizations that you are a member of.
IP Address Blocks are network prefixes (CIDR blocks) used for IP address allocation in private clouds.
[- {
- "id": "pf3xY7z2W9",
- "type": "prefixes",
- "label": "production-ips",
- "description": "IP range for production servers",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "prefix_id": 456,
- "cidr": "10.0.0.0/28",
- "prefix_type": "routed",
- "length": 28,
- "managed_addressing": "off",
- "alterable": true,
- "cloud_id": "0Absd1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "central_vlan_id": "vl4nXy2Z9a",
- "product_addon": "ipv4_routed_prefix_28"
}
}
]Create a new IP Address Block (network prefix) resource in a specified datacenter location.
IP Address Blocks can be created with a specific CIDR or by specifying a prefix length to automatically allocate from available address space.
Important: An IP Address Block must be assigned to a VLAN for use. Create the appropriate internal or routed VLAN to assign this IP Address Block to. IP Blocks can be assigned to a VLAN during IP Block creation (via central_vlan_id) or after creation in a separate request.
| label required | string A user-friendly name for the IP Address Block. |
| description | string A description of the IP Address Block (optional). |
required | object |
Create a private IP Address Block with a specific CIDR block.
{- "label": "Private IP Address Block",
- "description": "IP Block Description",
- "fields": {
- "pod_location": "pod_1",
- "prefix_type": "private",
- "cidr": "192.168.1.0/28",
- "central_vlan_id": "ghij1234"
}
}{- "id": "pf3xY7z2W9",
- "type": "prefixes",
- "label": "production-ips",
- "description": "IP range for production servers",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "prefix_id": 456,
- "cidr": "10.0.0.0/28",
- "prefix_type": "routed",
- "length": 28,
- "managed_addressing": "off",
- "alterable": true,
- "cloud_id": "0Absd1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "central_vlan_id": "vl4nXy2Z9a",
- "product_addon": "ipv4_routed_prefix_28"
}
}Retrieve details of a specific IP Address Block resource by its ID.
| prefixId required | string Example: pf3xY7z2W9 The ID of the IP Address Block resource to retrieve. |
{- "id": "pf3xY7z2W9",
- "type": "prefixes",
- "label": "production-ips",
- "description": "IP range for production servers",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "prefix_id": 456,
- "cidr": "10.0.0.0/28",
- "prefix_type": "routed",
- "length": 28,
- "managed_addressing": "off",
- "alterable": true,
- "cloud_id": "0Absd1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "central_vlan_id": "vl4nXy2Z9a",
- "product_addon": "ipv4_routed_prefix_28"
}
}Update an existing IP Address Block resource.
| prefixId required | string Example: pf3xY7z2W9 The ID of the IP Address Block resource to update. |
| label | string A user-friendly name for the IP Address Block. |
| description | string A description of the IP Address Block. |
{- "label": "production-ips",
- "description": "IP range for production servers"
}{- "id": "pf3xY7z2W9",
- "type": "prefixes",
- "label": "production-ips",
- "description": "IP range for production servers",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "prefix_id": 456,
- "cidr": "10.0.0.0/28",
- "prefix_type": "routed",
- "length": 28,
- "managed_addressing": "off",
- "alterable": true,
- "cloud_id": "0Absd1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "central_vlan_id": "vl4nXy2Z9a",
- "product_addon": "ipv4_routed_prefix_28"
}
}Retrieve a prefix by its resource ID, including all child IP addresses.
This endpoint returns the full prefix details from the network infrastructure, including:
ip_addrs array)children array)| prefixId required | string Example: pr3fixAbc123 The resource ID of the prefix to retrieve. |
{- "id": 456,
- "cidr": "192.168.1.0/24",
- "description": "Production network",
- "prefix_type": "routed",
- "usage": "custom",
- "status": "ACTIVE",
- "managed_addressing": "off",
- "vlan_id": 123,
- "parent_id": 100,
- "children": [
- { }
], - "ip_addrs": [
- {
- "id": 12345,
- "ip": "192.168.1.10",
- "label": "web-server-01",
- "assigned_host": "webserver.example.com"
}
]
}Create an IP address within a specified prefix resource.
If no specific IP address is provided in the request body, an available IP will be automatically assigned from the prefix.
| prefixId required | string Example: pr3fixAbc123 The resource ID of the prefix to create the IP address in. |
| ip | string The specific IP address to create. If omitted, an available IP will be automatically assigned. |
| label | string A label for the IP address. |
| assigned_host | string The hostname or identifier of the host this IP is assigned to. |
{- "ip": "192.168.1.10",
- "label": "web-server-01",
- "assigned_host": "webserver.example.com"
}{- "id": 12345,
- "ip": "192.168.1.10",
- "label": "web-server-01",
- "assigned_host": "webserver.example.com"
}Update an existing IP address within a prefix.
To unassign an IP address from a host, pass an empty string ("") as the assigned_host value.
A host's main IP cannot be reassigned or unassigned.
| prefixId required | string Example: pr3fixAbc123 The resource ID of the prefix containing the IP address. |
| ipId required | integer Example: 12345 The numeric ID of the IP address to update. |
| label | string A label for the IP address. |
| assigned_host | string The hostname or identifier of the host this IP is assigned to. Pass empty string to unassign. |
{- "label": "web-server-01-updated",
- "assigned_host": "webserver-new.example.com"
}{- "id": 12345,
- "ip": "192.168.1.10",
- "label": "web-server-01",
- "assigned_host": "webserver.example.com"
}Permanently delete a IP Address Block (prefix)
⚠️ A IP Address Block (prefix) cannot be deleted if:
created_from = "user") can be deleted by regular users. Internal resources created by OpenMetal require support agent access.DELETE /v1/vlans/{vlan_id}/prefixes/{prefix_id} if prefix is currently assigned to a VLAN| prefix_id required | string Example: AbC123XyZ The Central resource ID of the prefix (hash ID format) |
{- "status": "success"
}Associate an existing prefix with a VLAN, enabling routing through the VLAN.
| vlan_id required | string Example: XyZ789AbC The Central resource ID of the VLAN |
| prefix_id required | string Example: AbC123XyZ The Central resource ID of the prefix |
{- "status": "success"
}Remove the association between a prefix and a VLAN without deleting either resource.
⚠️ Unassignment restrictions:
created_from = "user") can be modified by regular users. System generated VLANs require support agent access.| vlan_id required | string Example: XyZ789AbC The Central resource ID of the VLAN |
| prefix_id required | string Example: AbC123XyZ The Central resource ID of the prefix |
{- "status": "success"
}Operations for managing and interacting with individual nodes that are assigned to a cloud, including IPMI console access and power management.
Change power state. Options are "power on", "power off", or "rebooting".
| cloudId required | string The ID of the cloud that owns the node. |
| nodeUuid required | string The UUID of the node to change the power state. This UUID can be found in the cloud hardware information. |
| power_state | string The new power state of the node. Options are "power on", "power off", or "rebooting". |
{- "power_state": "power on"
}{- "result": "success",
- "power_state": "power on",
- "node_uuid": "0000000-0000-00-00000"
}Generates an IPMI (Intelligent Platform Management Interface) console session and retrieves a URL for accessing the HTML5-based web console for remote management of a node. This provides browser-based KVM access for server remote management without requiring Java or additional software installation.
Recommended Method: The HTML5 console is the recommended method for accessing IPMI as it works directly in modern web browsers.
For help using the web console, see Accessing IPMI on Central Dashboard.
| cloudId required | string Example: 0Absd1 The ID of the cloud that owns the node. |
| inventoryUuid required | string <uuid> Example: 0000000-0000-00-00000 UUID v4 string identifying the inventory item (node). This can be found in the cloud hardware information. |
{- "url": "https://<Node UUID>.ipmi.pod-4.flexmetal.net:<PORT>/redfish/<SESSION-ID>.IKVM"
}Generates an IPMI (Intelligent Platform Management Interface) console session and downloads a Java Network Launch Protocol (JNLP) file for launching a Java-based KVM console to access a node's remote management interface.
Prerequisites:
Usage: Once downloaded, the JNLP file can be launched with Java Web Start to open the KVM console.
For additional assistance, visit the IPMI KVM documentation.
| cloudId required | string Example: 0Absd1 The ID of the cloud that owns the node. |
| inventoryUuid required | string <uuid> Example: 0000000-0000-00-00000 UUID v4 string identifying the inventory item (node). This can be found in the cloud hardware information. |
Follow this workflow to create and track a new server order:
Check Inventory Availability - Use the GET /v2/inventory/{pod_location}/availability endpoint to verify that your desired hardware SKU is available in the target datacenter location.
Create the Order - Submit a POST /v1/orders request with your desired configuration (hardware SKU, location, type, and quantity).
Monitor Order Status - Use GET /v1/orders/{orderId} to retrieve the order and check the clouds_deployed field. Each item in the clouds_deployed array contains:
id - The cloud resource identifierprovisioning_status - Current provisioning state with progression: pending → in_progress → awaiting_setup → completemanual_setup state requiring support interventionQuery Cloud Details - Once you have the cloud ID from clouds_deployed[].id, use the GET /v1/clouds/{cloudId} endpoint to retrieve detailed information about the provisioned cloud, including its provision_status and other configuration details.
Retrieve a list of all orders that have been created by you or organizations that you are a member of.
[- {
- "label": "Test PCC Order v2 with pending tasks check",
- "description": "Baremetal Medium V4 cluster in Ashburn, VA with 1 node to run production workloads.",
- "fields": {
- "items": [
- {
- "hardware_sku": "medium_v4",
- "location": "pod_1",
- "type": "baremetal",
- "quantity": 1,
- "modifications": {
- "deployment_configuration": "0a7Y8ABym5",
- "operating_system": {
- "os_key": "Ubuntu",
- "version_key": "22.04 LTS"
}
}, - "cloud_id": "3Dop2VdpKA"
}
], - "config_options": {
- "public_key": "ssh-rsa AAAA...",
- "public_key_ids": [
- "OvZyEGQwWj",
- "Kp3mNxRtYq"
]
}, - "organization_id": "mWLBVbB7Eq",
- "schema_version": "v2",
- "clouds_deployed": [
- {
- "id": "abc123",
- "provision_status": "complete"
}
]
}, - "id": "PGZYNxBpg3",
- "type": "orders",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "relation": {
- "access": {
- "account_id": "mWLBVbB7Eq",
- "uuid": "b7a6d147-036b-4292-9041-7557ded1ec12",
- "type": "organization",
- "display_name": "Test Org",
- "role": "owner",
- "has_billing": false
}
}
}
]Create a new order for baremetal servers or private cloud products running OpenStack.
By default, when no cloud_id is specified on an order item, a new cloud will be deployed with the ordered hardware.
To add hardware nodes to an existing cloud, include the cloud_id field in the item configuration. The new node will be provisioned and added to the specified cloud's infrastructure, with billing attached to the existing cloud.
cloud_id must reference a cloud owned by your organizationlocation must match the cloud's datacenter locationtype must match the cloud's type (baremetal or pcc)provision_status: "complete") before nodes can be added| label required | string A user-friendly name for the order. |
| description | string A brief description of the order (optional). |
required | object (OrderFields) The product selections and configuration options for an order. |
A baremetal order with Operating System specified.
{- "label": "Baremetal Medium V4 with Ubuntu 22.04 LTS",
- "description": "Baremetal Medium V4 cluster in Ashburn, VA with 1 node to run production workloads.",
- "fields": {
- "items": [
- {
- "hardware_sku": "medium_v4",
- "location": "pod_1",
- "type": "baremetal",
- "quantity": 1,
- "modifications": {
- "operating_system": {
- "os_key": "Ubuntu",
- "version_key": "22.04 LTS"
}
}
}
], - "config_options": {
- "public_key": "ssh-rsa AAAA..."
}
}
}{- "label": "Test PCC Order v2 with pending tasks check",
- "description": "Baremetal Medium V4 cluster in Ashburn, VA with 1 node to run production workloads.",
- "fields": {
- "items": [
- {
- "hardware_sku": "medium_v4",
- "location": "pod_1",
- "type": "baremetal",
- "quantity": 1,
- "modifications": {
- "deployment_configuration": "0a7Y8ABym5",
- "operating_system": {
- "os_key": "Ubuntu",
- "version_key": "22.04 LTS"
}
}, - "cloud_id": "3Dop2VdpKA"
}
], - "config_options": {
- "public_key": "ssh-rsa AAAA...",
- "public_key_ids": [
- "OvZyEGQwWj",
- "Kp3mNxRtYq"
]
}, - "organization_id": "mWLBVbB7Eq",
- "schema_version": "v2",
- "clouds_deployed": [
- {
- "id": "abc123",
- "provision_status": "complete"
}
]
}, - "id": "PGZYNxBpg3",
- "type": "orders",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "access": {
- "role": "owner"
}
}Retrieve a specific order by its ID to view details and check the status of the order.
| orderId required | string The ID of the order to retrieve. |
{- "label": "Test PCC Order v2 with pending tasks check",
- "description": "Baremetal Medium V4 cluster in Ashburn, VA with 1 node to run production workloads.",
- "fields": {
- "items": [
- {
- "hardware_sku": "medium_v4",
- "location": "pod_1",
- "type": "baremetal",
- "quantity": 1,
- "modifications": {
- "deployment_configuration": "0a7Y8ABym5",
- "operating_system": {
- "os_key": "Ubuntu",
- "version_key": "22.04 LTS"
}
}, - "cloud_id": "3Dop2VdpKA"
}
], - "config_options": {
- "public_key": "ssh-rsa AAAA...",
- "public_key_ids": [
- "OvZyEGQwWj",
- "Kp3mNxRtYq"
]
}, - "organization_id": "mWLBVbB7Eq",
- "schema_version": "v2",
- "clouds_deployed": [
- {
- "id": "abc123",
- "provision_status": "complete"
}
]
}, - "id": "PGZYNxBpg3",
- "type": "orders",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "access": {
- "role": "owner"
}
}Operations for managing SSH public keys.
SSH public keys can be stored and managed for use during bare metal provisioning. Keys are validated on create/update and a SHA256 fingerprint is automatically computed from the key data.
Supported key types: ssh-rsa, ssh-dss, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com
Retrieve a list of all active SSH public keys the authenticated user has access to (owned, shared via team, or organization).
Returns an empty array [] when the user has no public keys.
[- {
- "id": "OvZyEGQwWj",
- "type": "public-keys",
- "label": "My SSH Key",
- "description": "Work laptop key",
- "fields": {
- "fingerprint": "SHA256:x784d0MwRGXcnZRmbPKT4JqWqp1NtCuxhZcYPcuTcKw",
- "key_data": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtTMYFhxSBKt5do8C2ynGRTcQFMHOJ/BFVsFmVBcSdn user@workstation",
- "organization_id": null
}, - "created_at": "2026-03-02T20:57:40+00:00",
- "updated_at": "2026-03-02T20:57:40+00:00",
- "created_by": "nDG3DAKMOr",
- "created_by_name": ""
}
]Create a new SSH public key resource.
The key is validated on creation and a SHA256 fingerprint is automatically computed from the key data. The fingerprint cannot be set directly.
Supported key types: ssh-rsa, ssh-dss, ssh-ed25519, ecdsa-sha2-nistp256, ecdsa-sha2-nistp384, ecdsa-sha2-nistp521, sk-ssh-ed25519@openssh.com, sk-ecdsa-sha2-nistp256@openssh.com
| label required | string Display name for the key. |
| description | string Optional description. |
required | object |
Create a public key with an ED25519 SSH key.
{- "label": "My SSH Key",
- "description": "Work laptop key",
- "fields": {
- "key_data": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtTMYFhxSBKt5do8C2ynGRTcQFMHOJ/BFVsFmVBcSdn user@workstation"
}
}{- "id": "OvZyEGQwWj",
- "type": "public-keys",
- "label": "My SSH Key",
- "description": "Work laptop key",
- "fields": {
- "fingerprint": "SHA256:x784d0MwRGXcnZRmbPKT4JqWqp1NtCuxhZcYPcuTcKw",
- "key_data": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtTMYFhxSBKt5do8C2ynGRTcQFMHOJ/BFVsFmVBcSdn user@workstation",
- "organization_id": null
}, - "created_at": "2026-03-02T20:57:40+00:00",
- "updated_at": "2026-03-02T20:57:40+00:00",
- "created_by": "nDG3DAKMOr",
- "created_by_name": ""
}Retrieve details of a specific SSH public key by its ID.
| publicKeyId required | string Example: OvZyEGQwWj The hashed resource ID of the public key. |
{- "id": "OvZyEGQwWj",
- "type": "public-keys",
- "label": "My SSH Key",
- "description": "Work laptop key",
- "fields": {
- "fingerprint": "SHA256:x784d0MwRGXcnZRmbPKT4JqWqp1NtCuxhZcYPcuTcKw",
- "key_data": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtTMYFhxSBKt5do8C2ynGRTcQFMHOJ/BFVsFmVBcSdn user@workstation",
- "organization_id": null
}, - "created_at": "2026-03-02T20:57:40+00:00",
- "updated_at": "2026-03-02T20:57:40+00:00",
- "created_by": "nDG3DAKMOr",
- "created_by_name": "",
- "access": {
- "role": "owner"
}
}Update an existing SSH public key. All fields are optional — only provided fields are changed.
When key_data is updated, the fingerprint is automatically recomputed. The fingerprint field cannot be set directly.
| publicKeyId required | string Example: OvZyEGQwWj The hashed resource ID of the public key to update. |
| label | string Updated display name for the key. |
| description | string Updated description. |
object |
Update just the display name of the key.
{- "label": "My Updated SSH Key"
}{- "id": "OvZyEGQwWj",
- "type": "public-keys",
- "label": "My SSH Key",
- "description": "Work laptop key",
- "fields": {
- "fingerprint": "SHA256:x784d0MwRGXcnZRmbPKT4JqWqp1NtCuxhZcYPcuTcKw",
- "key_data": "ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIGtTMYFhxSBKt5do8C2ynGRTcQFMHOJ/BFVsFmVBcSdn user@workstation",
- "organization_id": null
}, - "created_at": "2026-03-02T20:57:40+00:00",
- "updated_at": "2026-03-02T20:57:40+00:00",
- "created_by": "nDG3DAKMOr",
- "created_by_name": "",
- "access": {
- "role": "owner"
}
}Retrieve a list of all VLAN resources that have been created by you or organizations that you are a member of.
[- {
- "id": "vl4nXy2Z9a",
- "type": "vlans",
- "label": "production-vlan",
- "description": "VLAN for production workloads",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vlan_type": "routed",
- "alterable": true,
- "cloud_id": "0Absd1"
}
}
]Create a new VLAN resource in a specified datacenter location.
VLANs can optionally be assigned to a cloud and/or have an IP Address Block assigned during creation.
| label required | string A user-friendly name for the VLAN. |
| description | string A description of the VLAN (optional). |
required | object |
Create a VLAN in a specific location without cloud assignment.
{- "label": "my-custom-vlan",
- "description": "Custom VLAN for development environment",
- "fields": {
- "pod_location": "pod_1",
- "vlan_type": "internal"
}
}{- "id": "vl4nXy2Z9a",
- "type": "vlans",
- "label": "production-vlan",
- "description": "VLAN for production workloads",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vlan_type": "routed",
- "alterable": true,
- "cloud_id": "0Absd1"
}
}Retrieve details of a specific VLAN resource by its ID.
| vlanId required | string Example: vl4nXy2Z9a The ID of the VLAN resource to retrieve. |
{- "id": "vl4nXy2Z9a",
- "type": "vlans",
- "label": "production-vlan",
- "description": "VLAN for production workloads",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vlan_type": "routed",
- "alterable": true,
- "cloud_id": "0Absd1"
}
}Update an existing VLAN resource.
Note: Only user-created VLANs can be modified. System-reserved VLANs (control, compute, storage, tunnel, octavia, inventory, provider) cannot be altered.
| vlanId required | string Example: vl4nXy2Z9a The ID of the VLAN resource to update. |
| label | string A user-friendly name for the VLAN. |
| description | string A description of the VLAN. |
{- "label": "production-vlan",
- "description": "VLAN for production workloads"
}{- "id": "vl4nXy2Z9a",
- "type": "vlans",
- "label": "production-vlan",
- "description": "VLAN for production workloads",
- "created_at": "2025-08-27T20:05:56+00:00",
- "updated_at": "2025-08-27T20:05:56+00:00",
- "is_active": true,
- "created_by": "o6aQxVGezj",
- "fields": {
- "created_from": "user",
- "pod_location": "pod_1",
- "vlan_id": 123,
- "vlan_uuid": "550e8400-e29b-41d4-a716-446655440000",
- "vlan_type": "routed",
- "alterable": true,
- "cloud_id": "0Absd1"
}
}Assign an existing IP Address Block (prefix) resource to a VLAN.
Requirements:
| vlanId required | string Example: vl4nXy2Z9a The UUID of the VLAN resource. |
| prefixId required | string Example: pf3xY7z2W9 The ID of the IP Address Block (prefix) resource to assign. |
{- "status": "success"
}Permanently delete a VLAN.
⚠️ A VLAN cannot be deleted if:
created_from = "user") can be deleted by regular users. Internal resources created by OpenMetal require support agent access.The following system VLANs cannot be deleted:
control - Control plane networkingcompute - Compute node networkingstorage - Storage networkingtunnel - Tunnel networkingoctavia - Load balancer networkinginventory - Inventory managementprovider - Provider networkingGET /v1/vlans/{vlan_id} to see all associated child IP Blocks(prefixes) or parent cloud resource assignments| vlan_id required | string Example: XyZ789AbC The Central resource ID of the VLAN (hash ID format) |
{- "status": "success"
}Associate an existing prefix with a VLAN, enabling routing through the VLAN.
| vlan_id required | string Example: XyZ789AbC The Central resource ID of the VLAN |
| prefix_id required | string Example: AbC123XyZ The Central resource ID of the prefix |
{- "status": "success"
}Remove the association between a prefix and a VLAN without deleting either resource.
⚠️ Unassignment restrictions:
created_from = "user") can be modified by regular users. System generated VLANs require support agent access.| vlan_id required | string Example: XyZ789AbC The Central resource ID of the VLAN |
| prefix_id required | string Example: AbC123XyZ The Central resource ID of the prefix |
{- "status": "success"
}