Skip to content

Hosting

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.

  1. GET /api/v1/hostings/packages — pick a servicePlan value.
  2. POST /api/v1/hostings/create — returns 202 with a serviceId and status Provisioning.
  3. GET /api/v1/hostings/check-status — poll until Active or Failed. When Active, the credentials are in the response.

Lists what you can sell. Call this first — the servicePlan value from here is what create expects.

Request — no parameters

GET /api/v1/hostings/packages

Response — 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.

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.

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-0004821

Response — 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=a4f81c2e9b7d35604e8a1f93c62b07d5

Returns 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.