pfcloud / Developers

API reference

Sites

Every Sites 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 /sites

List sites

Scope: sites:read

POST /sites

Create a site

Scope: sites:write

Creates the site on a provisioned server. The repository is optional: give repository (a Git URL), or github_account + github_repository (a repository of a connected GitHub account; deploys on push), or neither: the site, folders, Nginx and database are created but it can't deploy until a repository is connected with PUT /sites/{site}/github.

Body field Type Description
server string
domain string
aliases string
type string laravel, php, static, nextjs, node, python, custom, docker or wordpress
repository string SSH or HTTPS Git URL. Optional.
branch string Branch to deploy; for a GitHub repository the default branch when omitted
php_version string
app_port integer
start_command string
container_port integer
create_database boolean
wordpress_title string
wordpress_admin string
wordpress_email string
github_account string Login of a connected GitHub account (GET /github/accounts)
github_repository string owner/name of a repository that account lets pfcloud read (GET /github/accounts/{account}/repositories)

GET /sites/{site}

Get a site

Scope: sites:read

Parameter In Description
site path Public id from the dashboard address (required)

PATCH /sites/{site}

Change site settings

Scope: sites:write

Fields are applied one by one in the order listed; if one is refused (422), the ones before it are already saved. Send one field per call when that matters.

Parameter In Description
site path Public id from the dashboard address (required)
Body field Type Description
auto_deploy boolean
backup_before_deploy boolean
uptime_enabled boolean
uptime_path string
health_check_path string
build_script string
after_deploy_script string
start_command string
app_port integer
canonical_host string www, apex or empty
custom_nginx string
php_version string

GET /sites/{site}/certificate

Get a site's certificate and its history

Scope: sites:read

Expiry, issuer and the last 20 history entries (first seen, renewed, renewal requested, renewal failed).

Parameter In Description
site path Public id from the dashboard address (required)

POST /sites/{site}/certificate/renew

Renew a Let's Encrypt certificate now

Scope: certificates:renew

Asks Let's Encrypt for a new certificate and reloads Nginx; the site stays online. Only Let's Encrypt and wildcard certificates of sites pfcloud created; at most once every 10 minutes. Anyone who can see the site may do it.

Parameter In Description
site path Public id from the dashboard address (required)

GET /github/accounts

List connected GitHub accounts

Scope: sites:read

The GitHub accounts or organisations your team connected to pfcloud (Team settings → GitHub). Use a login as github_account when creating a site.

GET /github/accounts/{account}/repositories

List the repositories of a connected GitHub account

Scope: sites:read

Repositories pfcloud may read, with their default branch. Use full_name as github_repository when creating a site.

Parameter In Description
account path Login of a connected GitHub account (required)

GET /sites/{site}/compatibility

Does the server fit what the site's code needs?

Scope: sites:read

status is ok, warning, problem or unknown. items lists each language the code pins (PHP, Node.js, Python, Go…), what the server has, a message, and a fix (switch_php or install_php with a version, install_language, or manual). frameworks lists the framework versions found (Laravel, Next.js…). Read after each deploy.

Parameter In Description
site path Public id from the dashboard address (required)

GET /site-imports

Sites an adopted server runs that can be imported

Scope: sites:read

Parameter In Description
server query Server id (required)

POST /site-imports

Import a site from an adopted server

Scope: sites:write

Body field Type Description
server string
domain string
type string
mode string in-place or watch
run_as string
branch string

POST /site-imports/all

Import every site of an adopted server

Scope: sites:write

Body field Type Description
server string
mode string watch or suggested

POST /sites/{site}/retry

Retry a failed create or import

Scope: sites:write

Parameter In Description
site path Public id from the dashboard address (required)

PUT /sites/{site}/deploy-mode

Switch an imported site between watch-only and in-place

Scope: sites:write

Parameter In Description
site path Public id from the dashboard address (required)
Body field Type Description
mode string watch or in-place

POST /sites/{site}/deploy-webhook

Replace the deploy webhook (secret shown once)

Scope: sites:write

Parameter In Description
site path Public id from the dashboard address (required)
Body field Type Description
confirm string The site’s domain, typed out to confirm

POST /sites/{site}/maintenance

Put the site in maintenance mode

Scope: sites:write

Parameter In Description
site path Public id from the dashboard address (required)

DELETE /sites/{site}/maintenance

Take the site out of maintenance mode

Scope: sites:write

Parameter In Description
site path Public id from the dashboard address (required)

PUT /sites/{site}/github

Deploy from a GitHub repository

Scope: sites:write

Parameter In Description
site path Public id from the dashboard address (required)
Body field Type Description
account string Login of a connected GitHub account
repository string
branch string

DELETE /sites/{site}/github

Stop deploying from GitHub

Scope: sites:write

Parameter In Description
site path Public id from the dashboard address (required)

PUT /sites/{site}/repository

Give a site without code a Git address

Scope: sites:write

For sites created without a repository (POST /sites with no repository). Sets the SSH or HTTPS Git address and branch; the first deploy then fetches it. SSH addresses use the server's deploy key. To follow a GitHub repository instead use PUT /sites/{site}/github.

Parameter In Description
site path Public id from the dashboard address (required)
Body field Type Description
repository string SSH or HTTPS Git URL
branch string Defaults to main