On this page
Overview
The FlexDedi API is a REST API. Requests and responses use JSON over HTTPS, timestamps are ISO 8601 in UTC, and every object has a prefixed string ID such as srv_7f3a for a server or key_2b81 for an SSH key. The current version is v1; breaking changes ship as a new version, never in place.
Authentication
Send your API key as a Bearer token in the Authorization header. Keys are either read-only or read-write, and you can revoke one at any time. Keep keys out of source code and shell history: read them from an environment variable or a secrets manager.
curl -s https://api.flexdedi.com/v1/servers \
-H "Authorization: Bearer $FLEXDEDI_TOKEN"Requests and pagination
Send request bodies as JSON with Content-Type: application/json. List endpoints return a data array and a meta object; use page and per_page (default 25, maximum 100) to paginate.
{
"data": [
{ "id": "srv_7f3a", "plan": "pro-32", "location": "fra", "status": "active" }
],
"meta": { "page": 1, "per_page": 25, "total": 1 }
}Errors
Errors use standard HTTP status codes and a JSON body with a machine-readable code and a human-readable message.
| Status | Meaning |
|---|---|
400 | The request is malformed, for example invalid JSON. |
401 | The API key is missing, invalid or revoked. |
403 | The key is read-only, or the resource belongs to another account. |
404 | The resource does not exist. |
409 | The server is busy with another action, such as a reinstall. |
422 | Validation failed, for example a plan that is not available in that location. |
429 | Too many requests; retry after the delay in Retry-After. |
5xx | Something failed on our side; retry with backoff. |
{
"error": {
"code": "plan_unavailable",
"message": "Plan max-192 is not available in location nyc."
}
}Rate limits
Each response includes X-RateLimit-Limit, X-RateLimit-Remaining and X-RateLimit-Reset headers. When you exceed the limit, the API answers 429 with a Retry-After header in seconds. Poll long-running actions every 15 to 30 seconds rather than in a tight loop.
Plans
GET/plans
Lists the server configurations you can order, with their hardware, port speed, monthly price in USD and the locations where each is available.
{
"data": [
{
"id": "pro-32",
"name": "Pro 32",
"cpu": "AMD EPYC 9355P",
"cores": 32,
"memory_gb": 384,
"storage": "2 × 3.84 TB NVMe Gen5",
"port": "25 Gbps",
"price_monthly_usd": 749,
"delivery": "minutes",
"locations": ["nyc", "iad", "dfw", "lax", "ams", "fra", "lon", "sin"]
}
]
}Locations
GET/locations
Lists the data center locations with their code (nyc, iad, dfw, lax, ams, fra, lon, sin, tyo, syd), city, country and the plans available there.
OS images
GET/os-images
Lists installable images, such as ubuntu-24.04, debian-13, almalinux-9, rocky-9, proxmox-9 and windows-2025. Use the id when ordering or reinstalling.
Servers
GET/servers
Lists your servers. Filter with location, plan or status (provisioning, active, reinstalling, rescue, off).
POST/servers
Orders a server and starts provisioning. The response is the new server with status provisioning; poll it until the status is active. The order is billed like an order placed in the panel.
| Field | Type | Description |
|---|---|---|
plan | string | Required. A plan ID from GET /plans, for example pro-32. |
location | string | Required. A location code where the plan is available. |
os | string | Required. An image ID from GET /os-images. |
hostname | string | Optional. Set on the installed system. |
ssh_keys | array | Optional. Names or IDs of saved SSH keys to install for root. |
curl -s -X POST https://api.flexdedi.com/v1/servers \
-H "Authorization: Bearer $FLEXDEDI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"plan":"pro-32","location":"fra","os":"ubuntu-24.04","hostname":"db-1","ssh_keys":["ops-laptop"]}'{
"id": "srv_9c4d",
"plan": "pro-32",
"location": "fra",
"os": "ubuntu-24.04",
"hostname": "db-1",
"status": "provisioning",
"ipv4": null,
"ipv6": null,
"created_at": "2026-11-02T14:05:31Z"
}GET/servers/{id}
Returns one server with its status, plan, location, IPv4 address, IPv6 prefix and hostname.
PATCH/servers/{id}
Updates the label or hostname shown in the panel. It does not change the hostname inside a running operating system.
DELETE/servers/{id}
Cancels the server. It stays active until the end of the paid period, then its drives are wiped. Add ?immediately=true to stop and wipe it now; the current period is not refunded.
Power and reinstall
POST/servers/{id}/actions/{action}
Runs a power action through the management controller: reboot (ACPI restart), reset (hard reset), power-on, power-off or power-cycle. The response is the server with its updated status.
curl -s -X POST https://api.flexdedi.com/v1/servers/srv_7f3a/actions/reboot \
-H "Authorization: Bearer $FLEXDEDI_TOKEN"POST/servers/{id}/actions/reinstall
Reinstalls the server with os, and optionally hostname and ssh_keys. This erases every drive. The status is reinstalling until the new system is ready.
curl -s -X POST https://api.flexdedi.com/v1/servers/srv_7f3a/actions/reinstall \
-H "Authorization: Bearer $FLEXDEDI_TOKEN" \
-H "Content-Type: application/json" \
-d '{"os":"debian-13","hostname":"web-2","ssh_keys":["ops-laptop"]}'POST/servers/{id}/actions/rescue
Boots the server into a rescue system loaded over the network, with your installed system left untouched on disk. Send {"enable": false} to leave rescue mode and boot from the drives again. See Reinstall and rescue.
IPs and reverse DNS
GET/servers/{id}/ips
Lists the IPv4 addresses and the IPv6 prefix assigned to a server, with their reverse DNS records.
PUT/servers/{id}/ips/{ip}/rdns
Sets the reverse DNS (PTR) record of an address with {"ptr": "mail.example.com"}. The forward record should resolve to the same address, especially for mail servers.
Private VLANs
GET/vlans
Lists your private networks with their location and VLAN ID. Private networks connect servers in the same location; internal traffic is not billed.
POST/vlans/{id}/servers
Attaches a server in the same location with {"server_id": "srv_7f3a"}. Then configure the VLAN interface in the operating system, as shown in Private networking.
SSH keys
GET/ssh-keys
Lists the public keys saved on your account.
POST/ssh-keys
Saves a public key with {"name": "ops-laptop", "public_key": "ssh-ed25519 AAAA…"} so you can reference it by name when ordering or reinstalling.
DELETE/ssh-keys/{id}
Deletes a saved key. Keys already installed on servers are not removed from them.
Bandwidth
GET/servers/{id}/bandwidth
Returns inbound and outbound traffic for a period set with from and to (ISO 8601), in 5-minute samples. Traffic is unmetered: these figures are for monitoring, not billing.
Terraform
The Terraform provider uses the same API key, read from the FLEXDEDI_TOKEN environment variable. A flexdedi_server resource maps to POST /servers; destroying it cancels the server.
terraform {
required_providers {
flexdedi = { source = "flexdedi/flexdedi" }
}
}
resource "flexdedi_server" "web" {
plan = "core-16"
location = "ams"
os = "ubuntu-24.04"
hostname = "web-1"
ssh_keys = ["ops-laptop"]
}
output "web_ipv4" {
value = flexdedi_server.web.ipv4
}