{"id":29927616,"url":"https://github.com/pointedsec/yt-converter-api","last_synced_at":"2025-08-02T13:12:14.132Z","repository":{"id":306503096,"uuid":"949980226","full_name":"pointedsec/yt-converter-api","owner":"pointedsec","description":"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).","archived":false,"fork":false,"pushed_at":"2025-07-25T21:09:57.000Z","size":55325,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-26T04:39:04.883Z","etag":null,"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"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pointedsec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-03-17T12:50:23.000Z","updated_at":"2025-07-25T21:10:01.000Z","dependencies_parsed_at":"2025-07-26T04:49:18.970Z","dependency_job_id":null,"html_url":"https://github.com/pointedsec/yt-converter-api","commit_stats":null,"previous_names":["pointedsec/yt-converter-api"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/pointedsec/yt-converter-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pointedsec%2Fyt-converter-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pointedsec%2Fyt-converter-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pointedsec%2Fyt-converter-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pointedsec%2Fyt-converter-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pointedsec","download_url":"https://codeload.github.com/pointedsec/yt-converter-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pointedsec%2Fyt-converter-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":268394282,"owners_count":24243394,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-02T02:00:12.353Z","response_time":74,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["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"],"created_at":"2025-08-02T13:12:10.747Z","updated_at":"2025-08-02T13:12:14.116Z","avatar_url":"https://github.com/pointedsec.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"```mermaid\ngraph TD\n    API[API Base: /api] --\u003e Auth[Auth Routes]\n    API --\u003e Users[Users Routes]\n    API --\u003e Videos[Videos Routes]\n\n    %% Auth Routes\n    Auth --\u003e Login[POST /auth/login]\n    Login --\u003e LoginBody[Body: Username, Password]\n    Login --\u003e LoginAuth[No Auth Required]\n\n    %% Users Routes\n    Users --\u003e GetUsers[GET /users]\n    Users --\u003e CreateUser[POST /users]\n    Users --\u003e UpdateUser[PUT /users/:user_id]\n    Users --\u003e DeleteUser[DELETE /users/:user_id]\n    Users --\u003e GetUser[GET /users/:user_id]\n    Users --\u003e GetMe[GET /users/me]\n    Users --\u003e GetUserVideos[GET /users/:user_id/videos]\n\n    GetUsers --\u003e GetUsersAuth[Requires JWT + Admin]\n    CreateUser --\u003e CreateUserAuth[Requires JWT + Admin]\n    UpdateUser --\u003e UpdateUserAuth[Requires JWT + Admin]\n    DeleteUser --\u003e DeleteUserAuth[Requires JWT + Admin]\n    GetUser --\u003e GetUserAuth[Requires JWT + Admin]\n    GetMe --\u003e GetMeAuth[Requires JWT]\n    GetUserVideos --\u003e GetUserVideosAuth[Requires JWT + Admin]\n\n    %% Videos Routes\n    Videos --\u003e GetVideos[GET /videos]\n    Videos --\u003e DeleteVideo[DELETE /videos/:video_id]\n    Videos --\u003e AddVideo[POST /videos]\n    Videos --\u003e GetVideo[GET /videos/:video_id]\n    Videos --\u003e GetFormats[GET /videos/:video_id/formats]\n    Videos --\u003e ProcessVideo[POST /videos/:video_id/process]\n    Videos --\u003e GetStatus[GET /videos/:video_id/status]\n    Videos --\u003e DownloadVideo[GET /videos/:video_id/download]\n\n    GetVideos --\u003e GetVideosAuth[Requires JWT + Admin]\n    DeleteVideo --\u003e DeleteVideoAuth[Requires JWT + Admin]\n    AddVideo --\u003e AddVideoAuth[Requires JWT]\n    GetVideo --\u003e GetVideoAuth[Requires JWT]\n    GetFormats --\u003e GetFormatsAuth[Requires JWT]\n    ProcessVideo --\u003e ProcessVideoAuth[Requires JWT]\n    GetStatus --\u003e GetStatusAuth[Requires JWT]\n    DownloadVideo --\u003e DownloadVideoAuth[Requires JWT]\n\n    AddVideo --\u003e AddVideoBody[Body: url]\n    ProcessVideo --\u003e ProcessVideoBody[Body: Resolution, IsAudio]\n\n    %% Cookies Routes\n    Cookies --\u003e GetCookiesInfo[GET /cookies]\n    Cookies --\u003e DeleteCookiesFile[DELETE /cookies]\n    Cookies --\u003e UploadCookies[POST /cookies]\n```\n# Documentación de Rutas de la API\n\n## Estructura Base\nTodas las rutas comienzan con el prefijo `/api`\n\n## Autenticación\n- Todas las rutas excepto `/api/auth/login` requieren autenticación JWT\n- Los tokens JWT deben incluirse en el header de la petición como `Authorization: Bearer \u003ctoken\u003e`\n- Las rutas marcadas como \"Admin\" requieren que el usuario tenga el rol de administrador\n\n## Auth Routes\n\n### POST /api/auth/login\n- Autenticación: No requerida\n- Body:\n```json\n{\n  \"username\": \"string\",\n  \"password\": \"string\"\n}\n```\n- Respuesta: Token JWT\n\n## Users Routes\n\n### GET /api/users\n- Autenticación: JWT + Admin\n- Respuesta: Lista de usuarios\n\n### POST /api/users\n- Autenticación: JWT + Admin\n- Body:\n```json\n{\n  \"username\": \"string\",\n  \"password\": \"string\",\n  \"role\": \"string\",\n  \"active\": \"boolean\"\n}\n```\n- Respuesta: Detalles del usuario creado\n\n### PUT /api/users/:user_id\n- Autenticación: JWT + Admin\n- Parámetros URL: user_id\n- Body:\n```json\n{\n  \"username\": \"string\",\n  \"password\": \"string\",\n  \"role\": \"string\"\n}\n```\n- Respuesta: Detalles del usuario actualizado\n\n### DELETE /api/users/:user_id\n- Autenticación: JWT + Admin\n- Parámetros URL: user_id\n- Nota: Solo desactiva el usuario\n- Parámetro Opcional: forceDelete=true -\u003e Borra videos, videos procesados y videos almacenados de este usuario\n- Respuesta: Mensaje de confirmación\n\n### GET /api/users/:user_id\n- Autenticación: JWT + Admin\n- Parámetros URL: user_id\n- Respuesta: Detalles del usuario\n\n### GET /api/users/me\n- Autenticación: JWT\n- Respuesta: Usuario actual y sus videos\n\n### GET /api/users/:user_id/videos\n- Autenticación: JWT + Admin\n- Parámetros URL: user_id\n- Respuesta: Videos del usuario\n\n## Videos Routes\n\n### GET /api/videos\n- Autenticación: JWT + Admin\n- Respuesta: Lista de todos los videos\n\n### DELETE /api/videos/:video_id\n- Autenticación: JWT + Admin\n- Parámetros URL: video_id\n- Respuesta: Mensaje de confirmación\n\n### POST /api/videos\n- Autenticación: JWT\n- Body:\n```json\n{\n  \"url\": \"string (YouTube URL)\"\n}\n```\n- Respuesta: Detalles del video agregado\n\n### GET /api/videos/:video_id\n- Autenticación: JWT\n- Parámetros URL: video_id\n- Respuesta: Detalles del video\n\n### GET /api/videos/:video_id/formats\n- Autenticación: JWT\n- Parámetros URL: video_id\n- Respuesta: Lista de formatos/resoluciones disponibles para el video\n\n### POST /api/videos/:video_id/process\n- Autenticación: JWT\n- Parámetros URL: video_id\n- Body:\n```json\n{\n  \"Resolution\": \"string\",\n  \"IsAudio\": false -\u003e Para procesar un video en MP3, marcar en true\n}\n```\n- Respuesta: Mensaje de confirmación del inicio del procesamiento\n\n### GET /api/videos/:video_id/status\n- Autenticación: JWT\n- Parámetros URL: video_id\n- Respuesta: Estado actual del procesamiento del video\n\n### GET /api/videos/:video_id/download\n- Autenticación: JWT\n- Parámetros URL: video_id\n- Query Params: resolution\n- Respuesta: Archivo de video descargable\n\n## Cookies Routes\n\n### GET /api/cookies\n- Autenticación: JWT + Admin\n- Respuesta: Información sobre si existe un archivo cookies.txt\n\n### DELETE /cookies\n- Autenticación: JWT + Admin\n- Respuesta: Borra el archivo cookies.txt si existe\n\n### POST /cookies\n- Autenticación: JWT\n- Body: www-form data -\u003e Archivo cookies.txt llamado \"cookies\"\n```\n- Respuesta: Sube el archivo cookies.txt para usarlo con la librería de Python\n\n## Notas Adicionales\n- Las respuestas de error incluyen un mensaje descriptivo en el campo \"error\"\n- Los formatos de video soportados son los que acepta youtube-dl\n- Las URLs deben ser válidas y corresponder a videos de YouTube\n- El procesamiento de videos es asíncrono\n- El estado de procesamiento puede ser: \"processing\", \"completed\" o \"failed\" \n- 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`\n\n# License\nThis project is licensed under the MIT License - see the LICENSE file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpointedsec%2Fyt-converter-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpointedsec%2Fyt-converter-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpointedsec%2Fyt-converter-api/lists"}