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.
1. Create an API key
Section titled “1. Create an API key”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.
2. Make your first call
Section titled “2. Make your first call”The API lives on your panel’s address, under /api/v1. Send the key as a bearer token:
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:
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:
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.
3. Or use the CLI
Section titled “3. Or use the CLI”curl -fsSL https://get.pluspanel.net/cli.sh | shpluspanel login --api-url "$PLUSPANEL_URL" # approve in the browser, with your 2FApluspanel servers listpluspanel accounts list -o json | jq -r '.items[].id'See the CLI page for installation on Windows, signature checks, profiles and CI use.
Next steps
Section titled “Next steps”- Authentication & API keys: scopes, organization keys, rotation, IP allowlists.
- Conventions: errors, pagination, idempotency, ETags, rate limits.
- Versioning & deprecation: what we promise about
/api/v1. - Webhooks: get events pushed to you, and verify their signature.
- Client libraries: Go and TypeScript.
- API reference: every operation, generated from the OpenAPI document (download it).