Reseller API

Reseller API documents delegated automation for reseller-owned accounts, approved packages, feature policy, and related support workflows.

Where to find it: Documentation > Hosting Manager > API > Reseller API.

Available to: Root and reseller API identities inside delegated scope.

What this page does

This page lists public endpoints delegated to root and reseller roles but not directly to account users. Shared account endpoints appear under User API. It contains 23 endpoints from the current SHM public catalog.

Before you start

Use a dedicated API identity, protect the key, restrict source addresses where available, and discover current ids before a write. Every example uses the direct SHM Engine origin https://panel.example.com:882. Placeholders are documentation, not permission to run a production mutation.

Authentication

Send X-Api-User and X-Api-Key to the SHM Engine on port 882. JSON requests also send Content-Type: application/json. Role, account ownership, source policy, feature access, and resource identifiers are checked for every request.

How to read each endpoint

The parameter cards and complete request template are exhaustive: every current key is shown with its accepted location, required or optional status, type, values, constraints, and an example. The runnable workflow example is deliberately narrower when an endpoint contains mutually exclusive actions or conditional branches.

Reseller API endpoint reference (23)

Account Packages

GET/v1/account-packagesroot resellerList account packages visible to current role.

What this endpoint does

List account packages visible to current role.

Endpoint

GET /v1/account-packages

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (0)

This endpoint accepts no path, query, or JSON parameters.

Complete request template

This reference template contains all 0 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {},
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X GET 'https://panel.example.com:882/v1/account-packages' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Example request
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {}
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "access_denied",
  "message": "The API key is not authorized for this endpoint, resource, role, or source IP."
}

Operational note

This endpoint reads state. Use its current identifiers and result before calling a related create, update, delete, repair, or restore operation.

POST/v1/account-packagesroot resellerCreate an account package/hosting plan. Use this for root/reseller package administration; unlimited packages use -1 for each numeric limit field.

What this endpoint does

Create an account package/hosting plan. Use this for root/reseller package administration; unlimited packages use -1 for each numeric limit field.

Operational guidance: Create an account package/hosting plan for future account provisioning. Root can create unlimited packages by sending -1 for every numeric limit field. When the user asks for "unlimited limits", "no limits", "fara limite", or similar wording, use the requested package name as packagename, set featureprofile=1 unless the user specified another feature profile, set every numeric limit field to -1, set dedicatedip=0, and set shell=0 unless shell access was explicitly requested. This is a normal non-destructive create operation for root/reseller package administration; do not refuse it as unavailable when this endpoint is returned by the AI catalog.

Endpoint

POST /v1/account-packages

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (19)

packagenameRequired
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
Starter

Package name. Package display name (1–64 chars; letters, numbers, spaces, hyphens, and underscores).

Validation and use: Required Send this parameter as a JSON body property.

addondomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Addon domains limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

databasesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Databases limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

dedicatedipOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
0

Dedicated IP toggle. 1 to require dedicated IP for accounts using this package.

Validation and use: Optional Send this parameter as a JSON body property.

diskspacequotaOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Disk quota (MB). -1 unlimited (if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

emailaccountsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Email accounts limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

feature_profileOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
1

Feature profile selection. Alias of featureprofile. Prefer featureprofile.

Validation and use: Optional Send this parameter as a JSON body property.

featureprofileOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
1

Feature profile id. Alias: feature_profile.

Validation and use: Optional Send this parameter as a JSON body property.

ftpaccountsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

FTP accounts limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxcpuusageOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

CPU limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxemailsperhourOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Max emails per hour (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxinodeslimitOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Inode limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxiodiskbandwidthOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

IO bandwidth limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxiopslimitsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

IOPS limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxmemorysizeOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Memory limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxuserprocessesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Process limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

parkeddomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Parked domains limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

shellOptional
Send in
JSON body
Type
enum
Accepted values
0, 1, 2
Example
0

Shell mode: 0 disabled, 1 bash, 2 jail. Allowed values: 0, 1, 2.

Validation and use: Optional Send this parameter as a JSON body property.

subdomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Subdomains limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 19 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "packagename": "Starter",
    "addondomains": "-1",
    "databases": "-1",
    "dedicatedip": "0",
    "diskspacequota": "-1",
    "emailaccounts": "-1",
    "feature_profile": 1,
    "featureprofile": "1",
    "ftpaccounts": "-1",
    "maxcpuusage": "-1",
    "maxemailsperhour": "-1",
    "maxinodeslimit": "-1",
    "maxiodiskbandwidth": "-1",
    "maxiopslimits": "-1",
    "maxmemorysize": "-1",
    "maxuserprocesses": "-1",
    "parkeddomains": "-1",
    "shell": "0",
    "subdomains": "-1"
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X POST 'https://panel.example.com:882/v1/account-packages' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"packagename":"Starter","featureprofile":"1","diskspacequota":"-1","addondomains":"-1","parkeddomains":"-1","subdomains":"-1","databases":"-1","emailaccounts":"-1","maxemailsperhour":"-1","ftpaccounts":"-1","maxcpuusage":"-1","maxmemorysize":"-1","maxuserprocesses":"-1","maxinodeslimit":"-1","maxiodiskbandwidth":"-1","maxiopslimits":"-1","shell":"0","dedicatedip":"0"}'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Create unlimited account package
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "packagename": "Starter",
    "featureprofile": "1",
    "diskspacequota": "-1",
    "addondomains": "-1",
    "parkeddomains": "-1",
    "subdomains": "-1",
    "databases": "-1",
    "emailaccounts": "-1",
    "maxemailsperhour": "-1",
    "ftpaccounts": "-1",
    "maxcpuusage": "-1",
    "maxmemorysize": "-1",
    "maxuserprocesses": "-1",
    "maxinodeslimit": "-1",
    "maxiodiskbandwidth": "-1",
    "maxiopslimits": "-1",
    "shell": "0",
    "dedicatedip": "0"
  }
}
Create limited account package
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "packagename": "Starter",
    "featureprofile": "1",
    "diskspacequota": "10240",
    "addondomains": "10",
    "parkeddomains": "10",
    "subdomains": "50",
    "databases": "20",
    "emailaccounts": "50",
    "maxemailsperhour": "500",
    "ftpaccounts": "10",
    "maxcpuusage": "100",
    "maxmemorysize": "1024",
    "maxuserprocesses": "100",
    "maxinodeslimit": "100000",
    "maxiodiskbandwidth": "0",
    "maxiopslimits": "0",
    "shell": "0",
    "dedicatedip": "0"
  }
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

DELETE/v1/account-packages/{id}root resellerDelete account package (if unused).

What this endpoint does

Delete account package (if unused).

Endpoint

DELETE /v1/account-packages/{id}

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (1)

idRequired
Send in
URL path
Type
int
Accepted values
Any value matching int
Example
1

Exact resource identifier returned by the related list or context endpoint. Do not guess ids from table position.

Validation and use: Required Replace this placeholder directly in the URL path. Use the corresponding list endpoint for this resource and copy the returned id value.

Complete request template

This reference template contains all 1 current parameter key. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "id": 1
  },
  "query_parameters": {},
  "json_body": {},
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X DELETE 'https://panel.example.com:882/v1/account-packages/1' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY'

Example note: Requires a value returned by another endpoint before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Example request
{
  "path_parameters": {
    "id": 1
  },
  "query_parameters": {},
  "json_body": {}
}

Requires a value returned by another endpoint before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

GET/v1/account-packages/{id}root resellerGet account package by id.

What this endpoint does

Get account package by id.

Endpoint

GET /v1/account-packages/{id}

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (1)

idRequired
Send in
URL path
Type
int
Accepted values
Any value matching int
Example
1

Exact resource identifier returned by the related list or context endpoint. Do not guess ids from table position.

Validation and use: Required Replace this placeholder directly in the URL path. Use the corresponding list endpoint for this resource and copy the returned id value.

Complete request template

This reference template contains all 1 current parameter key. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "id": 1
  },
  "query_parameters": {},
  "json_body": {},
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X GET 'https://panel.example.com:882/v1/account-packages/1' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY'

Example note: Requires a value returned by another endpoint before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Example request
{
  "path_parameters": {
    "id": 1
  },
  "query_parameters": {},
  "json_body": {}
}

Requires a value returned by another endpoint before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint reads state. Use its current identifiers and result before calling a related create, update, delete, repair, or restore operation.

PATCH/v1/account-packages/{id}root resellerEdit account package definition.

What this endpoint does

Edit account package definition.

Operational guidance: Edit account package definition. PATCH is partial: send only fields that must change.

Endpoint

PATCH /v1/account-packages/{id}

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (21)

idRequired
Send in
URL path
Type
int
Accepted values
Any value matching int
Example
1

Exact resource identifier returned by the related list or context endpoint. Do not guess ids from table position.

Validation and use: Required Replace this placeholder directly in the URL path. Use the corresponding list endpoint for this resource and copy the returned id value.

addondomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Addon domains limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

apply_to_accountsOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Apply the package changes to accounts that currently use this package, in addition to updating the reusable package definition.

Validation and use: Optional Send this parameter as a JSON body property.

databasesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Databases limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

dedicatedipOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Dedicated IP toggle. 1 to require dedicated IP for accounts using this package.

Validation and use: Optional Send this parameter as a JSON body property.

diskspacequotaOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
100

Disk quota (MB). -1 unlimited (if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

emailaccountsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Email accounts limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

feature_profileOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
1

Feature profile selection. Alias of featureprofile. Prefer featureprofile.

Validation and use: Optional Send this parameter as a JSON body property.

featureprofileOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
1

Feature profile id. Alias: feature_profile.

Validation and use: Optional Send this parameter as a JSON body property.

ftpaccountsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

FTP accounts limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxcpuusageOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

CPU limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxemailsperhourOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Max emails per hour (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxinodeslimitOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Inode limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxiodiskbandwidthOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

IO bandwidth limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxiopslimitsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

IOPS limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxmemorysizeOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Memory limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

maxuserprocessesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Process limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

packagenameOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
Starter

Package name. Package display name (1–64 chars; letters, numbers, spaces, hyphens, and underscores).

Validation and use: Optional Send this parameter as a JSON body property.

parkeddomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Parked domains limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

shellOptional
Send in
JSON body
Type
enum
Accepted values
0, 1, 2
Example
0

Shell mode: 0 disabled, 1 bash, 2 jail. Allowed values: 0, 1, 2.

Validation and use: Optional Send this parameter as a JSON body property.

subdomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Subdomains limit (-1 unlimited if allowed).

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 21 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "id": 1
  },
  "query_parameters": {},
  "json_body": {
    "addondomains": -1,
    "apply_to_accounts": 1,
    "databases": -1,
    "dedicatedip": 1,
    "diskspacequota": 100,
    "emailaccounts": -1,
    "feature_profile": 1,
    "featureprofile": 1,
    "ftpaccounts": -1,
    "maxcpuusage": -1,
    "maxemailsperhour": -1,
    "maxinodeslimit": -1,
    "maxiodiskbandwidth": -1,
    "maxiopslimits": -1,
    "maxmemorysize": -1,
    "maxuserprocesses": -1,
    "packagename": "Starter",
    "parkeddomains": -1,
    "shell": 0,
    "subdomains": -1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/account-packages/1' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"packagename":"Starter","featureprofile":1,"feature_profile":1,"shell":0}'

Example note: Requires a value returned by another endpoint before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Example request
{
  "path_parameters": {
    "id": 1
  },
  "query_parameters": {},
  "json_body": {
    "packagename": "Starter",
    "featureprofile": 1,
    "feature_profile": 1,
    "shell": 0
  }
}

Requires a value returned by another endpoint before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Accounts

POST/v1/accountsroot resellerCreate hosting account. For default/shared server IP, omit `select_account_ip` or send `select_account_ip=shared` with `force_shared_ip=1`; SHM resolves the configured shared IP.

What this endpoint does

Create hosting account. For default/shared server IP, omit `select_account_ip` or send `select_account_ip=shared` with `force_shared_ip=1`; SHM resolves the configured shared IP.

Operational guidance: Create a hosting account. For default/shared server IP, omit select_account_ip or send select_account_ip="shared" with force_shared_ip=1; the engine resolves the configured shared IP. When the user asks for a demo/test/random domain, generate a valid random FQDN such as customer.example and derive account_username/account_email from it. Migration/import fields are root-only advanced options.

Endpoint

POST /v1/accounts

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (45)

account_domainRequired
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
example.test

Primary account domain. Primary domain name. Primary domain (FQDN). Punycode accepted.

Validation and use: Required Send this parameter as a JSON body property.

account_emailRequired
Send in
JSON body
Type
string|email
Accepted values
Any value matching string|email
Example
admin@example.test

Account contact email address. Contact email for the account.

Validation and use: Required Send this parameter as a JSON body property.

account_passwordRequired
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
STRONG_PASSWORD

Account or mailbox password. Initial account password. Generate a strong password when the user did not provide one. Initial account password (min 8 chars).

Validation and use: Required Send this parameter as a JSON body property.

account_usernameRequired
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
exampleacct

Account username. System username to create. System username to create (2–30 chars; letters/numbers only; no hyphen, underscore, dot, or spaces; not all digits).

Validation and use: Required Send this parameter as a JSON body property. Minimum length 2. Maximum length 30. Pattern: ^(?=.*[A-Za-z])[A-Za-z0-9]{2,30}$. Generate lowercase letters and digits only, for example testhost8k3m2p. Do not use hyphen, underscore, dot, or spaces.

select_account_ownerRequired
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
0

Account owner selection. Owner identifier. Use `0` or omit for root-owned accounts. Use 0 or root for root-owned accounts. For reseller ownership, use an existing reseller username or positive id only when the user explicitly requests that owner. Never send -1.

Validation and use: Required Send this parameter as a JSON body property. Pattern: ^(0|root|[A-Za-z][A-Za-z0-9]{1,29}|[1-9][0-9]*)$. Use 0 or root for root-owned accounts. Use an existing reseller username or positive reseller/account id only when ownership is explicitly requested. Never send -1.

select_account_packageRequired
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
1

Account package selection. Account package id. Use `1` for the protected default package when no other package is requested. Account package id to apply. Use 1 for the protected default package when no package is specified. Never send -1 or the word default.

Validation and use: Required Send this parameter as a JSON body property. Minimum 1. Pattern: ^[1-9][0-9]*$. Use package id 1 for the protected default package when no package is specified. Send a positive numeric package id; never send -1 or the word default.

addondomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for addon-domain limit. Override addon domains limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

conflict_dns_policyOptional
Send in
JSON body
Type
enum
Accepted values
keep_existing, overwrite
Example
keep_existing

Alias of migration_conflict_dns_policy. Prefer migration_conflict_dns_policy. Allowed values: keep_existing, overwrite.

Validation and use: Optional Send this parameter as a JSON body property.

databasesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for MySQL database limit. Override databases limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

diskspacequotaOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
100

Root-only migration override for disk quota in MB; -1 is unlimited. Override disk quota MB for this account at creation time (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

emailaccountsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for email account limit. Override email accounts limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

force_shared_ipOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Set to `1` when the user requests default/shared server IP. Set to 1 when the user asks for the default/shared server IP, even if the selected package requires a dedicated IP.

Validation and use: Optional Send this parameter as a JSON body property.

ftpaccountsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for FTP account limit. Override FTP accounts limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

maxcpuusageOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for CPU limit. Override CPU limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

maxemailsperhourOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for outbound messages per hour. Override max emails per hour (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

maxinodeslimitOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for inode limit. Override inode limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

maxiodiskbandwidthOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for disk bandwidth limit. Override IO bandwidth limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

maxiopslimitsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for IOPS limit. Override IOPS limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

maxmemorysizeOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for memory limit. Override memory limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

maxuserprocessesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for process limit. Override max user processes (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

migrationOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Root-only migration mode flag. Omit it for normal account creation. Root-only migration mode helper.

Validation and use: Optional Send this parameter as a JSON body property.

migration_conflict_account_policyOptional
Send in
JSON body
Type
enum
Accepted values
skip, overwrite
Example
skip

Root-only migration conflict policy for existing accounts: `skip` or `overwrite`. Root-only migration conflict policy when an account already exists: skip|overwrite. Allowed values: skip, overwrite.

Validation and use: Optional Send this parameter as a JSON body property.

migration_conflict_dns_policyOptional
Send in
JSON body
Type
enum
Accepted values
keep_existing, overwrite
Example
keep_existing

Migration conflict dns policy request field. Allowed values: keep_existing, overwrite. Root-only migration DNS zone conflict policy: `keep_existing` or `overwrite`. Use `overwrite` only when the migration should replace existing local/cluster DNS zones. Root-only migration DNS zone conflict policy: keep_existing|overwrite. overwrite allows replacing existing local or DNS Cluster zones during migration.

Validation and use: Optional Send this parameter as a JSON body property.

migration_conflict_domain_policyOptional
Send in
JSON body
Type
enum
Accepted values
skip_account, skip_domain
Example
skip_account

Root-only migration conflict policy for domains: `skip_account` or `skip_domain`. Root-only migration conflict policy for domain collisions: skip_account|skip_domain. Allowed values: skip_account, skip_domain.

Validation and use: Optional Send this parameter as a JSON body property.

migration_existing_account_userOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
demo

Root-only migration override: existing local account username to reuse when overwrite is allowed. Root-only migration override: existing local account username to reuse when migration_conflict_account_policy=overwrite.

Validation and use: Optional Send this parameter as a JSON body property.

migration_source_platformOptional
Send in
JSON body
Type
enum
Accepted values
plesk, directadmin
Example
plesk

Migration source platform request field. Allowed values: plesk, directadmin. Root-only migration source hint (for example `plesk` or `directadmin`). Root-only migration source hint, for example "plesk" or "directadmin".

Validation and use: Optional Send this parameter as a JSON body property.

opcacheOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Initial OPcache state.

Validation and use: Optional Send this parameter as a JSON body property.

parkeddomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for parked-domain limit. Override parked domains limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

phpversionOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
php83

Initial installed PHP runtime token, for example php83.

Validation and use: Optional Send this parameter as a JSON body property.

postgres_databasesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for PostgreSQL database limit. Override PostgreSQL databases limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

postgres_usersOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
1

Root-only migration override for PostgreSQL user limit. Override PostgreSQL users limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

progress_taskOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
create_account_root_0123456789abcdef0123456789abcdef

Optional live progress id. Use create_account_<caller>_<32 hexadecimal characters>, then poll GET /v1/progress/{task}. Root uses caller root; a reseller must use its own username. Live progress id in the form create_account_<caller>_<32 hexadecimal characters>. Root uses caller root; a reseller uses its own username. Poll GET /v1/progress/{task}.

Validation and use: Optional Send this parameter as a JSON body property.

resellermaxaccountsOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
-1

Maximum reseller accounts limit. Root-only migration override for the created reseller maximum account count. Reseller max accounts (advanced; reseller accounts only).

Validation and use: Optional Send this parameter as a JSON body property.

resellermaxdiskspaceOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
-1

Maximum reseller disk space. Root-only migration override for the created reseller disk pool in MB. Reseller max disk space in MB (advanced; reseller accounts only).

Validation and use: Optional Send this parameter as a JSON body property.

resellerprivilegesOptional
Send in
JSON body
Type
enum
Accepted values
yes
Example
yes

Reseller privilege toggle. Set to `yes` to create a reseller account (root-only). Set to "yes" to create a reseller account (root-only).

Validation and use: Optional Send this parameter as a JSON body property. Send yes only when creating a reseller account. Omit this field for normal hosting accounts.

select_account_ipOptional
Send in
JSON body
Type
enum
Accepted values
shared, sharedip, shared_ip, default, server_default, server_shared
Example
shared

Account IP selection. Allowed values: shared, sharedip, shared_ip, default, server_default, server_shared. Optional. Use `shared`, `default`, or omit for the configured shared server IP. Use "shared", "default", or omit it for the configured shared server IP; the engine may override with shared/dedicated IP based on policy.

Validation and use: Optional Send this parameter as a JSON body property.

selectreselleripsOptional
Send in
JSON body
Type
array|string|string[]
Accepted values
Any value matching array|string|string[]
Example
192.0.2.10

Selected reseller IP addresses. Optional reseller IP allow-list. Omit for default/shared IP. Reseller IP allow-list (array of IPv4 strings). Used when creating reseller accounts.

Validation and use: Optional Send this parameter as a JSON body property.

selectresellerpackageOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
1

Selected reseller package. Reseller package id when creating a reseller account. Use `1` for the protected default reseller package when no other package is requested. Reseller package id (required when resellerprivileges="yes").

Validation and use: Optional Send this parameter as a JSON body property.

setopcacheOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Alias of opcache. Prefer opcache.

Validation and use: Optional Send this parameter as a JSON body property.

setphpversionOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
php83

Alias of phpversion. Prefer phpversion.

Validation and use: Optional Send this parameter as a JSON body property.

shadowOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
PASSWORD_HASH_FROM_SOURCE

Root-only migration password hash for the created system account. Root-only migration password hash to store for the system account (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

shellOptional
Send in
JSON body
Type
enum
Accepted values
0, 1, 2
Example
0

Root-only migration shell override: 0 disabled, 1 bash, 2 jail. Override shell setting (advanced): 0=disabled, 1=bash, 2=jail. Allowed values: 0, 1, 2.

Validation and use: Optional Send this parameter as a JSON body property.

subdomainsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Root-only migration override for subdomain limit. Override subdomains limit (advanced).

Validation and use: Optional Send this parameter as a JSON body property.

suspend_reasonOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
true

Suspend reason. Optional suspension reason used when suspended is true. Suspend reason shown in UI (if suspended=1).

Validation and use: Optional Send this parameter as a JSON body property.

suspendedOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Create the account suspended when true. Set to 1 to create the account suspended.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 45 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "account_domain": "example.test",
    "account_email": "admin@example.test",
    "account_password": "STRONG_PASSWORD",
    "account_username": "exampleacct",
    "select_account_owner": 0,
    "select_account_package": 1,
    "addondomains": -1,
    "conflict_dns_policy": "keep_existing",
    "databases": -1,
    "diskspacequota": 100,
    "emailaccounts": -1,
    "force_shared_ip": 1,
    "ftpaccounts": -1,
    "maxcpuusage": -1,
    "maxemailsperhour": -1,
    "maxinodeslimit": -1,
    "maxiodiskbandwidth": -1,
    "maxiopslimits": -1,
    "maxmemorysize": -1,
    "maxuserprocesses": -1,
    "migration": 1,
    "migration_conflict_account_policy": "skip",
    "migration_conflict_dns_policy": "keep_existing",
    "migration_conflict_domain_policy": "skip_account",
    "migration_existing_account_user": "demo",
    "migration_source_platform": "plesk",
    "opcache": 1,
    "parkeddomains": -1,
    "phpversion": "php83",
    "postgres_databases": -1,
    "postgres_users": 1,
    "progress_task": "create_account_root_0123456789abcdef0123456789abcdef",
    "resellermaxaccounts": -1,
    "resellermaxdiskspace": -1,
    "resellerprivileges": "yes",
    "select_account_ip": "shared",
    "selectresellerips": "192.0.2.10",
    "selectresellerpackage": 1,
    "setopcache": 1,
    "setphpversion": "php83",
    "shadow": "PASSWORD_HASH_FROM_SOURCE",
    "shell": 0,
    "subdomains": -1,
    "suspend_reason": true,
    "suspended": 1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X POST 'https://panel.example.com:882/v1/accounts' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"account_domain":"example.test","account_username":"exampleacct","select_account_package":1,"account_password":"STRONG_PASSWORD","account_email":"admin@example.test","select_account_owner":0,"select_account_ip":"shared","force_shared_ip":1,"progress_task":"create_account_root_0123456789abcdef0123456789abcdef"}'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Create a root-owned account with progress
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "account_domain": "example.test",
    "account_username": "exampleacct",
    "select_account_package": 1,
    "account_password": "STRONG_PASSWORD",
    "account_email": "admin@example.test",
    "select_account_owner": 0,
    "select_account_ip": "shared",
    "force_shared_ip": 1,
    "progress_task": "create_account_root_0123456789abcdef0123456789abcdef"
  }
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

DELETE/v1/accounts/{username}root resellerDelete account and associated resources.

What this endpoint does

Delete account and associated resources.

Operational guidance: Deletes a hosting account. Path {username} identifies the account. Optional keepdns=on keeps the DNS zone on the server.

Endpoint

DELETE /v1/accounts/{username}

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (4)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

account_usernameOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
demo

Account username.

Validation and use: Optional Send this parameter as a JSON body property.

keepdnsOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
off

Keep DNS records after delete. Set to 1/true/on/yes to keep DNS zone records. Default: off.

Validation and use: Optional Send this parameter as a JSON body property.

progress_taskOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
provision-account-01

Optional task identifier used to publish or correlate progress for this operation.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 4 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "account_username": "demo",
    "keepdns": "off",
    "progress_task": "provision-account-01"
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X DELETE 'https://panel.example.com:882/v1/accounts/demo' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"keepdns":"off"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Delete account (remove DNS)
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "keepdns": "off"
  }
}

Requires a documented runtime value before QA can execute this request.

Delete account (keep DNS)
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "keepdns": "on"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Core

PATCH/v1/accounts/{username}/feature-flagsroot resellerUpdate SHM account feature flags

What this endpoint does

Update SHM account feature flags

Operational guidance: Updates one or more account-level feature flags. Root and the owning reseller may call this endpoint. Enabling a flag requires the account package Feature Profile to grant it. podman_cli controls only interactive Podman CLI exposure inside JailShell; it does not disable the Account Podman Manager.

Endpoint

PATCH /v1/accounts/{username}/feature-flags

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (4)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

aiOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Enable or disable AI Assistant access for this account.

Validation and use: Optional Send this parameter as a JSON body property.

cloudflare_dnsOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
0

Enable or disable Cloudflare DNS access for this account.

Validation and use: Optional Send this parameter as a JSON body property.

podman_cliOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Enable or disable the isolated Podman CLI mounts and socket inside this account JailShell. The account must use shell=2 for runtime exposure.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 4 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "ai": 1,
    "cloudflare_dns": 0,
    "podman_cli": 1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/feature-flags' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"podman_cli":1}'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Enable Podman CLI in JailShell
{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "podman_cli": 1
  }
}
Disable Podman CLI without disabling Podman Manager
{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "podman_cli": 0
  }
}
Update multiple feature flags
{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "ai": 1,
    "cloudflare_dns": 0,
    "podman_cli": 1
  }
}
Enable Podman CLI in JailShell
{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "podman_cli": 1
  }
}
Disable Podman CLI without disabling Podman Manager
{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "podman_cli": 0
  }
}
Update multiple feature flags
{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "ai": 1,
    "cloudflare_dns": 0,
    "podman_cli": 1
  }
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Domain

PATCH/v1/accounts/{username}/domainroot resellerRename primary account domain.

What this endpoint does

Rename primary account domain.

Operational guidance: Renames the primary domain of the account.

Endpoint

PATCH /v1/accounts/{username}/domain

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (3)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

new_domainRequired
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
example.net

New primary domain. Alias: domain.

Validation and use: Required Send this parameter as a JSON body property.

domainOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
example.com

Domain name. Alias of `new_domain`. Alias of new_domain. Prefer new_domain.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 3 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "new_domain": "example.net",
    "domain": "example.com"
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/domain' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"new_domain":"example.net"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Rename primary domain
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "new_domain": "example.net"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Feature Profiles

GET/v1/feature-profilesroot resellerList feature profiles visible to current role.

What this endpoint does

List feature profiles visible to current role.

Endpoint

GET /v1/feature-profiles

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (0)

This endpoint accepts no path, query, or JSON parameters.

Complete request template

This reference template contains all 0 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {},
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X GET 'https://panel.example.com:882/v1/feature-profiles' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Example request
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {}
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "access_denied",
  "message": "The API key is not authorized for this endpoint, resource, role, or source IP."
}

Operational note

This endpoint reads state. Use its current identifiers and result before calling a related create, update, delete, repair, or restore operation.

POST/v1/feature-profilesroot resellerCreate feature profile.

What this endpoint does

Create feature profile.

Operational guidance: Create a feature profile. Use GET /v1/feature-profiles/catalog to list available feature keys. By default allow_all=1 (all features allowed).

Endpoint

POST /v1/feature-profiles

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (6)

nameRequired
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
All Features

Profile name (1–64 chars; letters/numbers/spaces). Alias: profile_name.

Validation and use: Required Send this parameter as a JSON body property.

allow_allOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Allow all available feature keys. 1 to allow all features (default). Alias: allowall.

Validation and use: Optional Send this parameter as a JSON body property.

allowallOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Allow all available feature keys. Alias of allow_all. Prefer allow_all.

Validation and use: Optional Send this parameter as a JSON body property.

feature_keysOptional
Send in
JSON body
Type
array|string
Accepted values
Any value matching array|string
Example
[]

Feature key list. Alias of features. Prefer features.

Validation and use: Optional Send this parameter as a JSON body property.

featuresOptional
Send in
JSON body
Type
array|string
Accepted values
Any value matching array|string
Example
["email","dns","ftp"]

Feature key list. When allow_all=0: array of feature keys, or comma-separated string. Alias: feature_keys.

Validation and use: Optional Send this parameter as a JSON body property.

profile_nameOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
Default

Profile name. Alias of name. Prefer name.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 6 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "name": "All Features",
    "allow_all": 1,
    "allowall": 1,
    "feature_keys": [],
    "features": [
      "email",
      "dns",
      "ftp"
    ],
    "profile_name": "Default"
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X POST 'https://panel.example.com:882/v1/feature-profiles' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"name":"All Features","allow_all":1}'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Allow all features
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "name": "All Features",
    "allow_all": 1
  }
}
Allow selected features
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "name": "Starter",
    "allow_all": 0,
    "features": [
      "email",
      "dns",
      "ftp"
    ]
  }
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

DELETE/v1/feature-profiles/{id}root resellerDelete feature profile (if unused).

What this endpoint does

Delete feature profile (if unused).

Operational guidance: Delete one unused feature profile. The default/system profile and profiles assigned to packages cannot be deleted.

Endpoint

DELETE /v1/feature-profiles/{id}

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (2)

idRequired
Send in
URL path
Type
int|integer|string
Accepted values
Any value matching int|integer|string
Example
2

Exact resource identifier returned by the related list or context endpoint. Do not guess ids from table position.

Validation and use: Required Replace this placeholder directly in the URL path. Use the corresponding list endpoint for this resource and copy the returned id value.

featureprofile_idOptional
Send in
JSON body
Type
int|string|integer
Accepted values
Any value matching int|string|integer
Example
1

Feature profile ID. Optional alias of path `{id}`. Compatibility alias for id. Prefer the path id.

Validation and use: Optional Send this parameter as a JSON body property. Use the corresponding list endpoint for this resource and copy the returned featureprofile_id value.

Complete request template

This reference template contains all 2 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "id": 2
  },
  "query_parameters": {},
  "json_body": {
    "featureprofile_id": 1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X DELETE 'https://panel.example.com:882/v1/feature-profiles/2' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY'

Example note: Requires a value returned by another endpoint before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Delete profile
{
  "path_parameters": {
    "id": 2
  },
  "query_parameters": {},
  "json_body": {}
}

Requires a value returned by another endpoint before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

GET/v1/feature-profiles/{id}root resellerGet feature profile by id.

What this endpoint does

Get feature profile by id.

Operational guidance: Fetch one feature profile. The profile id is the path parameter returned by GET /v1/feature-profiles or POST /v1/feature-profiles.

Endpoint

GET /v1/feature-profiles/{id}

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (2)

idRequired
Send in
URL path
Type
int|integer|string
Accepted values
Any value matching int|integer|string
Example
2

Exact resource identifier returned by the related list or context endpoint. Do not guess ids from table position.

Validation and use: Required Replace this placeholder directly in the URL path. Use the corresponding list endpoint for this resource and copy the returned id value.

featureprofile_idOptional
Send in
Query string
Type
int|string|integer
Accepted values
Any value matching int|string|integer
Example
1

Feature profile ID. Optional alias of path `{id}`. Compatibility alias for id. Prefer the path id.

Validation and use: Optional Send this parameter in the query string. Use the corresponding list endpoint for this resource and copy the returned featureprofile_id value.

Complete request template

This reference template contains all 2 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "id": 2
  },
  "query_parameters": {
    "featureprofile_id": 1
  },
  "json_body": {},
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X GET 'https://panel.example.com:882/v1/feature-profiles/2' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY'

Example note: Requires a value returned by another endpoint before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Fetch profile
{
  "path_parameters": {
    "id": 2
  },
  "query_parameters": {},
  "json_body": {}
}

Requires a value returned by another endpoint before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint reads state. Use its current identifiers and result before calling a related create, update, delete, repair, or restore operation.

PATCH/v1/feature-profiles/{id}root resellerEdit feature profile.

What this endpoint does

Edit feature profile.

Operational guidance: Edit a feature profile. PATCH is partial: send only fields that must change. Default/system profiles may be protected from edit for non-root roles.

Endpoint

PATCH /v1/feature-profiles/{id}

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (8)

idRequired
Send in
URL path
Type
int|integer|string
Accepted values
Any value matching int|integer|string
Example
1

Exact resource identifier returned by the related list or context endpoint. Do not guess ids from table position.

Validation and use: Required Replace this placeholder directly in the URL path. Use the corresponding list endpoint for this resource and copy the returned id value.

allow_allOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Allow all available feature keys. 1 to allow all features. Alias: allowall.

Validation and use: Optional Send this parameter as a JSON body property.

allowallOptional
Send in
JSON body
Type
enum
Accepted values
1, 0, true, false, yes, no, on, off
Example
1

Allow all available feature keys. Alias of allow_all. Prefer allow_all.

Validation and use: Optional Send this parameter as a JSON body property.

feature_keysOptional
Send in
JSON body
Type
array|string
Accepted values
Any value matching array|string
Example
[]

Feature key list. Alias of features. Prefer features.

Validation and use: Optional Send this parameter as a JSON body property.

featureprofile_idOptional
Send in
JSON body
Type
int|string|integer
Accepted values
Any value matching int|string|integer
Example
1

Feature profile ID. Optional alias of path `{id}`. Compatibility alias for id. Prefer the path id.

Validation and use: Optional Send this parameter as a JSON body property. Use the corresponding list endpoint for this resource and copy the returned featureprofile_id value.

featuresOptional
Send in
JSON body
Type
array|string
Accepted values
Any value matching array|string
Example
["email","dns"]

Feature key list. When allow_all=0: array of feature keys, or comma-separated string. Alias: feature_keys.

Validation and use: Optional Send this parameter as a JSON body property.

nameOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
Starter v2

Profile name (1–64 chars; letters/numbers/spaces). Alias: profile_name.

Validation and use: Optional Send this parameter as a JSON body property.

profile_nameOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
Default

Alias of name. Prefer name.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 8 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "id": 1
  },
  "query_parameters": {},
  "json_body": {
    "allow_all": 1,
    "allowall": 1,
    "feature_keys": [],
    "featureprofile_id": 1,
    "features": [
      "email",
      "dns"
    ],
    "name": "Starter v2",
    "profile_name": "Default"
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/feature-profiles/1' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"name":"Starter v2"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Rename profile
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "name": "Starter v2"
  }
}

Requires a documented runtime value before QA can execute this request.

Switch to allow_all
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "allow_all": 1
  }
}

Requires a documented runtime value before QA can execute this request.

Switch to allowlist
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "allow_all": 0,
    "features": [
      "email",
      "dns"
    ]
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

GET/v1/feature-profiles/catalogroot resellerList available account feature keys for feature profiles.

What this endpoint does

List available account feature keys for feature profiles.

Endpoint

GET /v1/feature-profiles/catalog

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI for an authorized root or reseller role. It is not part of the account-chat surface.

Parameters (0)

This endpoint accepts no path, query, or JSON parameters.

Complete request template

This reference template contains all 0 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {},
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X GET 'https://panel.example.com:882/v1/feature-profiles/catalog' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Example request
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {}
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "access_denied",
  "message": "The API key is not authorized for this endpoint, resource, role, or source IP."
}

Operational note

This endpoint reads state. Use its current identifiers and result before calling a related create, update, delete, repair, or restore operation.

Ip

PATCH/v1/accounts/{username}/iproot resellerChange account IPv4 address.

What this endpoint does

Change account IPv4 address.

Operational guidance: Updates account IPv4 address. Path {username} identifies the account; body does not need account_user.

Endpoint

PATCH /v1/accounts/{username}/ip

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (3)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

ipRequired
Send in
JSON body
Type
string|ipv4
Accepted values
Any value matching string|ipv4
Example
192.168.0.1

IPv4 address. New IPv4 address for the account. Alias: "new_ip".

Validation and use: Required Send this parameter as a JSON body property.

new_ipOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
203.0.113.10

New IP address.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 3 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "ip": "192.168.0.1",
    "new_ip": "203.0.113.10"
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/ip' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"ip":"192.168.0.1"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Set dedicated IPv4
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "ip": "192.168.0.1"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Max Emails Per Hour

PATCH/v1/accounts/{username}/max-emails-per-hourroot resellerUpdate Exim outbound rate limit for account user (-1 for unlimited).

What this endpoint does

Update Exim outbound rate limit for account user (-1 for unlimited).

Operational guidance: Updates Exim outbound rate limit for the account (messages per hour).

Endpoint

PATCH /v1/accounts/{username}/max-emails-per-hour

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (3)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

maxemailsperhourRequired
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
500

Maximum outgoing emails per hour. Outbound email limit per hour. Use -1 for unlimited. Integer greater than or equal to -1. Alias: value.

Validation and use: Required Send this parameter as a JSON body property.

valueOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
1

Value payload. Alias of `maxemailsperhour`. Alias of maxemailsperhour. Prefer maxemailsperhour.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 3 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "maxemailsperhour": "500",
    "value": 1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/max-emails-per-hour' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"maxemailsperhour":"500"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Set rate limit
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "maxemailsperhour": "500"
  }
}

Requires a documented runtime value before QA can execute this request.

Set unlimited
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "maxemailsperhour": "-1"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Package

PATCH/v1/accounts/{username}/packageroot resellerApply package limits/settings to account.

What this endpoint does

Apply package limits/settings to account.

Operational guidance: Applies an account package to the account and syncs its limits.

Endpoint

PATCH /v1/accounts/{username}/package

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (3)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

package_idRequired
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
2

Account package id to apply.

Validation and use: Required Send this parameter as a JSON body property. Use the corresponding list endpoint for this resource and copy the returned package_id value.

select_account_packageOptional
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
1

Account package selection.

Validation and use: Optional Send this parameter as a JSON body property. Minimum 1. Pattern: ^[1-9][0-9]*$. Use package id 1 for the protected default package when no package is specified. Send a positive numeric package id; never send -1 or the word default.

Complete request template

This reference template contains all 3 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "package_id": 2,
    "select_account_package": 1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/package' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"package_id":2}'

Example note: Requires a value returned by another endpoint before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Apply package id 2
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "package_id": 2
  }
}

Requires a value returned by another endpoint before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Quota

PATCH/v1/accounts/{username}/quotaroot resellerUpdate account disk quota.

What this endpoint does

Update account disk quota.

Operational guidance: Updates disk quota for the account (in MB).

Endpoint

PATCH /v1/accounts/{username}/quota

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (3)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

diskspacequotaRequired
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
10240

New disk quota in MB (`-1` for unlimited). Disk quota in MB. Use -1 for unlimited. Alias: quota.

Validation and use: Required Send this parameter as a JSON body property.

quotaOptional
Send in
JSON body
Type
string|integer
Accepted values
Any value matching string|integer
Example
100

Alias of `diskspacequota`. Alias of diskspacequota. Prefer diskspacequota.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 3 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "diskspacequota": "10240",
    "quota": 100
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/quota' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"diskspacequota":"10240"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Set 10GB quota
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "diskspacequota": "10240"
  }
}

Requires a documented runtime value before QA can execute this request.

Set unlimited quota
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "diskspacequota": "-1"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Resources

PATCH/v1/accounts/{username}/resourcesroot resellerUpdate account resource limits, including mail rate overrides.

What this endpoint does

Update account resource limits, including mail rate overrides.

Operational guidance: Updates one or more resource limit fields. Provide at least one field.

Endpoint

PATCH /v1/accounts/{username}/resources

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (9)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

diskspacequotaOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
100

Disk quota in MB. Use -1 for unlimited. Disk quota MB.

Validation and use: Optional Send this parameter as a JSON body property.

maxcpuusageOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
200

CPU limit. Use -1 for unlimited.

Validation and use: Optional Send this parameter as a JSON body property.

maxemailsperhourOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Outbound email limit per hour. Use -1 for unlimited.

Validation and use: Optional Send this parameter as a JSON body property.

maxinodeslimitOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Inode limit. Use -1 for unlimited.

Validation and use: Optional Send this parameter as a JSON body property.

maxiodiskbandwidthOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

I/O bandwidth limit. Use -1 for unlimited. IO bandwidth.

Validation and use: Optional Send this parameter as a JSON body property.

maxiopslimitsOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

IOPS limit. Use -1 for unlimited.

Validation and use: Optional Send this parameter as a JSON body property.

maxmemorysizeOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
2048

Memory limit. Use -1 for unlimited.

Validation and use: Optional Send this parameter as a JSON body property.

maxuserprocessesOptional
Send in
JSON body
Type
integer|string
Accepted values
Any value matching integer|string
Example
-1

Process limit. Use -1 for unlimited.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 9 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "diskspacequota": 100,
    "maxcpuusage": "200",
    "maxemailsperhour": "-1",
    "maxinodeslimit": -1,
    "maxiodiskbandwidth": -1,
    "maxiopslimits": -1,
    "maxmemorysize": "2048",
    "maxuserprocesses": -1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/resources' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"maxcpuusage":"200","maxmemorysize":"2048"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Update CPU + memory
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "maxcpuusage": "200",
    "maxmemorysize": "2048"
  }
}

Requires a documented runtime value before QA can execute this request.

Set unlimited mail rate + CPU
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "maxemailsperhour": "-1",
    "maxcpuusage": "200"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Shell

PATCH/v1/accounts/{username}/shellroot resellerUpdate account shell mode.

What this endpoint does

Update account shell mode.

Operational guidance: Updates shell mode for the account user.

Endpoint

PATCH /v1/accounts/{username}/shell

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (3)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

shellRequired
Send in
JSON body
Type
enum
Accepted values
0, 1, 2
Example
2

Shell value. Allowed values: 0, 1, 2. Allowed values: 0 (disabled), 1 (bash), 2 (jail). Alias: shell_code.

Validation and use: Required Send this parameter as a JSON body property.

shell_codeOptional
Send in
JSON body
Type
enum
Accepted values
0, 1, 2
Example
0

Shell code or shell identifier. Alias of shell. Prefer shell. Allowed values: 0, 1, 2.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 3 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "shell": "2",
    "shell_code": 0
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/shell' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"shell":"2"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Enable jailed shell
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "shell": "2"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Status

PATCH/v1/accounts/{username}/statusroot resellerSuspend or unsuspend account.

What this endpoint does

Suspend or unsuspend account.

Operational guidance: Suspend or unsuspend an account.

Endpoint

PATCH /v1/accounts/{username}/status

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (4)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Target SHM account username. Root may target any authorized account, a reseller only an owned account, and a user only their own account.

Validation and use: Required Replace this placeholder directly in the URL path.

statusRequired
Send in
JSON body
Type
enum
Accepted values
1, 2
Example
1

Status value. Allowed values: 1, 2. Target status: `1` active or `2` suspended. Allowed: 1 (active), 2 (suspended). Alias: new_status.

Validation and use: Required Send this parameter as a JSON body property.

actionOptional
Send in
JSON body
Type
enum
Accepted values
suspend, unsuspend
Example
suspend

Requested action name. Allowed values: suspend, unsuspend. Optional action alias: `suspend` or `unsuspend`. Alternative to status: suspend|unsuspend. Used only if status is omitted.

Validation and use: Optional Send this parameter as a JSON body property.

new_statusOptional
Send in
JSON body
Type
enum
Accepted values
1, 2
Example
1

Alias of `status`. Alias of status. Prefer status. Allowed values: 1, 2.

Validation and use: Optional Send this parameter as a JSON body property.

Complete request template

This reference template contains all 4 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "status": 1,
    "action": "suspend",
    "new_status": 1
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/status' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"status":1}'

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Example request
{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "status": 1
  }
}

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Username

PATCH/v1/accounts/{username}/usernameroot resellerRename account system username.

What this endpoint does

Rename account system username.

Operational guidance: Renames the system username of the account.

Endpoint

PATCH /v1/accounts/{username}/username

Authentication and permissions

Send X-Api-User and X-Api-Key. Root and resellers may call this endpoint; reseller requests remain limited to delegated resources and policy.

AI Mode availability

Discoverable by Workspace AI and Account AI when the authenticated role, account ownership, feature policy, and parameters permit it.

Parameters (2)

usernameRequired
Send in
URL path
Type
string
Accepted values
Any value matching string
Example
demo

Alias of new_username. Prefer new_username.

Validation and use: Required Replace this placeholder directly in the URL path.

new_usernameRequired
Send in
JSON body
Type
string
Accepted values
Any value matching string
Example
demoapi2

New system username. Alias: username.

Validation and use: Required Send this parameter as a JSON body property.

Complete request template

This reference template contains all 2 current parameter keys. Keys under query_or_json_parameters may be sent in either accepted location. Conditional or action-specific keys are alternatives; keep only the branch you are actually calling.

{
  "path_parameters": {
    "username": "demo"
  },
  "query_parameters": {},
  "json_body": {
    "new_username": "demoapi2"
  },
  "query_or_json_parameters": {}
}

Runnable workflow example

curl -sS -X PATCH 'https://panel.example.com:882/v1/accounts/demo/username' \
  -H 'X-Api-User: reseller' \
  -H 'X-Api-Key: YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  --data '{"new_username":"demoapi2"}'

Example note: Requires a documented runtime value before QA can execute this request.

Documented workflow examples

These are valid workflow branches from the current contract. They may use only the keys needed for that branch; the complete template above remains the exhaustive key list.

Rename account username
{
  "path_parameters": {},
  "query_parameters": {},
  "json_body": {
    "new_username": "demoapi2"
  }
}

Requires a documented runtime value before QA can execute this request.

Successful result

On success, SHM returns a JSON success envelope and the endpoint-specific state or result described below. Verify a mutation with the corresponding read endpoint or owning SHM page.

The success payload is endpoint-specific. Read the returned status, preserve request_id when present, and inspect the resource fields described by the endpoint.

Error response

{
  "status": "error",
  "code": "validation_error",
  "message": "One or more required parameters are missing or invalid."
}

Operational note

This endpoint can change state. Confirm the target and current state, keep a recovery path, and do not retry it blindly after an unknown result.

Result and next check

Read the HTTP status and JSON envelope, preserve the request id when returned, and verify state-changing results through a follow-up read or the related SHM page. Retry reads with care; retry writes only when their idempotency and prior outcome are known.

Theme color