Autenticación
La API utiliza sesiones PHP (cookie PHPSESSID). Inicia sesión en /login.php y la cookie de sesión se enviará automáticamente en cada petición del mismo dominio.
Todas las peticiones POST requieren incluir el token CSRF en el cuerpo:
POST /api/music.php?action=<action>
Content-Type: application/x-www-form-urlencoded
csrf_token=<token>¶m1=valor1&...
El token CSRF se puede obtener del formulario HTML o mediante una petición GET a la app.
Base URL
https://skynex.es/api/music.php
Formato de respuesta
Todas las respuestas son application/json con la estructura:
{ "ok": true, ... } // éxito
{ "ok": false, "error": "mensaje" } // error
Tracks
GET?action=track&id={id}
Obtiene los detalles de un track por su ID.
| Param | Tipo | Descripción |
| id | int | ID del track |
GET?action=search&q={query}&limit={n}&offset={n}
Busca tracks públicos por título, artista o álbum.
| Param | Tipo | Descripción |
| q | string | Texto de búsqueda |
| limit | int | Máx. resultados (por defecto 20, máx. 50) |
| offset | int | Desplazamiento para paginación |
GET?action=my_tracks
Devuelve los tracks del usuario autenticado.
GET?action=user_tracks&username={user}
Devuelve los tracks públicos de otro usuario (perfil público).
| Param | Tipo | Descripción |
| username | string | Nombre de usuario |
GET?action=recent_tracks&limit={n}
Tracks públicos más recientes de toda la plataforma.
POST?action=upload
Sube un nuevo track de audio. Enviar como multipart/form-data.
| Param | Tipo | Descripción |
| file | file | Archivo de audio (MP3, FLAC, WAV, OGG, M4A, AAC — máx. 50MB) |
| title | string | Título del track |
| artist | string | Artista |
| album | string | Álbum (opcional) |
| genre | string | Género (opcional) |
| is_public | int | 1 = público, 0 = privado |
POST?action=play
Registra una reproducción.
| Param | Tipo | Descripción |
| track_id | int | ID del track reproducido |
| playlist_id | int | ID de la playlist (opcional) |
| duration | int | Segundos escuchados |
POST?action=delete_track
Elimina un track propio (o cualquiera si eres superadmin).
| Param | Tipo | Descripción |
| track_id | int | ID del track a eliminar |
Playlists
GET?action=my_playlists
Devuelve las playlists del usuario autenticado.
GET?action=playlist&id={id}
Obtiene una playlist con sus tracks.
POST?action=create_playlist
Crea una nueva playlist.
| Param | Tipo | Descripción |
| title | string | Nombre de la playlist |
| description | string | Descripción (opcional) |
| visibility | string | public | private | unlisted |
POST?action=add_to_playlist
Añade un track a una playlist.
| Param | Tipo | Descripción |
| playlist_id | int | ID de la playlist |
| track_id | int | ID del track |
Perfil de usuario
GET?action=profile&username={user}
Obtiene el perfil público de un usuario.
GET?action=search_users&q={query}
Busca usuarios con perfil público por nombre o username.
POST?action=update_profile
Actualiza el perfil del usuario autenticado.
| Param | Tipo | Descripción |
| display_name | string | Nombre para mostrar (máx. 60 chars) |
| bio | string | Biografía (máx. 300 chars) |
| location | string | Ubicación (máx. 100 chars) |
| website | string | URL personal (máx. 200 chars) |
POST?action=upload_cover
Sube imagen de portada para track, playlist o avatar de usuario. Enviar como multipart/form-data.
| Param | Tipo | Descripción |
| image | file | Imagen (JPG, PNG, WEBP — máx. 5MB) |
| type | string | user | track | playlist |
| id | int | ID del recurso (user_id / track_id / playlist_id) |
Códigos de respuesta
| Campo | Descripción |
| ok: true | La operación se realizó con éxito |
| ok: false | Se produjo un error — ver campo error o msg |
| restricted: true | El recurso existe pero el perfil es privado |
La API devuelve siempre HTTP 200. Los errores se indican en el JSON con ok: false.
API v1.0 — SKYNEX 1.0.0 — 2026