videofetch (Python SDK)
Official VideoFetch SDK — video ingestion API: give us a video URL, we deliver MP4/MP3 to your storage.
pip install videofetch-sdk
Usage
import videofetch
client = videofetch.VideoFetch(api_key="vf_live_sk_...")
# L1: create a job (returns immediately, status "queued")
job = client.downloads.create(
url="https://www.youtube.com/watch?v=...",
format="1080p", # 144p..2160p | mp3
trim=videofetch.TrimSpec(start=120, end=420), # optional clip window
# destination={"type": "r2", "id": "..."}, # optional direct-to-bucket
)
# L2: wait for the terminal state (polls with backoff)
result = job.wait(timeout=120)
print(result.status) # "completed"
print(result.download_url) # presigned link, valid 7 days (url destination)
print(result.storage_key) # "user://<bucket>/<key>" (bucket destination)
print(result.size_bytes, result.cost_usd)
# L3: one-shot
result = client.downloads.create_and_wait(url=..., format="1080p")
Async (FastAPI / Next.js backends):
from videofetch.asyncio import AsyncVideoFetch
async with AsyncVideoFetch(api_key="...") as client:
job = await client.downloads.create(url=..., format="1080p")
result = await job.wait(timeout=120)
Free metadata lookup:
info = client.info.lookup("https://www.youtube.com/watch?v=...")
print(info.title, info.duration, info.formats) # available quality tiers
Webhooks (FastAPI):
from fastapi import Request, HTTPException
from videofetch.webhooks import construct_event, SignatureVerificationError
@app.post("/webhooks/videofetch")
async def on_event(request: Request):
body = await request.body()
try:
event = construct_event(body, request.headers.get("X-VideoFetch-Signature"), WEBHOOK_SECRET)
except SignatureVerificationError:
raise HTTPException(status_code=400, detail="bad signature")
if event["event"] == "download.completed":
... # fetch the result via client.downloads.retrieve(event["id"])
return {"ok": True}
Configuration
api_key— required. Create keys in the Dashboard (vf_live_sk_...). Falls back to theVIDEOFETCH_API_KEYenv var.base_url— defaults to the hosted API; override for local/single-server dev (http://localhost:8301). Env:VIDEOFETCH_BASE_URL.timeout(s),max_retries(default 2, automatic on 429/5xx).
Errors
All SDK errors derive from videofetch.VideoFetchError:
| error | meaning |
|---|---|
AuthenticationError |
bad/expired key (401) |
QuotaExceededError |
monthly quota exhausted (402) |
ValidationError |
bad url/format/trim/destination (400/422) |
NotFoundError |
job/connection not found (404) |
RateLimitError |
slow down (429) |
JobFailedError |
job reached failed — never charged |
Serverless warning
Do not call job.wait() in a Vercel/Cloudflare/Lambda function — it burns
billed execution time. Create the job, persist its id, then respond to the
download.completed webhook and retrieve(id) the final result.
Development
pip install -e ".[dev]"
pytest
License
MIT
Release files for videofetch-sdk 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| videofetch_sdk-0.1.0.tar.gz | 11.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| videofetch_sdk-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 23.4 kB
Release files / videofetch_sdk-0.1.0.tar.gz
| Download URL | videofetch_sdk-0.1.0.tar.gz |
|---|---|
| Size | 11.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
af2a1c6f7d8de70502727c9e7a48db188d697f752c47a1d1bb8620d118a4e4f2
|
|
BLAKE2b-256 checksum How to use checksums |
a38468c85a1aa8834b7ee6bd28141fca4896e355e85976fe988757ffc441ba2b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency logRelease files / videofetch_sdk-0.1.0-py3-none-any.whl
| Download URL | videofetch_sdk-0.1.0-py3-none-any.whl |
|---|---|
| Size | 12.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
b0126a2d9062e21cf8568f1866c884d8fd7189494d928d5f6ed8ea46c33d65b5
|
|
BLAKE2b-256 checksum How to use checksums |
5920e2b342b2ac633305aa1a1a799cac185d02511e48b0e3050a2b986cf91997
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 21, 2026.
Transparency log