Buy and provision shared hosting accounts. Unlike everything else in this API, hosting creation is asynchronous: you get HTTP 202 immediately and poll for the result.
The flow
Section titled “The flow”GET /api/v1/hostings/packages— pick aservicePlanvalue.POST /api/v1/hostings/create— returns 202 with aserviceIdand statusProvisioning.GET /api/v1/hostings/check-status— poll untilActiveorFailed. WhenActive, the credentials are in the response.
GET /api/v1/hostings/packages
Section titled “GET /api/v1/hostings/packages”Lists what you can sell. Call this first — the servicePlan value from here is what create expects.
Request — no parameters
GET /api/v1/hostings/packagesResponse — 200
[ { "name": "Starter", "requiredMinLeasing": 1, "permittedMaxLeasing": 12, "servicePlans": [ { "servicePlan": "starter-linux-01", "operatingSystem": "Linux", "panelType": "cPanel" }, { "servicePlan": "starter-win-01", "operatingSystem": "Windows", "panelType": "Plesk" } ] }, { "name": "Business", "requiredMinLeasing": 1, "permittedMaxLeasing": 24, "servicePlans": [ { "servicePlan": "business-linux-01", "operatingSystem": "Linux", "panelType": "cPanel" } ] }]| Field | How to use it |
|---|---|
name |
Package name, for display. |
requiredMinLeasing |
Minimum lease term in months. |
permittedMaxLeasing |
Maximum lease term in months. |
servicePlans[].servicePlan |
The exact value to send to create. Do not construct it yourself. |
servicePlans[].operatingSystem |
Linux or Windows. |
servicePlans[].panelType |
cPanel or Plesk. |
POST /api/v1/hostings/create
Section titled “POST /api/v1/hostings/create”Buys the package and queues provisioning. Returns HTTP 202, not 200.
Request
{ "domainName": "apiname.com", "servicePlan": "starter-linux-01"}| Field | Required | Notes |
|---|---|---|
domainName |
required | The domain the account is created for. Must be a valid registrable domain — it does not have to be registered with us. |
servicePlan |
required | A servicePlan value from GET /packages. |
Response — 202 Accepted
{ "serviceId": "HST-2026-0004821", "status": "Provisioning", "panelAddress": "https://panel.apiname.com", "username": "", "password": "", "token": ""}Errors — messages, no codes
| Message | Meaning and fix |
|---|---|
The provided domain name is invalid. |
domainName could not be parsed as a domain. |
No product is defined for package '{name}'. |
Configuration problem on our side. Open a support ticket. |
No price defined for package '{name}'. |
No price set for your account on that package. Open a ticket. |
Insufficient balance to purchase this hosting package. |
Top up and retry. |
GET /api/v1/hostings/check-status
Section titled “GET /api/v1/hostings/check-status”Reports where provisioning got to and, once complete, returns the credentials.
Request — send exactly one of these
| Parameter | Notes |
|---|---|
serviceId |
From the create response. |
domainName |
Alternative lookup key. |
GET /api/v1/hostings/check-status?serviceId=HST-2026-0004821Response — still provisioning
{ "serviceId": "HST-2026-0004821", "domainName": "apiname.com", "status": "Provisioning", "statusMessage": "The hosting account is being created on the server.", "panelAddress": "https://panel.apiname.com", "username": "", "password": "", "token": "", "failureReason": null}Response — ready
{ "serviceId": "HST-2026-0004821", "domainName": "apiname.com", "status": "Active", "statusMessage": "The hosting account is ready.", "panelAddress": "https://panel.apiname.com", "username": "apiname1", "password": "xK7#mQ2pL9vR4tZ8", "token": "a4f81c2e9b7d35604e8a1f93c62b07d5", "failureReason": null}Response — failed
{ "serviceId": "HST-2026-0004821", "domainName": "apiname.com", "status": "Failed", "statusMessage": "The hosting account could not be created. The amount has been refunded.", "panelAddress": "", "username": "", "password": "", "token": "", "failureReason": "Account name already exists on the target server"}Status values
status is always a string — the name below, never a number.
status |
What to do |
|---|---|
Provisioning |
Keep polling. Expect 20–60 seconds, occasionally longer. |
Active |
Ready. Read username, password and token. |
Failed |
Your balance has already been refunded. Read failureReason, fix the cause, call create again. |
Suspended |
Suspended because the lease expired. Renew to reactivate; if it is not renewed by the deletion date it becomes Deleted. |
Deleted |
Terminal. |
Errors — messages, no codes
| Message | Meaning and fix |
|---|---|
Either serviceId or domainName must be provided. |
You sent neither. |
Provide only one of serviceId or domainName, not both. |
You sent both. |
Hosting not found. |
No matching record. |
You are not authorized to access this hosting. |
The record belongs to another reseller. |
GET /api/v1/hostings · GET /api/v1/hostings/by-token · GET /api/v1/hostings/plans
Section titled “GET /api/v1/hostings · GET /api/v1/hostings/by-token · GET /api/v1/hostings/plans”Look up a hosting record, or read its plan limits.
GET /api/v1/hostings — by service ID or domain
GET /api/v1/hostings?serviceId=HST-2026-0004821
{ "hostingId": "b7f24e90-3a51-4c86-9d02-6e8b1f5a7c34", "serviceId": "HST-2026-0004821", "domainName": "apiname.com", "packageName": "Starter", "leaseOn": "2026-10-30T16:55:12", "expiredOn": "2027-10-30T16:55:12", "status": "Active", "externalCustomerId": "CUST-88201"}GET /api/v1/hostings/by-token — when all you have is the panel token
GET /api/v1/hostings/by-token?token=a4f81c2e9b7d35604e8a1f93c62b07d5Returns the same object. Useful when a provisioned account’s token is the only reference you have.
GET /api/v1/hostings/plans — resource limits
GET /api/v1/hostings/plans?hostingId=b7f24e90-3a51-4c86-9d02-6e8b1f5a7c34
[ { "name": "Starter Linux", "externalId": "starter-linux-01", "diskQuotaMb": 10240, "bandwidthLimitMb": 102400, "maxDomains": 1, "maxSubDomains": 10, "maxDatabases": 5, "maxFtpAccounts": 3, "maxEmailAccounts": 25, "hasDedicatedIp": false, "hasShellAccess": false }]Errors — messages, no codes
| Message | Meaning and fix |
|---|---|
Hosting not found. |
No matching record. |
You are not authorized to access this hosting. |
Belongs to another reseller. |
Token is required. |
token empty on /by-token. |
Token not recognized. |
No hosting matches that token. |
Token was not recognized by the panel. |
The hosting panel rejected the token. |
The account for this token could not be resolved. |
The panel returned no account. |
Account information could not be retrieved from the panel: {detail} |
Panel error; the detail is theirs. |
No hosting account is available for this hosting. |
There is no panel account — provisioning never completed. Check check-status. |