API Reference

Complete REST API for Cloud Servers, Dedicated Servers and more. All endpoints at a glance — with examples in cURL, JavaScript and PHP.

Base URL https://reseller-sandbox.hosterapi.de/api/v1

Authentication

All requests require a Bearer Token in the Authorization header.

Format

Request body as JSON. Headers: Accept: application/json and Content-Type: application/json.

Responses

Success: {"result": ...} Error: {"error": "..."}

Cloud Server

36 Endpoints
GET /datacenter/server/{sid}/status Get current VM status Auth

(is running, cpu usage, mem, etc.)

URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/status" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/status", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/status', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "cpu": 0,
        "mem": 455467008,
        "memfree": 577208320,
        "netin": 52240,
        "netout": 47492,
        "uptime": 1164,
        "state": "running"
    }
}
GET /datacenter/server/{sid}/traffic Get traffic statistics for a VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Query Parameters
ParameterTypeStatusDescription
period string optional Period: day, week, month. Default: month
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/traffic?period=month" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/traffic", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/traffic', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
GET /datacenter/server/{sid}/config Get current VM config Auth

(cpu usage, mem, etc.)

URL Parameters
ParameterStatusDescription
sid required Server ID
Query Parameters
ParameterTypeStatusDescription
include string optional Optional. Pass `network` to include per-IP network parameters (gateway, netmask/prefix).
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/config?include=network" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/config", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/config', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "cpuCores": 2,
        "mem": 2048,
        "disk": "100G",
        "ips": [
            "127.0.0.1",
            "fe80::1"
        ],
        "template": "Ubuntu20.04",
        "iso": null
    }
}
GET /datacenter/server/{sid}/software Get installed software on the VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/software" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/software", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/software', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 2,
            "status": "installing",
            "package": "mc",
            "version": "1",
            "output": null,
            "ip": "127.0.0.1",
            "created_at": ""
        }
    ]
}
GET /datacenter/server/{sid}/incidents Get incidents Auth

Returns all network incidents for this VM (DDoS Attempts, Suspicious network activity, etc.)

URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/incidents" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/incidents", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/incidents', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "response": [
        {
            "gid": 117896,
            "start": "2021-02-22 18:50:33",
            "stop": "2021-02-22 18:50:33",
            "host": "203.0.113.10",
            "direction": 1,
            "impact": 90107632,
            "types": [
                "NTP Amplification",
                "DNS Amplification"
            ],
            "ongoing": 0
        },
        {
            "gid": 215486,
            "start": "2021-02-22 18:50:33",
            "stop": "2021-02-22 18:50:33",
            "host": "203.0.113.10",
            "direction": 1,
            "impact": 90107632,
            "types": [
                "NTP Amplification",
                "DNS Amplification"
            ],
            "ongoing": 0
        }
    ],
    "error": false
}
GET /datacenter/server/{sid}/console Get noVNC Console URL Auth

This function returns a url to a ready-to-embed novnc console. You can put this url in a iframe. **Warning:** This url must be accessed within **10 seconds** after sending a request. Otherwise the supplied VNC ticket will expire.

URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/console" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/console", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/console', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": "https:\/\/console.example.com\/novnc\/vnc.html?host=console.example.com&password=VNCTICKET-PLACEHOLDER&path=novnc%2Fproxy%2F1%2F100%2F%3Fport%3D5900%26vncticket%3DVNCTICKET-PLACEHOLDER"
}
POST /datacenter/server/{sid}/delete Remove VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Query Parameters
ParameterTypeStatusDescription
async bool optional Pass async=1 to run deletion as background job and get a jobId back
Body Parameters
ParameterTypeStatusDescription
force bool optional Force delete vm, even if running
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/delete" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"force":true}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/delete", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "force": true
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/delete', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'force' => true,
    ],
]);
POST /datacenter/server/{sid}/rdns Set Server RDNS Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
ip string required IP to set RDNS for (IPv4 or IPv6)
hostname string required RDNS FQDN
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/rdns" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"ip":"value","hostname":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/rdns", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "ip": "value",
    "hostname": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/rdns', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'ip' => 'value',
        'hostname' => 'value',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/name Set friendly name for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
name string required Friendly name for the VM (max 50 chars)
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/name" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"name":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/name", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "name": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/name', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'name' => 'value',
    ],
]);
GET /datacenter/server/{sid}/name Get friendly name for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/name" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/name", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/name', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
PUT /datacenter/server/{sid}/change Upgrade/Downgrade VM Auth

**Please note that downgrading IPs is not supported at this time. Attempts at this will be silently ignored**.

URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
cpuCores int optional Number of CPU cores
mem int optional Memory size in MB
disk string optional Root disk size **Note: Downgrading disk size is not allowed due to possible data loss**
ipCount int optional Number of IPs to assign
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/change" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"cpuCores":1,"mem":1,"disk":"value","ipCount":1}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/change", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "cpuCores": 1,
    "mem": 1,
    "disk": "value",
    "ipCount": 1
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/change', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'cpuCores' => 1,
        'mem' => 1,
        'disk' => 'value',
        'ipCount' => 1,
    ],
]);
PUT /datacenter/server/{sid}/start Start vm Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/start" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/start", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/start', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/shutdown Gracefully stop VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/shutdown" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/shutdown", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/shutdown', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/stop Forcefully stop VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/stop" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/stop", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/stop', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/reboot Gracefully restart VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reboot" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reboot", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reboot', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/reset Forcefully reset VM Auth

**Please note that this command kill all running tasks and force reboot the VM**.

URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reset" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reset", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reset', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/reboot/force Force reboot VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reboot/force" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reboot/force", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reboot/force', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/reinstall Reinstall VM Auth

VM will be reinstalled matching the original config, including OS. Specify a template name to override automatic selection.

URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
template string optional Template to use (overrides automatic selection)
hostname int optional custom hostname, min 4 characters
sshKey string optional SSH public key to inject via Cloud-Init (overrides stored key)
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reinstall" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"template":"value","hostname":1,"sshKey":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reinstall", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "template": "value",
    "hostname": 1,
    "sshKey": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/reinstall', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'template' => 'value',
        'hostname' => 1,
        'sshKey' => 'value',
    ],
]);
Response
{
    "result": {
        "status": "queued",
        "jobId": 15,
        "progress": 0
    }
}
PUT /datacenter/server/{sid}/password/reset Reset root password Auth

New password will be automatically generated and returned on success. You may give a custom password using the "password" parameter. This forcefully shuts down and restarts the VM to apply the new password via cloud-init.

URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
password string optional password, minimum 12 characters
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/password/reset" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"password":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/password/reset", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "password": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/password/reset', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'password' => 'value',
    ],
]);
Response
{
    "result": {
        "status": "success",
        "password": "{password}"
    }
}
POST /datacenter/server/{sid}/firewall/outgoing_mails Update outgoing mail firewall rule for VM Auth

This endpoint allows enabling or disabling the firewall rules for outgoing mails. Per default all servers are created with blocked ports for outgoing mails to prevent spam and abuse. You can enable or disable this rule using this endpoint if you are entitled to use this. If not you can contact out support to gain access to this endpoint.

Body Parameters
ParameterTypeStatusDescription
deny boolean required Set to true to block outgoing mail ports, false to unblock them.
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/outgoing_mails" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"deny":true}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/outgoing_mails", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "deny": true
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/outgoing_mails', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'deny' => true,
    ],
]);
GET /datacenter/server/{sid}/backups/list List backups for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/list" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/list", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/list', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        1606685300,
        1606585800,
        1606575200
    ]
}
GET /datacenter/server/{sid}/backups/status Get backup task status Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/status" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/status", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/status', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
PUT /datacenter/server/{sid}/backups/create Create backup Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/create" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/create", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/create', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": "pending"
}
POST /datacenter/server/{sid}/backups/restore Restore VM from backup Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
backup int required Backup to restore (unix timestamp)
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/restore" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"backup":1}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/restore", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "backup": 1
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/restore', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'backup' => 1,
    ],
]);
Response
{
    "result": "pending"
}
POST /datacenter/server/{sid}/backups/delete Delete backup Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
backup int required Backup to delete (unix timestamp)
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/delete" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"backup":1}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/delete", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "backup": 1
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/backups/delete', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'backup' => 1,
    ],
]);
Response
{
    "result": true
}
GET /datacenter/server/{sid}/iso List available ISO for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": "ISOs:iso\/debian-11.5.0-amd64-netinst-0.iso",
            "name": "debian-11.5.0-amd64-netinst.iso"
        }
    ]
}
POST /datacenter/server/{sid}/iso Insert ISO in VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
isoId string required ISO ID to insert
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"isoId":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "isoId": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'isoId' => 'value',
    ],
]);
Response
{
    "result": true,
    "rebooted": true
}
DELETE /datacenter/server/{sid}/iso Remove ISO from VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/iso', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
GET /datacenter/server/{sid}/scheduled List scheduled tasks for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 1,
            "interval": "DAILY",
            "command": "BACKUP",
            "execution_last": null,
            "execution_next": "2022-07-13T15:35:48.000000Z"
        }
    ]
}
POST /datacenter/server/{sid}/scheduled Create scheduled tasks for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
command required optional command to execute, available 'RESTART','BACKUP','SHUTDOWN','START'
interval required optional interval, available 'DAILY','TWODAYS','THREEDAYS','WEEKLY','TWOWEEKS','MONTHLY','TWOMONTHS','THREEMONTHS'
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"command":"value","interval":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "command": "value",
    "interval": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'command' => 'value',
        'interval' => 'value',
    ],
]);
Response
{
    "result": true
}
DELETE /datacenter/server/{sid}/scheduled/{VMScheduledTask} Delete scheduled task for VM Auth
Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{VMScheduledTask}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{VMScheduledTask}", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{VMScheduledTask}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/server/{sid}/scheduled/{tid} Update scheduled task for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
tid required Task ID
Body Parameters
ParameterTypeStatusDescription
interval string optional New interval. Possible: DAILY,TWODAYS,THREEDAYS,WEEKLY,TWOWEEKS,MONTHLY,TWOMONTHS,THREEMONTHS
command string optional New command. Possible: BACKUP,RESTART,SHUTDOWN,START
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{tid}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"interval":"value","command":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{tid}", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "interval": "value",
    "command": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{tid}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'interval' => 'value',
        'command' => 'value',
    ],
]);
Response
{
    "result": true
}
POST /datacenter/server/{sid}/scheduled/{tid}/trigger Trigger scheduled task immediately for VM Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
tid required Task ID
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{tid}/trigger" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{tid}/trigger", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/scheduled/{tid}/trigger', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
POST /datacenter/server Create new VM Auth
Body Parameters
ParameterTypeStatusDescription
location string optional Location ID
template string required OS Template Name
cpuCores int required Number of CPU cores
mem int required Memory size in MB
disk string required Root disk size
ipCount int required Number of IPs to assign
hostname string optional custom hostname, min 4 characters
sshKey string optional custom ssh public key - if the key is invalid it will be ignored during installation
name string optional friendly display name for the VM, max 50 characters
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"location":"value","template":"value","cpuCores":1,"mem":1,"disk":"value","ipCount":1,"hostname":"value","sshKey":"value","name":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "location": "value",
    "template": "value",
    "cpuCores": 1,
    "mem": 1,
    "disk": "value",
    "ipCount": 1,
    "hostname": "value",
    "sshKey": "value",
    "name": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'location' => 'value',
        'template' => 'value',
        'cpuCores' => 1,
        'mem' => 1,
        'disk' => 'value',
        'ipCount' => 1,
        'hostname' => 'value',
        'sshKey' => 'value',
        'name' => 'value',
    ],
]);
Response
{
    "result": {
        "status": "queued",
        "jobId": 15,
        "progress": 0
    }
}
GET /datacenter/server List all assigned VMs Auth

Pass `?include=name` to get SID + name objects instead of plain SIDs.

Query Parameters
ParameterTypeStatusDescription
include string optional Optional. Pass `name` to include VM names.
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server?include=name" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        4001,
        4002,
        4003
    ]
}
GET /datacenter/templates Get available template list Auth
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/templates" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/templates", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/templates', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        "Debian10.0"
    ]
}

Dedicated Server

23 Endpoints
GET /datacenter/dedicated/market Show all dedicated servers available for purchase Auth
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 9,
            "model": "HP ProLiant BL460c G8",
            "description": "",
            "configuration": {
                "cpu": {
                    "type": "Intel Xeon E5-2609 v2",
                    "count": "1"
                },
                "ram": {
                    "type": "DDR3 ECC",
                    "size": "32"
                },
                "storage": {
                    "type": "SSD",
                    "count": "2",
                    "size": "250"
                },
                "price": 39,
                "location": {
                    "id": 2,
                    "name": "Maincubes, Frankfurt"
                }
            }
        },
        {
            "id": 84,
            "model": "Generic",
            "description": null,
            "configuration": {
                "cpu": {
                    "type": "AMD Ryzen 7 3800X",
                    "count": "1"
                },
                "ram": {
                    "type": "DDR4 ECC",
                    "size": "32 GB DDR4 ECC"
                },
                "storage": {
                    "type": "NVMe",
                    "count": "2",
                    "size": "256"
                },
                "price": 139,
                "location": {
                    "id": 1,
                    "name": "Maincubes, Frankfurt"
                }
            }
        }
    ]
}
POST /datacenter/dedicated/order Place dedicated server order Auth
Body Parameters
ParameterTypeStatusDescription
id int required Server ID to order
template string required Template to install
hostname string required Server Hostname
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"id":1,"template":"value","hostname":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "id": 1,
    "template": "value",
    "hostname": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'id' => 1,
        'template' => 'value',
        'hostname' => 'value',
    ],
]);
Response
{
    "result": true
}
POST /datacenter/dedicated/order/byod BYOD ordering is discontinued. Auth
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order/byod" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order/byod", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order/byod', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
GET /datacenter/dedicated/order/byod/status/{id} BYOD ordering is discontinued. Auth
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order/byod/status/{id}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order/byod/status/{id}", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/order/byod/status/{id}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
GET /datacenter/dedicated/templates Get available templates Auth
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/templates" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/templates", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/templates', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        "CentOS 7 (latest) (DE)",
        "Debian 8 Jessie (DE)",
        "Debian 9 Stretch (DE)",
        "Ubuntu 16.04 LTS",
        "Ubuntu 18.04 LTS (DE)",
        "OpenSuse 42.3",
        "VMware ESXi 6.5 U1",
        "VMware ESXi 6.5 U2",
        "Debian 10 Buster (DE)",
        "Proxmox VE 6 (DE)",
        "Debian 10 Buster - Software RAID (DE)",
        "[COPY] Debian 10 Buster - Software RAID (DE) Test",
        "CentOS 7 (latest)",
        "Debian Jessie",
        "Debian Stretch",
        "Ubuntu 16.04 LTS",
        "Ubuntu 18.04 LTS",
        "OpenSuse 42.3",
        "VMware ESXi 6.5 U1",
        "VMware ESXi 6.5 U2",
        "Debian Buster",
        "Proxmox VE 6",
        "Ubuntu 20.04 LTS"
    ]
}
GET /datacenter/dedicated List owned servers Auth

If you expect to find a ID here but it's not present, most likely there was an issue completing the order. You'll have to account for this case yourself with some kind of order tracking.

Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 9,
            "orderComplete": false
        }
    ]
}
PUT /datacenter/dedicated/{sid}/start Starts a dedicated server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/start" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/start", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/start', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/dedicated/{sid}/shutdown Stops a dedicated server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/shutdown" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/shutdown", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/shutdown', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/dedicated/{sid}/reboot Restarts a dedicated server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/reboot" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/reboot", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/reboot', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/dedicated/{sid}/reinstall Reinstall server Auth
Body Parameters
ParameterTypeStatusDescription
template string required Template to install
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/reinstall" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"template":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/reinstall", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "template": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/reinstall', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'template' => 'value',
    ],
]);
Response
{
    "result": true
}
GET /datacenter/dedicated/{sid}/console Open noVNC Console Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/console" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/console", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/console', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": "https:\/\/example.com\/novnc\/vnc.html"
}
PUT /datacenter/dedicated/{sid}/pdu/cycle PDU cold boot (power cycle) a dedicated server Auth
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/cycle" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/cycle", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/cycle', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/dedicated/{sid}/pdu/on PDU power on a dedicated server Auth
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/on" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/on", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/on', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
PUT /datacenter/dedicated/{sid}/pdu/off PDU power off a dedicated server Auth
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/off" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/off", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/off', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
GET /datacenter/dedicated/{sid}/pdu/status Get PDU outlet status for a dedicated server Auth
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/status" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/status", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/pdu/status', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": "powered"
}
GET /datacenter/dedicated/{sid}/status Gets dedicated server status for specific server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/status" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/status", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/status', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "orderId": 324,
        "traffic": 0,
        "netin": 0,
        "netout": 0,
        "uptime": 0,
        "state": "halted",
        "status": "offline"
    }
}
GET /datacenter/dedicated/{sid}/config Gets configuration for specific server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/config" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/config", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/config', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "ssh": {
            "root": {
                "password": "UOosKBueLhn8"
            },
            "user": {
                "username": "user",
                "password": "UOosKBueLhn8"
            }
        },
        "ips": [
            "92.246.85.200"
        ],
        "template": "Debian Jessie",
        "configuration": {
            "cpu": {
                "type": "Intel Xeon E5-2609 v1",
                "count": "1"
            },
            "ram": {
                "size": "16",
                "type": "DDR3 ECC"
            },
            "price": 0,
            "storage": {
                "size": "240",
                "type": "SSD",
                "count": "2"
            },
            "location": {
                "id": 2,
                "name": "SkyLink, Eygelshoven"
            }
        }
    }
}
PUT /datacenter/dedicated/{sid}/rdns Set Server RDNS Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
ip string required IP to set RDNS for (IPv4 or IPv6)
hostname string required RDNS FQDN
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/rdns" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"ip":"value","hostname":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/rdns", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "ip": "value",
    "hostname": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/rdns', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'ip' => 'value',
        'hostname' => 'value',
    ],
]);
Response
{
    "result": true
}
GET /datacenter/dedicated/{sid}/ips List active additional IPv4 addresses for the dedicated server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "limit": 4,
        "used": 1,
        "price": 2.5,
        "ips": [
            {
                "id": 7,
                "ip": "192.0.2.10",
                "purpose": "Reverse proxy for customer X",
                "price": 2.5,
                "ordered_at": "2026-09-06T10:00:00+00:00",
                "cancelled_at": null
            }
        ]
    }
}
POST /datacenter/dedicated/{sid}/ips Order an additional IPv4 address for the dedicated server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
purpose string required Purpose of the additional IP, 10-500 characters (RIPE/abuse justification)
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"purpose":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "purpose": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'purpose' => 'value',
    ],
]);
Response
{
    "result": {
        "id": 8,
        "ip": "192.0.2.11",
        "price": 2.5
    }
}
DELETE /datacenter/dedicated/{sid}/ips/{ipId} Cancel an additional IPv4 address of the dedicated server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
ipId required ID of the additional IP (from the list endpoint)
Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips/{ipId}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips/{ipId}", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/ips/{ipId}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
GET /datacenter/dedicated/{sid}/installation Gets installation status for specific server Auth
URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/installation" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/installation", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/installation', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "ssh": {
            "root": {
                "password": "UOosKBueLhn8"
            },
            "user": {
                "username": "user",
                "password": "UOosKBueLhn8"
            }
        },
        "installation": true,
        "template": "Debian Jessie",
        "mac": ""
    }
}
POST /datacenter/dedicated/{sid}/terminate Terminate server Auth

__WARNING! THIS WILL IMMEDIATELY DELETE THE SERVER AND REVOKE ACCESS TO IT__

URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/terminate" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/terminate", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/{sid}/terminate', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}

Webhooks

5 Endpoints
GET /datacenter/dedicated/market/webhook Show market webhook Auth

Returns the configured dedicated market webhook (without the secret).

Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "id": 1,
        "url": "https:\/\/example.com\/hooks\/hosterapi",
        "events": null,
        "active": true,
        "created_at": "2026-10-06T20:00:00+00:00",
        "updated_at": "2026-10-06T20:00:00+00:00"
    }
}
PUT /datacenter/dedicated/market/webhook Create or update market webhook Auth

Creates the webhook (HTTP 201, the signing secret is returned ONCE) or updates the existing one (HTTP 200, no secret). The URL must be HTTPS and must resolve to a public address.

Body Parameters
ParameterTypeStatusDescription
url string required HTTPS URL that receives the events.
active boolean optional Set to false to pause deliveries.
Example
curl -X PUT "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"url":"value","active":true}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook", {
  method: "PUT",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "url": "value",
    "active": true
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->put('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'url' => 'value',
        'active' => true,
    ],
]);
Response
{
    "result": {
        "id": 1,
        "url": "https:\/\/example.com\/hooks\/hosterapi",
        "events": [
            "dedicated.market.server_price_changed"
        ],
        "active": true,
        "created_at": "2026-10-06T20:00:00+00:00",
        "updated_at": "2026-10-06T20:00:00+00:00",
        "secret": "whsec_0f3c5e7a9b1d2f4a6c8e0b2d4f6a8c0e1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e"
    }
}
DELETE /datacenter/dedicated/market/webhook Delete market webhook Auth

Removes the webhook together with its delivery history.

Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}
POST /datacenter/dedicated/market/webhook/rotate-secret Rotate webhook secret Auth

Generates a new signing secret and returns it ONCE. The old secret is invalid immediately.

Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook/rotate-secret" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook/rotate-secret", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook/rotate-secret', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "secret": "whsec_0f3c5e7a9b1d2f4a6c8e0b2d4f6a8c0e1f3a5c7e9b1d3f5a7c9e1b3d5f7a9c1e"
    }
}
GET /datacenter/dedicated/market/webhook/deliveries List webhook deliveries Auth

Returns your own webhook deliveries (newest first) including status, attempts, last HTTP code and error. A delivery is "failed" after 6 unsuccessful attempts.

Query Parameters
ParameterTypeStatusDescription
status string optional Filter by status: pending, succeeded, failed.
per_page integer optional Items per page (max 100, default 25).
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook/deliveries?status=failed&per_page=25" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook/deliveries", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/dedicated/market/webhook/deliveries', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 12,
            "event_id": "evt_6f1c2b7e-3a0d-4c1e-9b8a-2d4e5f6a7b8c",
            "event_type": "dedicated.market.server_price_changed",
            "server_id": 84,
            "status": "failed",
            "attempts": 6,
            "last_status_code": 500,
            "last_error": "HTTP 500",
            "next_attempt_at": null,
            "delivered_at": null,
            "created_at": "2026-10-06T20:15:00+00:00"
        }
    ],
    "meta": {
        "current_page": 1,
        "per_page": 25,
        "total": 1,
        "last_page": 1
    }
}

Webhook reference

Instead of polling the market endpoint you can register one HTTPS URL. HosterAPI sends a signed POST request with a JSON body whenever a subscribed event occurs – currently changes on the dedicated market. Any 2xx response counts as delivered.

Event types
TypeDescription
dedicated.market.server_addedA server is new on the market.
dedicated.market.server_price_changedThe price of a server changed. Contains old and new price in changes.price.
dedicated.market.server_removedA server is no longer available (reported after about 2–3 minutes).
Headers
HeaderDescription
Content-Typeapplication/json
User-AgentHosterAPI-Webhooks/1.0
X-HosterAPI-EventEvent type
X-HosterAPI-Event-IdUnique event id (evt_…), identical on every retry. Use it for idempotency.
X-HosterAPI-Delivery-Attempt1 … 6
X-HosterAPI-Signaturet=<unix>,v1=<hex>
Verifying the signature

v1 is HMAC-SHA256(t . "." . rawBody, secret) as hex. Compare with a constant-time function and reject timestamps older than 5 minutes.

[$tPart, $vPart] = explode(',', $_SERVER['HTTP_X_HOSTERAPI_SIGNATURE']);
$t = (int) substr($tPart, 2);
$sig = substr($vPart, 3);
$rawBody = file_get_contents('php://input');
$ok = abs(time() - $t) < 300
    && hash_equals(hash_hmac('sha256', $t . '.' . $rawBody, $secret), $sig);
Retries

If your endpoint does not answer with 2xx, the call is retried after 1 min, 5 min, 15 min, 1 h and 6 h. After 6 failed attempts the delivery is marked as failed; you can see it via the deliveries endpoint. Redirects are not followed, requests time out after 5 seconds, and only public HTTPS targets are allowed.

Example payload: dedicated.market.server_added
{
    "id": "evt_6f1c2b7e-3a0d-4c1e-9b8a-2d4e5f6a7b8c",
    "type": "dedicated.market.server_added",
    "created_at": "2026-10-06T20:15:00+00:00",
    "data": {
        "server_id": 84,
        "server": {
            "id": 84,
            "model": "Generic",
            "description": null,
            "configuration": {
                "cpu": {
                    "type": "AMD Ryzen 7 3800X",
                    "count": "1"
                },
                "ram": {
                    "type": "DDR4 ECC",
                    "size": "32"
                },
                "storage": {
                    "type": "NVMe",
                    "count": "2",
                    "size": "1000"
                },
                "price": 59,
                "location": {
                    "id": 2,
                    "name": "Maincubes, Frankfurt",
                    "country": "DE"
                }
            }
        },
        "changes": {
            "available": {
                "old": false,
                "new": true
            }
        }
    }
}
Example payload: dedicated.market.server_price_changed
{
    "id": "evt_0a9b8c7d-6e5f-4a3b-8c2d-1e0f9a8b7c6d",
    "type": "dedicated.market.server_price_changed",
    "created_at": "2026-10-06T20:16:00+00:00",
    "data": {
        "server_id": 84,
        "server": {
            "id": 84,
            "model": "Generic",
            "description": null,
            "configuration": {
                "cpu": {
                    "type": "AMD Ryzen 7 3800X",
                    "count": "1"
                },
                "ram": {
                    "type": "DDR4 ECC",
                    "size": "32"
                },
                "storage": {
                    "type": "NVMe",
                    "count": "2",
                    "size": "1000"
                },
                "price": 59,
                "location": {
                    "id": 2,
                    "name": "Maincubes, Frankfurt",
                    "country": "DE"
                }
            }
        },
        "changes": {
            "price": {
                "old": 49,
                "new": 59
            }
        }
    }
}
Example payload: dedicated.market.server_removed
{
    "id": "evt_5d4c3b2a-1f0e-4d9c-8b7a-6f5e4d3c2b1a",
    "type": "dedicated.market.server_removed",
    "created_at": "2026-10-06T20:17:00+00:00",
    "data": {
        "server_id": 84,
        "server": {
            "id": 84,
            "model": "Generic",
            "description": null,
            "configuration": {
                "cpu": {
                    "type": "AMD Ryzen 7 3800X",
                    "count": "1"
                },
                "ram": {
                    "type": "DDR4 ECC",
                    "size": "32"
                },
                "storage": {
                    "type": "NVMe",
                    "count": "2",
                    "size": "1000"
                },
                "price": 59,
                "location": {
                    "id": 2,
                    "name": "Maincubes, Frankfurt",
                    "country": "DE"
                }
            }
        },
        "changes": {
            "available": {
                "old": true,
                "new": false
            }
        }
    }
}

Firewall

5 Endpoints
GET /datacenter/server/{sid}/firewall Get firewall status Auth

Returns the current firewall enabled state and all rules for the given server.

URL Parameters
ParameterStatusDescription
sid required int required The server SID.
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true,
    "enabled": true,
    "rules": [
        {
            "id": 1,
            "vm_id": 1,
            "direction": "inbound",
            "port": "80,443",
            "protocol": "tcp",
            "source": null,
            "destination": null,
            "action": "allow",
            "comment": "Allow HTTP\/HTTPS",
            "is_managed": false,
            "proxmox_pos": 0,
            "created_at": "2024-01-01T00:00:00.000000Z",
            "updated_at": "2024-01-01T00:00:00.000000Z"
        }
    ]
}
POST /datacenter/server/{sid}/firewall/toggle Toggle firewall on/off Auth

Enables or disables the firewall for the given server. On first enable, creates the managed outgoing-mail deny rule.

URL Parameters
ParameterStatusDescription
sid required int required The server SID.
Body Parameters
ParameterTypeStatusDescription
enabled boolean required Whether to enable or disable the firewall.
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/toggle" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"enabled":true}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/toggle", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "enabled": true
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/toggle', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'enabled' => true,
    ],
]);
Response
{
    "result": true
}
GET /datacenter/server/{sid}/firewall/rules Get firewall rules Auth

Returns all firewall rules for the given server, split by direction. Includes inbound, outbound, and managed (platform-created) rules.

URL Parameters
ParameterStatusDescription
sid required int required The server SID.
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true,
    "inbound": [
        {
            "id": 1,
            "vm_id": 1,
            "direction": "inbound",
            "port": "80,443",
            "protocol": "tcp",
            "source": null,
            "destination": null,
            "action": "allow",
            "comment": "Allow HTTP\/HTTPS",
            "is_managed": false,
            "proxmox_pos": 0,
            "created_at": "2024-01-01T00:00:00.000000Z",
            "updated_at": "2024-01-01T00:00:00.000000Z"
        }
    ],
    "outbound": [],
    "managed": [
        {
            "id": 2,
            "vm_id": 1,
            "direction": "outbound",
            "port": "25,465,587",
            "protocol": "tcp",
            "source": null,
            "destination": null,
            "action": "deny",
            "comment": "Outgoing mail blocked by default",
            "is_managed": true,
            "proxmox_pos": 1,
            "created_at": "2024-01-01T00:00:00.000000Z",
            "updated_at": "2024-01-01T00:00:00.000000Z"
        }
    ]
}
POST /datacenter/server/{sid}/firewall/rules Add a firewall rule Auth

Creates a new firewall rule for the given server. Returns HTTP 201 on success. A port can only be set together with protocol tcp or udp.

URL Parameters
ParameterStatusDescription
sid required int required The server SID.
Body Parameters
ParameterTypeStatusDescription
direction string required Rule direction. Allowed: inbound, outbound.
port string optional Port or port range (e.g. 80 or 80,443 or 8000-9000). Requires protocol tcp or udp.
protocol string optional Protocol. Allowed: tcp, udp, icmp.
source string optional Source CIDR (IPv4).
destination string optional Destination CIDR (IPv4).
action string required Rule action. Allowed: allow, deny.
comment string optional Human-readable label (max 255 chars).
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"direction":"value","port":"value","protocol":"value","source":"value","destination":"value","action":"value","comment":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "direction": "value",
    "port": "value",
    "protocol": "value",
    "source": "value",
    "destination": "value",
    "action": "value",
    "comment": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'direction' => 'value',
        'port' => 'value',
        'protocol' => 'value',
        'source' => 'value',
        'destination' => 'value',
        'action' => 'value',
        'comment' => 'value',
    ],
]);
Response
{
    "result": true,
    "rule": {
        "id": 3,
        "vm_id": 1,
        "direction": "inbound",
        "port": "8080",
        "protocol": "tcp",
        "source": null,
        "destination": null,
        "action": "allow",
        "comment": "Custom rule",
        "is_managed": false,
        "proxmox_pos": 2,
        "created_at": "2024-01-01T00:00:00.000000Z",
        "updated_at": "2024-01-01T00:00:00.000000Z"
    }
}
DELETE /datacenter/server/{sid}/firewall/rules/{ruleId} Delete a firewall rule Auth

Deletes a user-created firewall rule. Returns 204 No Content on success. Managed rules (is_managed=true) cannot be deleted and return 403.

URL Parameters
ParameterStatusDescription
sid required int required The server SID.
ruleId required int required The firewall rule ID.
Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules/{ruleId}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules/{ruleId}", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/firewall/rules/{ruleId}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);

Jobs

1 Endpoints
GET /job/{jobId} Get job info Auth
URL Parameters
ParameterStatusDescription
jobId required Job ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/job/{jobId}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/job/{jobId}", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/job/{jobId}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": {
        "status": "queued",
        "progress": 0,
        "output": null
    }
}

Software

3 Endpoints
GET /software/list List available software to install Auth
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/software/list" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/software/list", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/software/list', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
POST /software/install Install chosen software package Auth
Body Parameters
ParameterTypeStatusDescription
sid|ip string required Server ID or IP
package string required Package to install
password string required SSH root password for server
port int optional SSH port for server
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/software/install" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"sid|ip":"value","package":"value","password":"value","port":1}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/software/install", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "sid|ip": "value",
    "package": "value",
    "password": "value",
    "port": 1
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/software/install', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'sid|ip' => 'value',
        'package' => 'value',
        'password' => 'value',
        'port' => 1,
    ],
]);
Response
{
    "result": {
        "status": "queued",
        "jobId": 15,
        "progress": 0
    }
}
POST /software/uninstall Uninstall chosen software package Auth
Body Parameters
ParameterTypeStatusDescription
sid|ip string required Server ID or IP
package string required Package to install
password string required SSH root password for server
port int optional SSH port for server
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/software/uninstall" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"sid|ip":"value","package":"value","password":"value","port":1}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/software/uninstall", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "sid|ip": "value",
    "package": "value",
    "password": "value",
    "port": 1
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/software/uninstall', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'sid|ip' => 'value',
        'package' => 'value',
        'password' => 'value',
        'port' => 1,
    ],
]);
Response
{
    "result": {
        "status": "queued",
        "jobId": 15,
        "progress": 0
    }
}

SSH-Keys

3 Endpoints
GET /ssh-keys List all SSH keys Auth

Returns all SSH keys for the authenticated user.

Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 1,
            "name": "Production Server",
            "type": "ssh-ed25519",
            "fingerprint": "SHA256:abc123defgh456ijklmnopqrstuvwxyz0123456789A=",
            "created_at": "2024-01-01T00:00:00+00:00"
        }
    ]
}
POST /ssh-keys Add a new SSH key Auth

Adds a new SSH public key to the account. Returns HTTP 201 on success. Supported key types: ssh-rsa, ssh-ed25519, ecdsa. Maximum 10 keys per account.

Body Parameters
ParameterTypeStatusDescription
name string required A name/label for the key.
public_key string required The SSH public key.
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"name":"value","public_key":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "name": "value",
    "public_key": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'name' => 'value',
        'public_key' => 'value',
    ],
]);
Response
{
    "result": {
        "id": 2,
        "name": "Production Server",
        "type": "ssh-ed25519",
        "fingerprint": "SHA256:abc123defgh456ijklmnopqrstuvwxyz0123456789A=",
        "created_at": "2024-01-01T00:00:00+00:00"
    }
}
DELETE /ssh-keys/{id} Delete an SSH key Auth

Permanently deletes the specified SSH key.

URL Parameters
ParameterStatusDescription
id required int required The SSH key ID.
Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys/{id}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys/{id}", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/ssh-keys/{id}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}

API-Token

3 Endpoints
GET /tokens List all tokens Auth

Returns a list of all API tokens for the authenticated user. Token values are masked (only prefix shown).

Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/tokens" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/tokens", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/tokens', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 1,
            "name": "Production Server",
            "token_prefix": "abcd1234...",
            "last_used_at": "2024-01-15T10:30:00+00:00",
            "expires_at": "2027-01-01T00:00:00+00:00",
            "is_expired": false,
            "created_at": "2024-01-01T00:00:00+00:00"
        }
    ]
}
POST /tokens Create a new token Auth

Creates a new API token. The plain token is only shown once in the response. Maximum 10 tokens per user.

Body Parameters
ParameterTypeStatusDescription
name string required A label for the token.
expires_at string optional Expiry date (ISO 8601).
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/tokens" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"name":"value","expires_at":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/tokens", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "name": "value",
    "expires_at": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/tokens', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'name' => 'value',
        'expires_at' => 'value',
    ],
]);
Response
{
    "result": {
        "id": 2,
        "name": "Production Server",
        "token": "1|exampletoken_abcdefghijklmnopqrstuvwxyz",
        "expires_at": "2027-01-01T00:00:00+00:00",
        "created_at": "2024-01-01T00:00:00+00:00"
    }
}
DELETE /tokens/{id} Delete a token Auth

Permanently deletes the specified API token.

URL Parameters
ParameterStatusDescription
id required int required The token ID.
Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/tokens/{id}" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/tokens/{id}", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/tokens/{id}', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}

Server Lock

2 Endpoints
POST /datacenter/server/{sid}/lock Lock a server Auth

Locks a server. All mutating operations on the server will be rejected with HTTP 423 until the server is unlocked. The Proxmox "start at boot" flag is set to No as a best-effort hardening against a node reboot bypassing the lock.

URL Parameters
ParameterStatusDescription
sid required Server ID
Body Parameters
ParameterTypeStatusDescription
reason string optional Lock reason (max 255 chars)
Example
curl -X POST "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/lock" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}" \
  -d '{"reason":"value"}'
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/lock", {
  method: "POST",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  },
  body: JSON.stringify({
    "reason": "value"
})
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->post('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/lock', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
    'json' => [
        'reason' => 'value',
    ],
]);
Response
{
    "result": true
}
DELETE /datacenter/server/{sid}/lock Unlock a server Auth

Removes the lock from a server. A reseller cannot unlock a server that was locked by an administrator.

URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X DELETE "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/lock" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/lock", {
  method: "DELETE",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->delete('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/server/{sid}/lock', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": true
}

Sonstiges

1 Endpoints
GET /datacenter/location List all Locations Auth

Returns all available locations for a deployment

URL Parameters
ParameterStatusDescription
sid required Server ID
Example
curl -X GET "https://reseller-sandbox.hosterapi.de/api/v1/datacenter/location" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Authorization: Bearer {token}"
fetch("https://reseller-sandbox.hosterapi.de/api/v1/datacenter/location", {
  method: "GET",
  headers: {
    "Content-Type": "application/json",
    "Accept": "application/json",
    "Authorization": "Bearer {token}"
  }
}).then(r => r.json()).then(console.log);
$client = new \GuzzleHttp\Client();
$response = $client->get('https://reseller-sandbox.hosterapi.de/api/v1/datacenter/location', [
    'headers' => [
        'Authorization' => 'Bearer {token}',
        'Accept' => 'application/json',
    ],
]);
Response
{
    "result": [
        {
            "id": 1,
            "name": "maincubes, Offenbach am Main",
            "country": "Deutschland",
            "iso": "DE",
            "note": "AMD Epyc 7402P, DDR4 ECC RAM, Samsung Datacenter Ceph Storage"
        }
    ]
}