{"openapi": "3.0.3", "info": {"title": "EasyProxy API", "version": "2.5.0", "description": "Interactive documentation for EasyProxy. Includes HLS/MPD proxying, extractor endpoints, key and license helpers, playlist generation, and compatibility endpoints inspired by MediaFlow Proxy."}, "servers": [{"url": "http://proxy.hamster.party"}], "components": {"securitySchemes": {"ApiPasswordQuery": {"type": "apiKey", "in": "query", "name": "api_password", "description": "Primary auth method shown in docs. Header x-api-password is still accepted by the server."}}}, "paths": {"/api/info": {"get": {"summary": "Server information", "description": "Returns server status, loaded extractors, modules, and example endpoints.", "responses": {"200": {"description": "Server information JSON"}}}}, "/proxy/manifest.m3u8": {"get": {"summary": "Legacy proxy manifest", "description": "Proxy a manifest using the legacy url parameter.", "parameters": [{"name": "url", "in": "query", "schema": {"type": "string"}, "required": true}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Proxied manifest or media response"}}}}, "/proxy/hls/manifest.m3u8": {"get": {"summary": "Proxy HLS manifest", "description": "MediaFlow-compatible HLS proxy endpoint.", "parameters": [{"name": "d", "in": "query", "schema": {"type": "string"}, "required": true, "description": "Destination manifest URL"}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Proxied HLS manifest"}}}}, "/proxy/mpd/manifest.m3u8": {"get": {"summary": "Proxy MPD as HLS", "description": "Converts or relays MPEG-DASH/MPD streams through EasyProxy.", "parameters": [{"name": "d", "in": "query", "schema": {"type": "string"}, "required": true, "description": "Destination MPD URL"}, {"name": "key_id", "in": "query", "schema": {"type": "string"}}, {"name": "key", "in": "query", "schema": {"type": "string"}}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Generated HLS manifest"}}}}, "/proxy/stream": {"get": {"summary": "Generic stream proxy", "description": "Generic MediaFlow-style stream endpoint for direct proxying.", "parameters": [{"name": "d", "in": "query", "schema": {"type": "string"}, "required": true}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Streamed response"}}}}, "/extractor": {"get": {"summary": "Generic extractor", "description": "Resolve supported hosters into playable URLs.", "parameters": [{"name": "host", "in": "query", "schema": {"type": "string"}}, {"name": "url", "in": "query", "schema": {"type": "string"}}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Extractor response"}}}}, "/extractor/video": {"get": {"summary": "Extractor compatibility endpoint", "description": "MediaFlow-compatible alias for video extractor requests.", "parameters": [{"name": "host", "in": "query", "schema": {"type": "string"}}, {"name": "url", "in": "query", "schema": {"type": "string"}}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Extractor response"}}}}, "/key": {"get": {"summary": "Fetch or transform decryption keys", "description": "Proxy AES-128 keys or derive license-related key material.", "parameters": [{"name": "key_url", "in": "query", "schema": {"type": "string"}}, {"name": "key", "in": "query", "schema": {"type": "string"}}, {"name": "key_id", "in": "query", "schema": {"type": "string"}}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Key response"}}}}, "/license": {"get": {"summary": "License proxy", "description": "Proxy DRM license requests or handle ClearKey shortcuts.", "parameters": [{"name": "url", "in": "query", "schema": {"type": "string"}}, {"name": "clearkey", "in": "query", "schema": {"type": "string"}}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "License response"}}}, "post": {"summary": "License proxy POST", "description": "POST DRM license payloads to the upstream license server.", "requestBody": {"required": false, "content": {"application/octet-stream": {"schema": {"type": "string", "format": "binary"}}}}, "responses": {"200": {"description": "License response"}}}}, "/generate_urls": {"post": {"summary": "Generate proxy URLs", "description": "Generate one or multiple compatibility URLs for clients.", "requestBody": {"required": true, "content": {"application/json": {"schema": {"type": "object", "properties": {"mediaflow_proxy_url": {"type": "string"}, "api_password": {"type": "string"}, "urls": {"type": "array", "items": {"type": "object"}}}}}}}, "responses": {"200": {"description": "Generated URL list"}}}}, "/playlist": {"get": {"summary": "Build a playlist", "description": "Combine multiple source URLs into a generated playlist.", "parameters": [{"name": "url", "in": "query", "schema": {"type": "string"}, "required": true}, {"name": "api_password", "in": "query", "schema": {"type": "string"}}], "responses": {"200": {"description": "Generated playlist"}}}}, "/proxy/ip": {"get": {"summary": "Resolve public IP", "description": "Returns the public IP as seen through the configured proxy route.", "responses": {"200": {"description": "Public IP response"}}}}}}