VPS service detail (WHMCS + Virtualizor combined)
GET/services/:id
Combines the reseller VPS service's WHMCS-side info (domain, IP, billing cycle, next due date, namespace) with the Virtualizor-side runtime metrics (hostname, IP list, virt type, running state).
VPS_ID resolution: The official Virtualizor WHMCS module keeps the VPS_ID in a WHMCS custom field — tblcustomfields (fieldname='vpsid', type='product', relid=PRODUCT_ID) + tblcustomfieldsvalues (fieldid=customfield.id, relid=SERVICE_ID, value=VPSID). If the custom field is undefined or the value is empty, vps_id=null is returned and the virt payload becomes null (whitelabel packages or not-yet-provisioned services).
Graceful degradation: On a Virtualizor master upstream error (timeout, 5xx, auth failure) it returns 200 instead of 502; virt=null and virt_unavailable=true. The reseller at least sees the WHMCS info.
Rate limit: Default bucket (60 req/min per key).
Request
Responses
- 200
- 401
- 403
- 404
- 429
Service detail returned (virt may be null if virt_unavailable=true)
Response Headers
The per-minute limit defined for this key
Number of requests remaining in the current window
Unix epoch of the start of the next window (UTC seconds)
Authentication failed — missing header, wrong credential, outside the IP whitelist, or a revoked key. No detail is leaked; all cases return a single message.
Response Headers
RFC 7617 Basic Auth challenge
Insufficient authorization — the reseller tried to access another reseller's service_id, or has insufficient scope for an endpoint requiring admin scope. The message is kept generic (ServiceOwnershipMiddleware prevents leakage).
Service not found (no record in tblhosting)
Per-minute limit exceeded
Response Headers
Seconds to wait before retrying after a 429 (RFC 7231 §7.1.3)
The per-minute limit defined for this key
Unix epoch of the start of the next window (UTC seconds)