ReedTV API

Automate your video library from your own server: upload and manage videos, sync your BYOA Cloudflare Stream account, and read analytics — all with a long-lived, scoped API key. No more scraping a browser token every day.

The Markdown file (also at /llms.txt) is a single self-contained spec you can hand to an AI coding agent so it knows how to call this API.

Authentication

Every request sends an API key as a Bearer token:

Authorization: Bearer rtv_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

Create and revoke keys on the Developer page in your portal. The full key is shown once at creation — store it securely; it can't be retrieved later. Base URL: https://reedtv.com

API keys are scoped and can only reach the endpoints documented below. They cannot access billing, account, or admin functionality.

Scopes

ScopeGrants
videos:readList/read videos, storage usage, captions
videos:writeCreate/update/delete videos, copy to shared, bulk ops, manage captions
vendors:readList BYOA accounts and their Cloudflare Stream videos
vendors:writeConnect/verify/sync/delete BYOA accounts
analytics:readRead analytics overview and per-video analytics

Endpoints

Videos

GET/api/videosvideos:read

List your videos. Query: page, limit, status, search, vendor (shared|byoa), sort, order.

GET/api/videos/{publicId}videos:read

Get one video with playback URLs, embed URL and ready-to-paste embed code.

GET/api/videos/storagevideos:read

Storage usage (minutes), plan, overage, and spending cap.

POST/api/videosvideos:write

Create a video record and get a one-time upload URL. The file uploads directly to Cloudflare Stream at the returned URL. Then poll the video until status is ready.

PUT/api/videos/{publicId}videos:write

Update title, description, OG metadata, visibility, or embed settings.

DELETE/api/videos/{publicId}videos:write

Delete a video. ?keepRemote=true removes from ReedTV only (keeps it in your BYOA account).

POST/api/videos/{publicId}/copy-to-sharedvideos:write

Copy a BYOA video into ReedTV shared storage.

POST/api/videos/bulk-copy-to-sharedvideos:write

Body: { "publicIds": [...] } (max 20).

POST/api/videos/bulk-deletevideos:write

Body: { "publicIds": [...] } (max 50). ?keepRemote=true supported.

GET/api/videos/{publicId}/captionsvideos:read

List captions. POST to generate/upload, DELETE to remove (videos:write).

BYOA accounts

GET/api/vendor-accountsvendors:read

List your connected Cloudflare Stream accounts.

GET/api/vendor-accounts/{accountId}/remote-videosvendors:read

List videos in your CF Stream account, flagged with whether each is already imported.

POST/api/vendor-accounts/{accountId}/syncvendors:write

Import remote videos into ReedTV. Body: { "vendorVideoIds": [...] }.

POST/api/vendor-accounts/{accountId}/verifyvendors:write

Re-verify the account's stored Cloudflare credentials.

DELETE/api/vendor-accounts/{accountId}vendors:write

Disconnect a BYOA account from ReedTV (your Cloudflare Stream videos are not deleted).

Analytics

GET/api/analytics/overviewanalytics:read

Account-wide analytics.

GET/api/analytics/videos/{publicId}analytics:read

Per-video views, countries, and referrers.

Example: sync BYOA videos & get watch URLs

curl -s https://reedtv.com/api/vendor-accounts \
  -H "Authorization: Bearer $REEDTV_API_KEY"

# import specific Cloudflare Stream videos into ReedTV
curl -X POST https://reedtv.com/api/vendor-accounts/5/sync \
  -H "Authorization: Bearer $REEDTV_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"vendorVideoIds":["a1b2c3d4e5f6"]}'

# read back the ReedTV watch URLs to publish wherever you post
curl -s "https://reedtv.com/api/videos?vendor=byoa&limit=100" \
  -H "Authorization: Bearer $REEDTV_API_KEY"
Each video's watchUrl is an embed-compatible link you can drop into a post on any platform that supports rich embeds — the watch URL is what makes the player render.
Copied to clipboard