API Documentation

Integrate WisPanel with your applications using our comprehensive REST API.

Base URL

https://your-server-ip:2083/api/v1

All API endpoints are relative to this base URL.

SSL Certificates

SSL Certificates

Manage TLS certs. Base: /api/v1/ssl · Auth: Authorization: Bearer wsp_…

Error envelope: { "success": false, "code": "VALIDATION_ERROR", "error": "Domain is required", "message": "…", "status": 400 }


Status — GET /api/v1/ssl/status

Response 200 (verified live):

{ "certbot_installed": true, "expiring_30_days": 0, "total_certs": 0 }

List — GET /api/v1/ssl/

Response 200 (verified live): [], or cert objects (domain, common_name, auto_renew, created_at, …). GET /ssl/expiring · /ssl/:id.

Issue — POST /api/v1/ssl/issue

Request: { "domain": "example.com" }

Real issuance requires the domain's DNS to resolve to this server (Let's Encrypt HTTP-01). On success the panel returns { "success": true, "domain": "example.com", "issued": true }.

Response 400 (verified live — empty body):

{ "success": false, "code": "VALIDATION_ERROR",
  "error": "Domain is required", "message": "Domain is required",
  "status": 400 }

Wildcard / upload / ACME / CSR / renew

POST /ssl/:domain/wildcard { "dns_provider": "cloudflare", "credentials": { "api_token": "•••" } }; POST /ssl/upload { "domain": "x", "certificate": "-----BEGIN…", "private_key": "-----BEGIN…" }; POST /ssl/acme/issue { "domain": "x", "email": "[email protected]" }; POST /ssl/:id/renew · /ssl/renewal-trigger; PUT /ssl/:id/auto-renew { "auto_renew": true }; POST /ssl/csr/generate { "domain": "x", "country": "VN" }; DELETE /ssl/:id.


Conventions → Authentication, Error Handling.

Rate Limiting

API requests are limited to 60 requests per minute per API token.

  • X-RateLimit-Limit: Maximum requests per minute
  • X-RateLimit-Remaining: Remaining requests
  • X-RateLimit-Reset: Unix timestamp when limit resets