API

Storage

Finished MP4s upload to your bucket. Save credentials once in Settings (encrypted in the DB), or pass them per request.

Modes

ModeWhen
Saved bucketSettings → Storage, then omit storage or pass integration_id
Inlinestorage.inline on the request (job-scoped, not stored)
Master keyOwner CLARITY_API_KEY only → platform .env R2

Saved bucket (recommended)

  • Sign in → Settings → Storage
  • Add R2 / S3 / MinIO — we encrypt before insert; never return secrets
  • Call the API with your chalk key (auto-uses latest bucket) or pass id
saved.sh
curl -sS -X POST "$MANIMOTION_API/video/request" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $MANIMOTION_KEY" \
  -d '{
    "prompt": "Visualize gradient descent",
    "storage": {
      "integration_id": "clxxxxxxxx"
    }
  }'
RESPONSEresponse.json
{
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "queued",
  "cached": false,
  "video_url": null,
  "engine": null
}

Inline (scripts / CI)

inline-r2.sh
curl -sS -X POST "$MANIMOTION_API/video/request" \
  -H "Content-Type: application/json" \
  -H "x-api-key: $MANIMOTION_KEY" \
  -d '{
    "prompt": "Explain Fourier series from waves to frequency",
    "storage": {
      "inline": {
        "provider": "r2",
        "bucket": "my-lectures",
        "access_key_id": "YOUR_R2_ACCESS_KEY",
        "secret_access_key": "YOUR_R2_SECRET",
        "account_id": "YOUR_CLOUDFLARE_ACCOUNT_ID",
        "public_url": "https://cdn.example.com"
      }
    }
  }'
RESPONSEresponse.json
{
  "job_id": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "status": "queued",
  "cached": false,
  "video_url": null,
  "engine": null
}

Fields

ProviderRequired
r2bucket, access_key_id, secret_access_key, account_id (+ public_url)
s3 / minio / backblaze / custom_s3bucket, keys, region; endpoint for MinIO/custom; force_path_style for MinIO

Always set public_url so video_url is browser-playable.

Security

  • DB credentials: AES-256-GCM + scrypt (Vercel encrypts, VPS decrypts)
  • SECRET_ENCRYPTION_KEY must match on both sides (≥32 chars)
  • List APIs return metadata only — never ciphertext or plaintext secrets
  • Inline creds are not persisted

API reference.