Version: 1.X.X
HiTechCloud API
HiTechCloud exposes a full REST API that mirrors all web UI functionality. Every feature available in the panel can be accessed programmatically.
Authentication
All API requests require a Bearer token obtained via the login endpoint.
Step 1 — Get a token:
curl -s -X POST https://panel.example.com/api/login \
-H "Content-Type: application/json" \
-d '{"username": "stefan", "password": "yourpassword"}'
Response:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 86400
}
Step 2 — Use it on every request:
curl https://panel.example.com/api/account \
-H "Authorization: Bearer eyJhbGciOi..."
Tokens expire after 24 hours. Both api feature AND the specific feature must be enabled in the user's plan.
MySQL
List databases and users
GET /api/mysql
Authorization: Bearer <token>
{
"databases": ["mydb", "shop"],
"users": [{"username": "myuser", "host": "%"}]
}
Create a database
POST /api/mysql
Content-Type: application/json
{"name": "newdb"}
Get database info
GET /api/mysql/mydb
Drop a database
DELETE /api/mysql/mydb
List users for a database
GET /api/mysql/mydb/users
Add user to database
POST /api/mysql/mydb/users
Content-Type: application/json
{"username": "dbuser", "password": "securepass"}
Remove user from database
DELETE /api/mysql/mydb/users/dbuser
PostgreSQL
List databases and users
GET /api/postgresql
Create a database
POST /api/postgresql
Content-Type: application/json
{"name": "pgdb"}
Drop a database
DELETE /api/postgresql/pgdb
List all users
GET /api/postgresql/users
Create a user
POST /api/postgresql/users
Content-Type: application/json
{"username": "pguser", "password": "securepass"}
Drop a user
DELETE /api/postgresql/users/pguser
Assign user to database
POST /api/postgresql/pgdb/assign/pguser
Revoke user from database
DELETE /api/postgresql/pgdb/revoke/pguser
Domains
List all domains
GET /api/domains
{
"domains": [
{"domain_id": 1, "domain_url": "example.com", "docroot": "/var/www/html"}
]
}
Add a domain
POST /api/domains
Content-Type: application/json
{"domain": "newdomain.com"}
Remove a domain
DELETE /api/domains/olddomain.com
Get SSL status
GET /api/domains/example.com/ssl
Issue / renew SSL
POST /api/domains/example.com/ssl
Email
List mailboxes
GET /api/emails
Create mailbox
POST /api/emails
Content-Type: application/json
{"email": "info@example.com", "password": "mailpass123"}
Get mailbox details
GET /api/emails/info@example.com
Change mailbox password
PATCH /api/emails/info@example.com
Content-Type: application/json
{"password": "newpass456"}
Delete mailbox
DELETE /api/emails/info@example.com
List aliases
GET /api/emails/aliases
Create alias
POST /api/emails/aliases
Content-Type: application/json
{"source": "alias@example.com", "destination": "real@example.com"}
Delete alias
DELETE /api/emails/aliases/alias@example.com
Get catch-all address
GET /api/emails/default/example.com
Set catch-all address
PUT /api/emails/default/example.com
Content-Type: application/json
{"address": "catchall@example.com"}
Check deliverability (all domains)
GET /api/emails/deliverability
Check deliverability for a domain
GET /api/emails/deliverability/example.com
Get Sieve mail filters
GET /api/emails/filters/user@example.com
Update Sieve filters
PUT /api/emails/filters/user@example.com
Content-Type: application/json
{"rules": "require [\"fileinto\"];\nif header :contains \"Subject\" \"SPAM\" { fileinto \"Junk\"; }"}
FTP
List FTP accounts
GET /api/ftp
Create FTP account
POST /api/ftp
Content-Type: application/json
{"username": "ftpuser", "password": "ftppass", "path": "/var/www/html"}
Delete FTP account
DELETE /api/ftp/ftpuser
Change FTP password
PATCH /api/ftp/ftpuser/password
Content-Type: application/json
{"password": "newftppass"}
Change FTP home path
PATCH /api/ftp/ftpuser/path
Content-Type: application/json
{"path": "/var/www/html/subdir"}
List active FTP connections
GET /api/ftp/connections
Cron Jobs
List all cron jobs
GET /api/crons
{
"jobs": [
{"schedule": "0 * * * *", "command": "/usr/bin/php /var/www/html/cron.php", "valid": true}
]
}
Create a cron job
POST /api/crons
Content-Type: application/json
{"schedule": "*/5 * * * *", "command": "/usr/bin/php /var/www/html/run.php"}
Edit a cron job
PATCH /api/crons
Content-Type: application/json
{
"original_schedule": "*/5 * * * *",
"original_command": "/usr/bin/php /var/www/html/run.php",
"schedule": "0 */2 * * *",
"command": "/usr/bin/php /var/www/html/run.php"
}
Delete a cron job
DELETE /api/crons
Content-Type: application/json
{"schedule": "*/5 * * * *", "command": "/usr/bin/php /var/www/html/run.php"}
Get raw crontab
GET /api/crons/raw
Save raw crontab
PUT /api/crons/raw
Content-Type: application/json
{"content": "0 * * * * /usr/bin/php /var/www/html/cron.php\n"}
Tail cron log
GET /api/crons/log?lines=50&job=cron.php
Cache Services
Each cache service exposes two endpoints: status and action.
Redis
GET /api/cache/redis
POST /api/cache/redis
Content-Type: application/json
{"action": "enable"} # enable | disable | restart
Valkey / Memcached / Elasticsearch / OpenSearch
Same pattern, replace redis with the service name:
GET /api/cache/valkey
POST /api/cache/valkey {"action": "disable"}
GET /api/cache/memcached
POST /api/cache/memcached {"action": "restart"}
GET /api/cache/elasticsearch
POST /api/cache/elasticsearch {"action": "enable"}
GET /api/cache/opensearch
POST /api/cache/opensearch {"action": "enable"}
Varnish
# Status + domain list
GET /api/cache/varnish
# Enable/disable
POST /api/cache/varnish
{"action": "enable"}
# Hit ratio and traffic stats
GET /api/cache/varnish/stats
# Per-domain Varnish status
GET /api/cache/varnish/domains
# Toggle Varnish for a specific domain
POST /api/cache/varnish/domains/example.com
{"status": "On"}
Docker / Containers
List compose services
GET /api/containers
List running containers
GET /api/containers/status
Get single container state
GET /api/containers/nginx/status
Start / stop / restart
POST /api/containers/nginx/start
POST /api/containers/nginx/stop
POST /api/containers/nginx/restart
Start with optional pull:
POST /api/containers/nginx/start
{"pull": true}
Update CPU/RAM limits
PATCH /api/containers/myapp/resources
Content-Type: application/json
{"cpu": "1", "ram": "512m"}
Tail container logs
GET /api/containers/nginx/logs?lines=200
WAF (Web Application Firewall)
Status for all domains
GET /api/waf
Status for a domain
GET /api/waf/example.com
Toggle WAF on/off
POST /api/waf/example.com
Content-Type: application/json
{"status": "On"}
Update excluded rules
PUT /api/waf/example.com/rules
Content-Type: application/json
{
"remove_by_id": ["920170", "941100"],
"remove_by_tag": ["attack-sqli"]
}
Paginated WAF log
GET /api/waf/log/example.com?page=1&per_page=25
WAF stats
GET /api/waf/stats/example.com?seconds=3600
List rule IDs / tags
GET /api/waf/ids/ids
GET /api/waf/ids/tags
IP Blocker
List blocked IPs
GET /api/ip-blocker
Block IPs
POST /api/ip-blocker
Content-Type: application/json
{"ips": ["1.2.3.4", "10.0.0.0/8"]}
Unblock all IPs
DELETE /api/ip-blocker
PHP
List installed PHP versions
GET /api/php/versions
Get php.ini content
GET /api/php/8.2/ini
Save php.ini
PUT /api/php/8.2/ini
Content-Type: application/json
{"content": "memory_limit = 256M\nupload_max_filesize = 64M\n..."}
Get PHP option keys and values
GET /api/php/8.2/options