Skip to content

VOE API Reference

Functions

from streamflow.platforms.voe import get_master_link

result = get_master_link(
    filecode: str,
    *,
    site_base_url: str | None = None,
    timeout: float = 30.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
    http_version: str | None = None,
) -> VoeMasterLink

Get the m3u8 master link for a VOE video by scraping and decrypting the player page at {site_base_url}/e/{filecode}. No API key required.

Parameters:

Parameter Type Default Description
filecode str required Video filecode (the XXXX in voe.sx/e/XXXX)
site_base_url str Nonehttps://voe.sx Site URL (player host). Do not pass the API base URL here.
timeout float 30.0 Request timeout (seconds)
tcp_proxy str None HTTP CONNECT proxy URL
udp_proxy str None SOCKS5 / UDP proxy URL
local_address str None Local bind address
http_version str None Force "HTTP/1.1", "HTTP/2", or "HTTP/3"

Returns: VoeMasterLink with streaming_url (m3u8) and optional title.

Raises: VoeAPIError if the encrypted script isn't found, decryption fails, or the decrypted config has no source field.

get_account_stats()

from streamflow.platforms.voe import get_account_stats

response = get_account_stats(
    api_key: str,
    *,
    base_url: str | None = None,
    timeout: float = 30.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
) -> AccountStatsResponse

Get account statistics.

Parameters:

Parameter Type Default Description
api_key str required API key
base_url str None Override API URL
timeout float 30.0 Request timeout
tcp_proxy str None TCP proxy
udp_proxy str None UDP proxy
local_address str None Local address

Returns: AccountStatsResponse

list_files()

from streamflow.platforms.voe import list_files

response = list_files(
    api_key: str,
    *,
    page: int = 1,
    per_page: int = 100,
    fld_id: int = 0,
    created: str | None = None,
    name: str | None = None,
    preview: bool | None = None,
    base_url: str | None = None,
    timeout: float = 30.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
) -> FileListResponse

List files in account.

Parameters:

Parameter Type Default Description
api_key str required API key
page int 1 Page number
per_page int 100 Items per page
fld_id int 0 Folder ID
created str None Filter by date
name str None Filter by name
preview bool None Include preview
base_url str None Override API URL
timeout float 30.0 Request timeout
tcp_proxy str None TCP proxy
udp_proxy str None UDP proxy
local_address str None Local address

Returns: FileListResponse

upload_from_url()

from streamflow.platforms.voe import upload_from_url

response = upload_from_url(
    api_key: str,
    url: str,
    *,
    folder_id: int | None = None,
    base_url: str | None = None,
    timeout: float = 120.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
) -> UploadUrlResponse

Upload video from URL.

Parameters:

Parameter Type Default Description
api_key str required API key
url str required Video URL
folder_id int None Folder ID
base_url str None Override API URL
timeout float 120.0 Request timeout
tcp_proxy str None TCP proxy
udp_proxy str None UDP proxy
local_address str None Local address

Returns: UploadUrlResponse

get_upload_server()

from streamflow.platforms.voe import get_upload_server

response = get_upload_server(
    api_key: str,
    *,
    base_url: str | None = None,
    timeout: float = 30.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
) -> UploadServerResponse

Get upload server URL.

Returns: UploadServerResponse

delete_files()

from streamflow.platforms.voe import delete_files

response = delete_files(
    api_key: str,
    del_code: str,
    *,
    base_url: str | None = None,
    timeout: float = 30.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
) -> FileDeleteResponse

Delete files by delete code.

Parameters:

Parameter Type Default Description
api_key str required API key
del_code str required Delete code (comma-separated)
base_url str None Override API URL
timeout float 30.0 Request timeout
tcp_proxy str None TCP proxy
udp_proxy str None UDP proxy
local_address str None Local address

Returns: FileDeleteResponse

purge_all_files()

from streamflow.platforms.voe import purge_all_files

result = purge_all_files(
    api_key: str,
    *,
    fld_id: int = 0,
    per_page: int = 100,
    batch_size: int = 50,
    base_url: str | None = None,
    timeout: float = 30.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
) -> PurgeAllResult

Delete all files in account/folder.

Parameters:

Parameter Type Default Description
api_key str required API key
fld_id int 0 Folder ID (0 = all)
per_page int 100 Items per page
batch_size int 50 Delete batch size
base_url str None Override API URL
timeout float 30.0 Request timeout
tcp_proxy str None TCP proxy
udp_proxy str None UDP proxy
local_address str None Local address

Returns: PurgeAllResult

Client

VOEClient

from streamflow.platforms.voe import VOEClient

client = VOEClient(
    api_key: str,
    *,
    base_url: str | None = None,
    timeout: float = 30.0,
    tcp_proxy: str | None = None,
    udp_proxy: str | None = None,
    local_address: str | None = None,
)

Constructor Parameters:

Parameter Type Default Description
api_key str required VOE API key
base_url str None Override API URL
timeout float 30.0 Request timeout
tcp_proxy str None TCP proxy URL
udp_proxy str None UDP proxy URL
local_address str None Local bind address

Methods

account_stats()
stats = client.account_stats() -> AccountStatsResponse
list_files()
files = client.list_files(
    *,
    page: int = 1,
    per_page: int = 100,
    fld_id: int = 0,
) -> FileListResponse
upload()
upload = client.upload(
    url: str,
    *,
    folder_id: int | None = None,
) -> UploadUrlResponse
upload_server()
result = client.upload_server() -> UploadServerResponse
delete_files()
result = client.delete_files(del_code: str) -> FileDeleteResponse
purge_all()
result = client.purge_all(
    *,
    fld_id: int = 0,
    per_page: int = 100,
) -> PurgeAllResult

Models

@dataclass(frozen=True, slots=True)
class VoeMasterLink:
    streaming_url: str        # the m3u8 URL the player should load
    title: str | None = None  # video title from the decrypted config

AccountStatsResponse

@dataclass
class AccountStatsResponse:
    storage_used: int
    storage_limit: int
    traffic_used: int
    traffic_limit: int
    files_count: int

FileListResponse

@dataclass
class FileListResponse:
    total: int
    page: int
    per_page: int
    files: list[FileItem]

FileItem

@dataclass
class FileItem:
    filecode: str
    name: str
    size: int
    created: str
    deleted: str | None
    thumb: str | None
    preview: str | None
    folder: int

UploadUrlResponse

@dataclass
class UploadUrlResponse:
    upload_url: str

UploadServerResponse

@dataclass
class UploadServerResponse:
    status: int
    msg: str
    result: UploadServerResult

@dataclass
class UploadServerResult:
    upload_server: str

FileDeleteResponse

@dataclass
class FileDeleteResponse:
    deleted: int

PurgeAllResult

@dataclass
class PurgeAllResult:
    deleted: int
    file_codes: tuple[str, ...]
    errors: list[str] | None = None

VoeAPIError

class VoeAPIError(Exception):
    def __init__(
        self,
        message: str,
        *,
        status: int | None = None,
        body: str | None = None,
    )

Constants

from streamflow.platforms.voe.constants import (
    DEFAULT_API_BASE_URL,   # "https://voe.sx/api"
    DEFAULT_SITE_BASE_URL,  # "https://voe.sx"
    UPLOAD_URL_PATH,        # "/upload/url"
    UPLOAD_SERVER_PATH,     # "/upload/server"
    ACCOUNT_STATS_PATH,     # "/account/stats"
    FILE_LIST_PATH,         # "/file/list"
    FILE_DELETE_PATH,       # "/file/delete"
    FILE_PAGE_PATH,         # "/e/{filecode}"
)

from streamflow.platforms.voe.constants import (
    file_page_url,         # file_page_url(filecode) -> "{site}/e/{filecode}"
    api_url,               # api_url(path) -> "{api_base}{path}"
    resolve_base_url,      # resolve_base_url(override) -> API base URL
    resolve_site_base_url, # resolve_site_base_url(override) -> site URL
    upload_url_endpoint,   # https://voe.sx/api/upload/url
    upload_server_endpoint,# https://voe.sx/api/upload/server
    account_stats_endpoint,# https://voe.sx/api/account/stats
    file_list_endpoint,    # https://voe.sx/api/file/list
    file_delete_endpoint,  # https://voe.sx/api/file/delete
)

DEFAULT_API_BASE_URL already includes the /api segment. Endpoint functions concatenate the per-action path on top — e.g. account_stats_endpoint() resolves to https://voe.sx/api/account/stats.