Servers
Every Servers endpoint: scope, parameters and body fields.
Base URL https://pfcloud.pfctek.com/api/v1. Every call needs Authorization: Bearer mf_…. Changes accept an Idempotency-Key header. Ids are public ids (UUIDs).
GET /servers
List servers
Scope: servers:read
POST /servers
Add a server
Scope: servers:write
Same checks as the Add server form (plan limit, IP not already in the team or waiting to be purged). Saved as pending; the answer includes pfcloud’s public key and the command to authorize it. Then POST /servers/{server}/connect. Tokens limited to some servers can’t add servers.
| Body field | Type | Description |
|---|---|---|
name |
string | |
ip_address |
string | |
ssh_port |
integer | |
provider |
string | |
origin |
string |
GET /servers/{server}
Get a server
Scope: servers:read
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/sites
List a server's sites
Scope: servers:read sites:read
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/certificates
List the HTTPS certificates of a server's sites
Scope: servers:read sites:read
Each live site with HTTPS: domain, type, issuer, expires_at, days_left, whether pfcloud can renew it. Soonest expiry first.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/runtimes
Language versions installed on a server
Scope: servers:read
PHP versions installed, PHP versions that could be installed, and the versions of Node.js, npm, Python, Composer, Go, Ruby, Rust, Java, .NET and Elixir found on the server, with the time they were read (daily and after installs).
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/runtimes/check
Read the language versions on a server again
Scope: servers:write
Starts a read-only check over SSH. Read the result with GET /servers/{server}/runtimes a minute later.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/authorized-key
Get pfcloud’s key for a server
Scope: servers:read
The public key to authorize on the server and the commands that install it for root (or through sudo). Needs the manage-servers permission.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/health
Get a server’s health
Scope: servers:read
The health collector’s last summary, issues found, the live agent and the last restart.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/security
Get the latest security report
Scope: servers:read
Score and findings (id, severity, title, detail, fix) of the last daily security check; data is null before the first one.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/runs
List scripts run on a server
Scope: servers:read
The server’s activity log, newest first, 25 per page. No output here.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/runs/{run}
Get one script run with its output
Scope: servers:read
The log the server page shows. Environment values are never stored, so never shown.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
run |
path | Public id of the run (required) |
GET /servers/{server}/services
List services pfcloud can restart
Scope: servers:read
Empty for servers pfcloud didn’t set up.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
GET /servers/{server}/languages
List language build tools
Scope: servers:read
Languages pfcloud can install, the ones installed and when Docker was installed.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/languages
Install a language’s build tools
Scope: servers:write
Servers pfcloud set up only.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
language |
string |
GET /servers/{server}/databases
List databases
Scope: servers:read
Each database with its user and status. Passwords are never stored.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/databases
Create a database and its user
Scope: servers:write
Servers pfcloud set up with a database engine. The answer has the password once; pfcloud never stores it. To drop a database, ask with POST /servers/{server}/databases/{database}/deletion-requests.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
name |
string | |
user |
string | Defaults to the name |
GET /servers/{server}/firewall-rules
List firewall rules
Scope: servers:read
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/firewall-rules
Open a port
Scope: servers:write
Servers pfcloud set up only.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
name |
string | |
port |
string | 6379 or a range like 6000:6010 |
protocol |
string | |
source |
string | any, an IP address or a range like 10.0.0.0/8 |
GET /servers/{server}/ssh-keys
List people’s SSH keys on the server
Scope: servers:read
Key name and fingerprint, login and status; never the key itself.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/ssh-keys
Add your SSH key for a login
Scope: servers:write
One of the token maker’s own keys (Settings → SSH keys), for a login pfcloud lists on this server (never root).
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
key |
string | Public id of your saved key |
login |
string | Defaults to the first login |
GET /servers/{server}/php
Get PHP versions and settings
Scope: servers:read
Installed and available versions, settings per version as last read, extensions pfcloud can install.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/connect
Connect (or try again)
Scope: servers:write
Inspects the server, then provisions a fresh one or adopts an existing one. The provisioning choices apply to fresh servers only.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
stacks |
array | |
php_version |
string | |
node_version |
string | |
database |
string | |
redis |
boolean |
POST /servers/{server}/reboot
Restart the server
Scope: servers:write
Servers pfcloud set up only. Send the server’s name in confirm.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
confirm |
string | The server’s name, exactly |
POST /servers/{server}/rescan
Re-scan the server
Scope: servers:write
Runs the read-only inspection again. Nothing on the server changes.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/services/{service}/restart
Restart a service
Scope: servers:write
One of GET /servers/{server}/services. Runs now; the answer includes the run and its output.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
service |
path | e.g. nginx or php8.4-fpm (required) |
POST /servers/{server}/security-checks
Run the security check now
Scope: servers:write
Read-only. At most once every 10 minutes per server.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
POST /servers/{server}/security-fixes
Apply a one-click security fix
Scope: servers:write
For a finding in the latest report that has a fix. Servers pfcloud set up only; the check runs again afterwards.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
finding |
string | The finding’s id |
PUT /servers/{server}/monitoring
Turn health monitoring on or off
Scope: servers:write
Turning it on needs a plan with monitoring.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
enabled |
boolean |
PUT /servers/{server}/agent
Install or remove the live metrics agent
Scope: servers:write
Installing needs a plan with monitoring.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
installed |
boolean |
POST /servers/{server}/docker
Install Docker
Scope: servers:write
Servers pfcloud set up only, once.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
DELETE /servers/{server}/firewall-rules/{rule}
Close a port
Scope: servers:write
SSH, HTTP and HTTPS can never be closed.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
rule |
path | Public id of the rule (required) |
DELETE /servers/{server}/ssh-keys/{key}
Remove an SSH key from the server
Scope: servers:write
Your own, or anyone’s if you manage servers.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
key |
path | Public id from GET /servers/{server}/ssh-keys (required) |
POST /servers/{server}/php/versions
Install a PHP version
Scope: servers:write
Servers pfcloud set up only.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
| Body field | Type | Description |
|---|---|---|
version |
string |
POST /servers/{server}/php/refresh
Read the PHP settings again
Scope: servers:write
They appear in GET /servers/{server}/php afterwards.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
PUT /servers/{server}/php/{version}
Change a PHP version’s settings
Scope: servers:write
Checked with php-fpm -t and nginx -t before reloading; the old files come back on failure.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
version |
path | e.g. 8.4 (required) |
| Body field | Type | Description |
|---|---|---|
upload_max |
string | e.g. 64M or 1G |
memory_limit |
string | e.g. 512M, 2G or -1 |
max_execution_time |
integer | |
max_input_vars |
integer | |
opcache |
boolean | |
opcache_validate |
boolean |
POST /servers/{server}/php/{version}/extensions
Install a PHP extension
Scope: servers:write
From the list in GET /servers/{server}/php.
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
version |
path | e.g. 8.4 (required) |
| Body field | Type | Description |
|---|---|---|
extension |
string |
DELETE /servers/{server}/php/{version}/extensions/{extension}
Remove a PHP extension
Scope: servers:write
| Parameter | In | Description |
|---|---|---|
server |
path | Public id from the dashboard address (required) |
version |
path | e.g. 8.4 (required) |
extension |
path | e.g. redis (required) |