ReframeFX
Open studio
API docs

Frame interpolation as an API.

Upload directly to storage, ask the backend to probe, estimate charged seconds, create a job with `target_fps`, then poll `live_status` until the result is ready.

API=https://reframefx-production.up.railway.app

curl -X POST "$API/upload/presign" \
  -H "Authorization: Bearer $RFX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename":"clip.mp4","content_type":"video/mp4","project_id":"$PROJECT_ID"}'

curl -X POST "$API/pricing/estimate" \
  -H "Content-Type: application/json" \
  -d '{"duration_sec":30,"input_fps":24,"target_fps":60}'

curl -X POST "$API/pricing/estimate-video" \
  -H "Authorization: Bearer $RFX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"r2_key":"uploads/user_uuid/project_uuid/input/file_uuid-clip.mp4","target_fps_options":[48,60,90,120]}'

curl -X POST "$API/jobs" \
  -H "Authorization: Bearer $RFX_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"r2_key":"uploads/user_uuid/project_uuid/input/file_uuid-clip.mp4","project_id":"$PROJECT_ID","target_fps":60}'

Authentication

Generate an API token from the dashboard and send it as `Authorization: Bearer rfx_live_...`. Browser and API jobs spend from the same seconds balance.

curl -X POST "$API/api-tokens" \
  -H "Authorization: Bearer $SUPABASE_JWT" \
  -H "Content-Type: application/json"

Endpoints

GET
/pricing/config

Read public credit packs and interpolation cost bands.

POST
/pricing/estimate

Estimate charged seconds from duration, input FPS, and target FPS.

POST
/api-tokens

Create or rotate one user-bound API token. The raw token is shown once.

DELETE
/api-tokens

Revoke the active API token.

POST
/pricing/estimate-video

Probe an uploaded file and return supported target-FPS charged-second estimates.

POST
/projects

Create a durable user-owned project before upload.

GET
/projects

List project history with input/output files and jobs.

POST
/upload/presign

Create a browser-to-R2 upload URL.

POST
/probe

Read FPS, duration, resolution, and codec from an uploaded file.

POST
/jobs

Create a render job using r2_key and target_fps. The backend decides watermark policy from account entitlement.

GET
/jobs/{id}

Poll job status, live_status, queue depth, and worker signals.

GET
/projects/{id}/files/{file_id}/download

Issue a fresh signed URL for review or re-download.

Webhook status

RunPod callbacks already exist on the backend. Public customer webhooks are part of the API beta roadmap; polling is the launch-safe path.

Try demo studio

API pricing

Browser and API jobs use one seconds balance. Use `/pricing/estimate` when you already know metadata, or `/pricing/estimate-video` after upload when you want the backend to probe the file and return supported target-FPS estimates.