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.

Domains & Subdomains

Domains & Subdomains API

Manage domains, subdomains, vhost configuration, redirects, and domain settings.

Roles: All authenticated users manage their own domains. Admin sees all.

Domains

List Domains

GET /api/v1/domains

Admin sees all domains; users see their own.

Response:

[
  {
    "name": "example.com",
    "owner": "john",
    "web_server": "nginx",
    "document_root": "/home/john/domains/example.com/public_html",
    "custom_doc_root": "",
    "php_version": "8.2",
    "ssl_enabled": true,
    "force_ssl": true,
    "www_redirect": "add_www",
    "status": "active",
    "created_at": "2026-01-15T10:00:00Z",
    "updated_at": "2026-04-01T08:30:00Z"
  }
]

Create Domain

POST /api/v1/domains
{
  "name": "newsite.com",
  "custom_doc_root": "public",
  "php_version": "8.2",
  "web_server": "nginx",
  "force_ssl": false,
  "www_redirect": "add_www"
}

www_redirect options: "none", "add_www", "remove_www"

Get Domain

GET /api/v1/domains/{name}

Update Domain

PUT /api/v1/domains/{name}
{
  "php_version": "8.3",
  "force_ssl": true,
  "www_redirect": "add_www"
}

Delete Domain

DELETE /api/v1/domains/{name}

Regenerate Vhost

POST /api/v1/domains/{name}/regenerate-vhost

Apply Config

POST /api/v1/domains/{domain}/apply-config

Vhost Configuration

GET  /api/v1/domains/{name}/vhost
PUT  /api/v1/domains/{name}/vhost
POST /api/v1/domains/{name}/vhost/reset

PUT body: {"custom_config": "# nginx custom config here"}

Domain Pointers (Aliases)

GET    /api/v1/domains/{domain}/pointers
POST   /api/v1/domains/{domain}/pointers
DELETE /api/v1/domains/{domain}/pointers/{pointer}

Create: {"pointer": "alias.com"}

URL Redirects

GET    /api/v1/domains/{domain}/redirects
POST   /api/v1/domains/{domain}/redirects
PUT    /api/v1/domains/{domain}/redirects/{source}
DELETE /api/v1/domains/{domain}/redirects/{source}

Create:

{
  "source": "/old-path",
  "destination": "https://example.com/new-path",
  "type": "301"
}

Hotlink Protection

GET /api/v1/domains/{domain}/hotlink
PUT /api/v1/domains/{domain}/hotlink
{
  "enabled": true,
  "allow_direct": false,
  "redirect_to": "https://example.com/hotlink-denied.png",
  "extensions": ["jpg", "png", "gif", "mp4"]
}

Directory Password Protection

GET    /api/v1/domains/{domain}/protected-dirs
POST   /api/v1/domains/{domain}/protected-dirs
PUT    /api/v1/domains/{domain}/protected-dirs/{dir_id}
DELETE /api/v1/domains/{domain}/protected-dirs/{dir_id}
POST   /api/v1/domains/{domain}/protected-dirs/{dir_id}/users
DELETE /api/v1/domains/{domain}/protected-dirs/{dir_id}/users/{username}

Create:

{
  "path": "/home/john/domains/example.com/public_html/admin",
  "realm": "Admin Area"
}

Custom Error Pages

GET /api/v1/domains/{domain}/error-pages
PUT /api/v1/domains/{domain}/error-pages
{
  "404": "<h1>Page Not Found</h1>",
  "500": "<h1>Server Error</h1>"
}

HSTS

GET /api/v1/domains/{domain}/hsts
PUT /api/v1/domains/{domain}/hsts
{
  "enabled": true,
  "max_age": 31536000,
  "include_subdomains": true,
  "preload": false
}

Custom MIME Types

GET    /api/v1/domains/{domain}/mime-types
POST   /api/v1/domains/{domain}/mime-types
PUT    /api/v1/domains/{domain}/mime-types/{extension}
DELETE /api/v1/domains/{domain}/mime-types/{extension}

Create: {"extension": ".wasm", "mime_type": "application/wasm"}

Apache Handlers

GET    /api/v1/domains/{domain}/handlers
POST   /api/v1/domains/{domain}/handlers
PUT    /api/v1/domains/{domain}/handlers/{extension}
DELETE /api/v1/domains/{domain}/handlers/{extension}

Domain Statistics

GET /api/v1/domains/{name}/stats

Subdomains

List Subdomains

GET /api/v1/domains/{domain}/subdomains

Create Subdomain

POST /api/v1/domains/{domain}/subdomains
{
  "subdomain": "api",
  "php_version": "8.2",
  "custom_doc_root": ""
}

Document root will be: /home/{user}/domains/{domain}/subdomains/api

Subdomain operations

GET    /api/v1/domains/{domain}/subdomains/{subdomain}
PUT    /api/v1/domains/{domain}/subdomains/{subdomain}
DELETE /api/v1/domains/{domain}/subdomains/{subdomain}
POST   /api/v1/domains/{domain}/subdomains/{subdomain}/php
POST   /api/v1/domains/{domain}/subdomains/{subdomain}/regenerate-vhost

Subdomain Vhost

GET  /api/v1/domains/{domain}/subdomains/{subdomain}/vhost
PUT  /api/v1/domains/{domain}/subdomains/{subdomain}/vhost
POST /api/v1/domains/{domain}/subdomains/{subdomain}/vhost/reset

Subdomain SSL

GET  /api/v1/domains/{domain}/subdomains/{subdomain}/ssl
POST /api/v1/domains/{domain}/subdomains/{subdomain}/ssl/issue
POST /api/v1/domains/{domain}/subdomains/{subdomain}/ssl/renew
DELETE /api/v1/domains/{domain}/subdomains/{subdomain}/ssl
PUT  /api/v1/domains/{domain}/subdomains/{subdomain}/ssl/auto-renew

Admin: Webserver Operations

POST /api/v1/admin/webserver/reload   # Admin only
POST /api/v1/admin/webserver/test     # Admin only

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