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/configRead public credit packs and interpolation cost bands.
POST/pricing/estimateEstimate charged seconds from duration, input FPS, and target FPS.
POST/api-tokensCreate or rotate one user-bound API token. The raw token is shown once.
DELETE/api-tokensRevoke the active API token.
POST/pricing/estimate-videoProbe an uploaded file and return supported target-FPS charged-second estimates.
POST/projectsCreate a durable user-owned project before upload.
GET/projectsList project history with input/output files and jobs.
POST/upload/presignCreate a browser-to-R2 upload URL.
POST/probeRead FPS, duration, resolution, and codec from an uploaded file.
POST/jobsCreate 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}/downloadIssue 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 studioAPI 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.