Packages
Packages
Three stores, same verbs/shape: /api/v1/packages (hosting),
/api/v1/user-packages, /api/v1/reseller-packages.
Auth: Authorization: Bearer wsp_…
Error envelope:
{ "success": false, "code": "VALIDATION_ERROR", "error": "Package name is required", "message": "…", "status": 400 }
List — GET /api/v1/packages/
Response 200 (verified live):
[ { "name": "User 10GB", "owner": "admin", "type": "user",
"bandwidth": -1, "quota": 10000, "inode": -1,
"vdomains": 50, "nsubdomains": -1, "domainptr": -1,
"nemails": -1, "nemailf": -1, "nemailml": -1, "nemailr": -1,
"email_daily_limit": 0, "mysql": -1, "ftp": -1,
"aftp": false, "cgi": false, "php": true, "ssl": true,
"ssh": false, "cron": true, "spam": true, "catchall": false,
"dnscontrol": true, "sysinfo": true } ]
-1 = unlimited. GET /packages/all (unpaginated) · /packages/:name.
Create — POST /api/v1/packages/
Request:
{ "name": "Starter", "quota": 5120, "bandwidth": 102400,
"vdomains": 10, "mysql": 5, "ftp": 5, "php": true, "ssl": true }
Response 201 (verified live — server echoes the full package, unset numerics default to 0):
{ "name": "Starter", "owner": "admin", "type": "user",
"bandwidth": 102400, "quota": 5120, "inode": 0, "vdomains": 10,
"nsubdomains": 0, "domainptr": 0, "nemails": 0, "mysql": 5,
"ftp": 5, "aftp": false, "php": true, "ssl": true, "ssh": false,
"cron": false }
Response 400 (verified live): … "error": "Package name is required" …
PUT /packages/:name (same body). DELETE /packages/:name → 200:
{ "message": "Package deleted successfully" }
user-packages/reseller-packages= identical verbs & shape.
Conventions → Authentication, Error Handling.