https://github.com/pointedsec/yt-converter-api
A Go-based REST API for YouTube video conversion and management with user authentication, admin controls, and video format selection capabilities. Built with Fiber framework, SQLite and Python (yt-dlp).
https://github.com/pointedsec/yt-converter-api
admin-panel docker fiber go-fiber golang golang-api jwt jwt-authentication rest-api sqlite user-management video-processing youtube-api youtube-api-video-converter youtube-downloader
Last synced: 2 months ago
JSON representation
A Go-based REST API for YouTube video conversion and management with user authentication, admin controls, and video format selection capabilities. Built with Fiber framework, SQLite and Python (yt-dlp).
- Host: GitHub
- URL: https://github.com/pointedsec/yt-converter-api
- Owner: pointedsec
- License: mit
- Created: 2025-03-17T12:50:23.000Z (7 months ago)
- Default Branch: main
- Last Pushed: 2025-07-25T21:09:57.000Z (2 months ago)
- Last Synced: 2025-07-26T04:39:04.883Z (2 months ago)
- Topics: admin-panel, docker, fiber, go-fiber, golang, golang-api, jwt, jwt-authentication, rest-api, sqlite, user-management, video-processing, youtube-api, youtube-api-video-converter, youtube-downloader
- Language: Go
- Homepage:
- Size: 52.8 MB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
```mermaid
graph TD
API[API Base: /api] --> Auth[Auth Routes]
API --> Users[Users Routes]
API --> Videos[Videos Routes]%% Auth Routes
Auth --> Login[POST /auth/login]
Login --> LoginBody[Body: Username, Password]
Login --> LoginAuth[No Auth Required]%% Users Routes
Users --> GetUsers[GET /users]
Users --> CreateUser[POST /users]
Users --> UpdateUser[PUT /users/:user_id]
Users --> DeleteUser[DELETE /users/:user_id]
Users --> GetUser[GET /users/:user_id]
Users --> GetMe[GET /users/me]
Users --> GetUserVideos[GET /users/:user_id/videos]GetUsers --> GetUsersAuth[Requires JWT + Admin]
CreateUser --> CreateUserAuth[Requires JWT + Admin]
UpdateUser --> UpdateUserAuth[Requires JWT + Admin]
DeleteUser --> DeleteUserAuth[Requires JWT + Admin]
GetUser --> GetUserAuth[Requires JWT + Admin]
GetMe --> GetMeAuth[Requires JWT]
GetUserVideos --> GetUserVideosAuth[Requires JWT + Admin]%% Videos Routes
Videos --> GetVideos[GET /videos]
Videos --> DeleteVideo[DELETE /videos/:video_id]
Videos --> AddVideo[POST /videos]
Videos --> GetVideo[GET /videos/:video_id]
Videos --> GetFormats[GET /videos/:video_id/formats]
Videos --> ProcessVideo[POST /videos/:video_id/process]
Videos --> GetStatus[GET /videos/:video_id/status]
Videos --> DownloadVideo[GET /videos/:video_id/download]GetVideos --> GetVideosAuth[Requires JWT + Admin]
DeleteVideo --> DeleteVideoAuth[Requires JWT + Admin]
AddVideo --> AddVideoAuth[Requires JWT]
GetVideo --> GetVideoAuth[Requires JWT]
GetFormats --> GetFormatsAuth[Requires JWT]
ProcessVideo --> ProcessVideoAuth[Requires JWT]
GetStatus --> GetStatusAuth[Requires JWT]
DownloadVideo --> DownloadVideoAuth[Requires JWT]AddVideo --> AddVideoBody[Body: url]
ProcessVideo --> ProcessVideoBody[Body: Resolution, IsAudio]%% Cookies Routes
Cookies --> GetCookiesInfo[GET /cookies]
Cookies --> DeleteCookiesFile[DELETE /cookies]
Cookies --> UploadCookies[POST /cookies]
```
# Documentación de Rutas de la API## Estructura Base
Todas las rutas comienzan con el prefijo `/api`## Autenticación
- Todas las rutas excepto `/api/auth/login` requieren autenticación JWT
- Los tokens JWT deben incluirse en el header de la petición como `Authorization: Bearer `
- Las rutas marcadas como "Admin" requieren que el usuario tenga el rol de administrador## Auth Routes
### POST /api/auth/login
- Autenticación: No requerida
- Body:
```json
{
"username": "string",
"password": "string"
}
```
- Respuesta: Token JWT## Users Routes
### GET /api/users
- Autenticación: JWT + Admin
- Respuesta: Lista de usuarios### POST /api/users
- Autenticación: JWT + Admin
- Body:
```json
{
"username": "string",
"password": "string",
"role": "string",
"active": "boolean"
}
```
- Respuesta: Detalles del usuario creado### PUT /api/users/:user_id
- Autenticación: JWT + Admin
- Parámetros URL: user_id
- Body:
```json
{
"username": "string",
"password": "string",
"role": "string"
}
```
- Respuesta: Detalles del usuario actualizado### DELETE /api/users/:user_id
- Autenticación: JWT + Admin
- Parámetros URL: user_id
- Nota: Solo desactiva el usuario
- Parámetro Opcional: forceDelete=true -> Borra videos, videos procesados y videos almacenados de este usuario
- Respuesta: Mensaje de confirmación### GET /api/users/:user_id
- Autenticación: JWT + Admin
- Parámetros URL: user_id
- Respuesta: Detalles del usuario### GET /api/users/me
- Autenticación: JWT
- Respuesta: Usuario actual y sus videos### GET /api/users/:user_id/videos
- Autenticación: JWT + Admin
- Parámetros URL: user_id
- Respuesta: Videos del usuario## Videos Routes
### GET /api/videos
- Autenticación: JWT + Admin
- Respuesta: Lista de todos los videos### DELETE /api/videos/:video_id
- Autenticación: JWT + Admin
- Parámetros URL: video_id
- Respuesta: Mensaje de confirmación### POST /api/videos
- Autenticación: JWT
- Body:
```json
{
"url": "string (YouTube URL)"
}
```
- Respuesta: Detalles del video agregado### GET /api/videos/:video_id
- Autenticación: JWT
- Parámetros URL: video_id
- Respuesta: Detalles del video### GET /api/videos/:video_id/formats
- Autenticación: JWT
- Parámetros URL: video_id
- Respuesta: Lista de formatos/resoluciones disponibles para el video### POST /api/videos/:video_id/process
- Autenticación: JWT
- Parámetros URL: video_id
- Body:
```json
{
"Resolution": "string",
"IsAudio": false -> Para procesar un video en MP3, marcar en true
}
```
- Respuesta: Mensaje de confirmación del inicio del procesamiento### GET /api/videos/:video_id/status
- Autenticación: JWT
- Parámetros URL: video_id
- Respuesta: Estado actual del procesamiento del video### GET /api/videos/:video_id/download
- Autenticación: JWT
- Parámetros URL: video_id
- Query Params: resolution
- Respuesta: Archivo de video descargable## Cookies Routes
### GET /api/cookies
- Autenticación: JWT + Admin
- Respuesta: Información sobre si existe un archivo cookies.txt### DELETE /cookies
- Autenticación: JWT + Admin
- Respuesta: Borra el archivo cookies.txt si existe### POST /cookies
- Autenticación: JWT
- Body: www-form data -> Archivo cookies.txt llamado "cookies"
```
- Respuesta: Sube el archivo cookies.txt para usarlo con la librería de Python## Notas Adicionales
- Las respuestas de error incluyen un mensaje descriptivo en el campo "error"
- Los formatos de video soportados son los que acepta youtube-dl
- Las URLs deben ser válidas y corresponder a videos de YouTube
- El procesamiento de videos es asíncrono
- El estado de procesamiento puede ser: "processing", "completed" o "failed"
- Para procesar un video en MP3 establecer el parámetro `IsAudio` por POST a /api/videos/:video_id/process, si se quiere procesar el video en formato mp4 simplemente establecer el parámetro `Resolution` eligiendo la resolución deseada de `/api/videos/:video_id/formats`# License
This project is licensed under the MIT License - see the LICENSE file for details.