Endpoints de Hosting
El módulo de hosting expone una API REST completa bajo el prefijo
/hosting/api/rest/. Todos los endpoints requieren autenticación y filtran
automáticamente los resultados por el tenant activo del usuario.
Sitios Web — /hosting/api/rest/sites/
Gestión completa de sitios web alojados. Cada sitio se sincroniza con el motor de hosting.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar sitios del tenant |
|
|
Crear nuevo sitio web |
|
|
Detalle de un sitio |
|
|
Actualizar sitio completo |
|
|
Actualizar campos parciales |
|
|
Eliminar sitio (soft delete) |
|
|
Solicitar certificado SSL Let’s Encrypt |
|
|
Provisionar sitio completo (site + DNS + mail + FTP + DB) |
|
|
Instalar CMS (WordPress, Joomla, PrestaShop) |
|
|
Listar CMS disponibles para auto-instalación |
Ejemplo — Listar sitios:
curl -X GET https://panel.example.com/hosting/api/rest/sites/ \
-H "Authorization: Bearer $TOKEN"
Respuesta:
{
"count": 2,
"next": null,
"previous": null,
"results": [
{
"id": 1,
"tenant": 1,
"tenant_name": "Mi Empresa",
"domain": "example.com",
"hosting_site_id": 5,
"ip_address": "*",
"document_root": "/var/www/clients/client1/web1",
"is_active": true,
"ssl_enabled": true,
"created_at": "2026-01-10T08:00:00Z",
"updated_at": "2026-01-15T14:30:00Z"
}
]
}
Ejemplo — Crear sitio:
curl -X POST https://panel.example.com/hosting/api/rest/sites/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{"domain": "nuevo.com", "ip_address": "*"}'
Ejemplo — Provisionar sitio completo (all-in-one):
curl -X POST https://panel.example.com/hosting/api/rest/sites/provision_full/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"domain": "miempresa.com",
"create_dns": true,
"create_mail": true,
"create_ftp": true,
"create_db": true,
"create_traefik": true
}'
Bases de Datos — /hosting/api/rest/databases/
Gestión de bases de datos MySQL provisionadas a través del motor de hosting.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar bases de datos |
|
|
Crear nueva base de datos |
|
|
Detalle de una base de datos |
|
|
Eliminar base de datos |
Ejemplo — Respuesta de base de datos:
{
"id": 3,
"tenant": 1,
"tenant_name": "Mi Empresa",
"name": "wp_miempresa",
"hosting_database_id": 12,
"db_user": "wp_user_12",
"db_password": null,
"is_active": true,
"created_at": "2026-01-12T09:00:00Z",
"updated_at": "2026-01-12T09:00:00Z"
}
Zonas DNS — /hosting/api/rest/dns-zones/
Gestión de zonas DNS. Cada zona corresponde a un dominio y contiene registros DNS.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar zonas DNS |
|
|
Crear nueva zona DNS |
|
|
Detalle de una zona |
|
|
Actualizar zona |
|
|
Eliminar zona |
|
|
Listar registros de la zona |
Ejemplo — Respuesta de zona DNS:
{
"id": 1,
"tenant": 1,
"tenant_name": "Mi Empresa",
"origin": "example.com.",
"hosting_zone_id": 8,
"ns_primary": "ns1.example.com.",
"admin_email": "admin.example.com.",
"ttl": 86400,
"records_count": 5,
"is_active": true,
"created_at": "2026-01-10T08:00:00Z",
"updated_at": "2026-01-10T08:00:00Z"
}
Registros DNS — /hosting/api/rest/dns-records/
Gestión individual de registros DNS dentro de zonas. Soporta tipos A, AAAA, CNAME, MX, TXT, NS, SRV, CAA y PTR.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar registros DNS |
|
|
Crear nuevo registro |
|
|
Detalle de un registro |
|
|
Actualizar registro |
|
|
Eliminar registro |
Ejemplo — Crear registro A:
curl -X POST https://panel.example.com/hosting/api/rest/dns-records/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"zone": 1,
"record_type": "A",
"name": "www",
"data": "203.0.113.10",
"ttl": 3600
}'
Respuesta:
{
"id": 7,
"zone": 1,
"zone_origin": "example.com.",
"record_type": "A",
"name": "www",
"data": "203.0.113.10",
"priority": 10,
"ttl": 3600,
"hosting_record_id": 42,
"is_active": true,
"created_at": "2026-02-01T10:00:00Z",
"updated_at": "2026-02-01T10:00:00Z"
}
Buzones de Email — /hosting/api/rest/mailboxes/
Gestión de buzones de correo electrónico con soporte IMAP/POP3/SMTP.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar buzones |
|
|
Crear nuevo buzón |
|
|
Detalle de un buzón |
|
|
Actualizar buzón (password, nombre, cuota) |
|
|
Eliminar buzón |
Ejemplo — Crear buzón:
curl -X POST https://panel.example.com/hosting/api/rest/mailboxes/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"mail_domain": 1,
"local_part": "info",
"name": "Info Empresa",
"password": "SecureP@ss123",
"quota_mb": 500
}'
Respuesta:
{
"id": 5,
"tenant": 1,
"tenant_name": "Mi Empresa",
"mail_domain": 1,
"mail_domain_name": "example.com",
"email": "info@example.com",
"local_part": "info",
"name": "Info Empresa",
"hosting_mailbox_id": 23,
"quota_mb": 500,
"imap_enabled": true,
"pop3_enabled": true,
"smtp_enabled": true,
"is_active": true,
"created_at": "2026-02-01T12:00:00Z",
"updated_at": "2026-02-01T12:00:00Z"
}
Cuentas FTP — /hosting/api/rest/ftp-accounts/
Gestión de cuentas FTP asociadas a sitios web.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar cuentas FTP |
|
|
Crear cuenta FTP |
|
|
Detalle de una cuenta FTP |
|
|
Actualizar cuenta (password, directorio, cuota) |
|
|
Eliminar cuenta FTP |
Ejemplo — Crear cuenta FTP:
{
"site": 1,
"username": "deploy_user",
"password": "FtpP@ss456",
"directory": "/web",
"quota_mb": 1024
}
Certificados SSL — /hosting/api/rest/ssl-certificates/
Gestión de certificados SSL, con soporte para Let’s Encrypt automático.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar certificados |
|
|
Crear y solicitar certificado |
|
|
Eliminar certificado |
|
|
Solicitar Let’s Encrypt |
|
|
Renovar certificado |
Respuesta de certificado:
{
"id": 2,
"site": 1,
"site_domain": "example.com",
"cert_type": "letsencrypt",
"domain": "example.com",
"expires_at": "2026-06-15T00:00:00Z",
"is_active": true,
"auto_renew": true,
"is_expired": false,
"days_until_expiry": 127,
"created_at": "2026-01-15T10:00:00Z",
"updated_at": "2026-01-15T10:00:00Z"
}
Otros Endpoints de Hosting
Paquetes — /hosting/api/rest/packages/
Lectura para todos los usuarios autenticados, escritura solo para admins.
Tenants — /hosting/api/rest/tenants/
Gestión de tenants (organizaciones). Incluye acciones:
POST /hosting/api/rest/tenants/{id}/sync/— Sincronizar con el motor de hostingGET /hosting/api/rest/tenants/{id}/stats/— Estadísticas de uso
Dominios de Email — /hosting/api/rest/mail-domains/
CRUD completo de dominios de email.
Alias de Email — /hosting/api/rest/mail-aliases/
CRUD de alias de email (redirecciones).
Usuarios Shell — /hosting/api/rest/shell-users/
Gestión de usuarios SSH/shell asociados a sitios web.
Configuración WhiteLabel — /hosting/api/rest/whitelabel/
Gestión de configuración de marca blanca por tenant. Permite a los administradores personalizar el aspecto del panel (logos, colores, textos, CSS y dominio personalizado) para cada organización. Solo accesible para administradores; los superusuarios ven todas las configuraciones, los administradores de tenant solo la de su propio tenant.
Método |
Endpoint |
Descripción |
|---|---|---|
|
|
Listar configuraciones de marca blanca |
|
|
Crear configuración de marca blanca |
|
|
Detalle de una configuración |
|
|
Actualizar configuración completa |
|
|
Actualizar campos parciales |
|
|
Eliminar configuración |
Campos
Campo |
Tipo |
Descripción |
|---|---|---|
|
int |
Identificador único (solo lectura) |
|
int |
ID del tenant asociado |
|
string |
Nombre de marca (sustituye «NoxPanel» en el panel) |
|
URL |
URL del logo personalizado |
|
URL |
URL del favicon personalizado |
|
string |
Color primario en formato hex (ej: |
|
string |
Color secundario en formato hex (ej: |
|
string |
Color de fondo del sidebar (ej: |
|
string |
Color del texto del sidebar (ej: |
|
text |
CSS personalizado inyectado en el panel |
|
string |
Texto del pie de página |
|
URL |
URL del enlace del pie de página |
|
string |
Nombre del remitente en emails |
|
Dirección email del remitente |
|
|
string |
Dominio personalizado del panel (ej: |
|
bool |
Si la configuración está activa |
|
datetime |
Fecha de creación (solo lectura) |
|
datetime |
Fecha de última actualización (solo lectura) |
Ejemplo — Crear configuración de marca blanca:
curl -X POST https://panel.example.com/hosting/api/rest/whitelabel/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"tenant": 1,
"brand_name": "Mi Hosting Pro",
"logo_url": "https://cdn.mihosting.com/logo.png",
"favicon_url": "https://cdn.mihosting.com/favicon.ico",
"primary_color": "#2563EB",
"secondary_color": "#059669",
"sidebar_bg_color": "#111827",
"sidebar_text_color": "#F3F4F6",
"footer_text": "Mi Hosting Pro - Todos los derechos reservados",
"footer_url": "https://mihosting.com",
"email_from_name": "Mi Hosting Pro",
"email_from_address": "noreply@mihosting.com",
"custom_panel_domain": "panel.mihosting.com"
}'
Respuesta (201 Created):
{
"id": 1,
"tenant": 1,
"brand_name": "Mi Hosting Pro",
"logo_url": "https://cdn.mihosting.com/logo.png",
"favicon_url": "https://cdn.mihosting.com/favicon.ico",
"primary_color": "#2563EB",
"secondary_color": "#059669",
"sidebar_bg_color": "#111827",
"sidebar_text_color": "#F3F4F6",
"custom_css": "",
"footer_text": "Mi Hosting Pro - Todos los derechos reservados",
"footer_url": "https://mihosting.com",
"email_from_name": "Mi Hosting Pro",
"email_from_address": "noreply@mihosting.com",
"custom_panel_domain": "panel.mihosting.com",
"is_active": true,
"created_at": "2026-02-09T10:00:00Z",
"updated_at": "2026-02-09T10:00:00Z"
}
Ejemplo — Actualizar colores:
curl -X PATCH https://panel.example.com/hosting/api/rest/whitelabel/1/ \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"primary_color": "#7C3AED",
"custom_css": ".navbar { border-bottom: 2px solid #7C3AED; }"
}'
Note
Cada tenant solo puede tener una configuración de marca blanca (relación OneToOne). Si se intenta crear una segunda configuración para el mismo tenant, se producirá un error de unicidad.