Skip to content

API & CLI — getting started

Everything you do in the PlusPanel panel goes through one public REST API, /api/v1. You can call the same API from scripts, from your own systems, from the pluspanel command-line tool and from the Go and TypeScript client libraries. It is available in every edition, Free included.

  • Same permissions as the panel. A request is allowed only if the user behind it is allowed to do the same thing in the panel. An API key can narrow that down, never widen it.
  • Audited. Every change made with an API key is recorded in the audit log, with the key’s id.
  • One contract. The API reference is generated from the same OpenAPI document the control plane is built from, so it is always current.

In the panel, open Settings → API and choose Create API key. Give it a name, pick its scopes (for a first test, servers:read and accounts:read are enough) and, optionally, an expiry date and an IP allowlist. The key is shown once: copy it into your secret store. It looks like this:

ppk_k3nmw2x7q4tz_8lV0m1Q2… (ppk_<key id>_<secret>)

Keys are explained in detail in Authentication & API keys.

The API lives on your panel’s address, under /api/v1. Send the key as a bearer token:

Terminal window
export PLUSPANEL_URL="https://panel.example.com"
export PLUSPANEL_API_KEY="ppk_…"
curl -fsS "$PLUSPANEL_URL/api/v1/servers?limit=20" \
-H "Authorization: Bearer $PLUSPANEL_API_KEY"

The answer is JSON. Collections are paginated with a cursor:

{
"items": [
{
"id": "6f1c2d3e-…",
"name": "web-01",
"status": "enrolled",
"public_ipv4": "203.0.113.10",
"created_at": "2026-10-19T09:12:44Z"
}
],
"next_cursor": "eyJ…"
}

Then list the hosting accounts you can reach, on every server:

Terminal window
curl -fsS "$PLUSPANEL_URL/api/v1/accounts" -H "Authorization: Bearer $PLUSPANEL_API_KEY"

And launch a WordPress site in one of them. Mutating requests take an Idempotency-Key, so a retry after a network error never creates a second site:

Terminal window
curl -fsS -X POST "$PLUSPANEL_URL/api/v1/accounts/$ACCOUNT_ID/sites" \
-H "Authorization: Bearer $PLUSPANEL_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"primary_domain": "shop.example.com", "title": "Shop", "admin_email": "owner@example.com"}'

The site is created right away (installing) and the answer carries the job_id that installs it. A key needs the sites:write scope for this call.

Terminal window
curl -fsSL https://get.pluspanel.net/cli.sh | sh
pluspanel login --api-url "$PLUSPANEL_URL" # approve in the browser, with your 2FA
pluspanel servers list
pluspanel accounts list -o json | jq -r '.items[].id'

See the CLI page for installation on Windows, signature checks, profiles and CI use.