API Documentation
Reference
FMotion API
Video in, BVH out, over a simple REST API. Submit a job, poll for the result, download the motion data.
Introduction
The FMotion API turns video into motion capture. Send a video, get back a full-body 3D skeleton with hands and fingers as industry-standard BVH. Jobs run asynchronously: you submit a video, then poll for the result.
Base URL: https://fmotion.ai. All endpoints accept and return JSON.
Authentication
Create an API key in Settings → API. Pass it as a Bearer token on every request. Keys are shown once at creation; store them securely.
Authorization: Bearer fm_live_xxxxxxxxxxxxxxxxxxxxxxxxKeep keys server-side. Anyone with a key can spend your credits. Revoke a leaked key from the API tab; it stops working immediately.
Pricing & credits
Usage is metered per second of input video. One credit covers 15 seconds of video by default, so a 10-second clip costs about 0.67 credits. Credits are deducted when a job is accepted and refunded automatically if the job fails.
Buy credits in Billing, or enable auto-reload in the API tab to top up automatically when the balance runs low. Metered (postpaid) billing through Stripe is rolling out for high-volume users.
Submit a job
Submit a publicly reachable video URL. Returns immediately with a job id; processing continues in the background.
Request body
video_urlstringRequired. Publicly reachable URL of the video to process.namestringOptional. A label for the job.filenamestringOptional. Original filename (helps the decoder).curl -X POST https://fmotion.ai/api/v1/jobs \
-H "Authorization: Bearer $FMOTION_KEY" \
-H "Content-Type: application/json" \
-d '{"video_url": "https://example.com/clip.mp4"}'Response (202)
{
"id": "b4af88b8-...",
"status": "queued",
"seconds_billed": 8.4,
"credits_charged": 0.6,
"poll_url": "/api/v1/jobs/b4af88b8-..."
}Check job status
Poll this until status is completed or failed. When completed, bvh_url holds the result. Poll every few seconds.
curl https://fmotion.ai/api/v1/jobs/JOB_ID \
-H "Authorization: Bearer $FMOTION_KEY"Response
{
"id": "b4af88b8-...",
"status": "completed",
"progress": 100,
"bvh_url": "https://.../result.bvh",
"characters": null,
"processing_time": 19.2,
"error": null
}statusstringqueued | processing | completed | failedprogressnumber0–100 percent complete.bvh_urlstringDownload URL for the BVH (when completed).charactersarrayPer-person BVH files for multi-person clips.errorstringFailure reason when status is failed (credits auto-refunded).Errors
400clientMissing or invalid video_url.401authMissing, malformed, revoked or unknown API key.402billingNo credits and no card on file.413clientVideo exceeds the 200MB limit.502serverUpstream processing could not accept the job (credits refunded).Limits
- Maximum video size: 200 MB per request.
- Jobs are processed asynchronously; typical turnaround is seconds to a few minutes.
- Credits are charged on accept and refunded automatically on failure.