MakeYourViral API
The MakeYourViral API turns photos into viral videos programmatically. Authenticate with an API key, create an async render task, poll until it finishes, then download the finished MP4 from a persistent URL.
Quickstart
1. Create an API key
Sign in, open the API keys page and create a key. The plaintext key (mv_live_…) is shown exactly once — store it somewhere safe. Pass it on every request as Authorization: Bearer mv_live_….
2. Create a render task
curl -X POST https://makeyourviral.com/api/v1/videos/meme \ -H "Authorization: Bearer mv_live_YOUR_KEY" \ -F "photo=@portrait.jpg" \ -F "quality=480p"
The task is created asynchronously — credits are charged immediately and refunded automatically if the render fails.
202 Accepted
{
"id": "3f9d0e2a-6f1c-4b8e-9a7d-2c1b5e8f4a01",
"product": "meme",
"status": "queued",
"credits_charged": 25,
"credits_balance": 75,
"estimated_seconds": 150,
"poll_url": "https://makeyourviral.com/api/v1/videos/3f9d0e2a-…"
}3. Poll until it finishes
Poll the task endpoint every 5–10 seconds. Status is queued → processing → succeeded or failed.
curl https://makeyourviral.com/api/v1/videos/3f9d0e2a-… \ -H "Authorization: Bearer mv_live_YOUR_KEY"
4. Download the video
When status is succeeded, the response contains video.url — a persistent URL that does not expire. Download the MP4 (no auth needed) and save it wherever you like.
curl -o video.mp4 "https://makeyourviral.com/api/v1/videos/3f9d0e2a-…/file"
Products
Each viral video is its own endpoint. Credits per render:
| Product | Endpoint | Length | Cost (25/50 cr) |
|---|---|---|---|
| ChatGPT Millionaire Meme | POST /api/v1/videos/meme | 12s | 25 (480p) / 50 (720p) |
| Balli Dance | POST /api/v1/videos/balli | 14s | 25 (480p) / 50 (720p) |
| Baby Wow Performer | POST /api/v1/videos/babywow | 7s | 25 (480p) / 50 (720p) |
| Tiny Desk Concert | POST /api/v1/videos/tinydesk | 15s | 25 (480p) / 50 (720p) |
Authentication
All endpoints (except the final file download) require Authorization: Bearer mv_live_…. Keys are shown once at creation and can be revoked at any time on the API keys page. A revoked key immediately stops working.
Rate limits
12 task creations per hour per API key. Polling is not rate-limited. The create endpoint answers 429 rate_limited with a Retry-After header when the cap is hit.
Errors
Every non-2xx response has the same shape:
{
"error": {
"code": "insufficient_credits",
"message": "Not enough credits",
"needed": 25,
"balance": 0
}
}| HTTP | code | Meaning |
|---|---|---|
| 400 | invalid_quality / invalid_subject / invalid_aspect_ratio / missing_photo / too_many_photos | Bad request parameters |
| 401 | invalid_api_key | Missing, malformed, unknown or revoked key |
| 402 | insufficient_credits | Balance too low — top up |
| 404 | not_found / product_not_found | Unknown task id or product |
| 413 | file_too_large | Photo over 10 MB |
| 415 | unsupported_media_type | Not a JPG/PNG/WebP/HEIC image |
| 429 | rate_limited | Hourly creation cap reached |
| 502 | provider_error | Upstream render failed — credits are refunded automatically |
Failed renders & refunds
If a task fails (upstream render error or timeout), its credits are refunded to your balance automatically — no action needed. The poll response reports status: "failed" with an error message.
Idempotent retries
If you retry a create call while an identical product task is still in flight (within 30 minutes), the API returns the same task id with resumed: true and does not charge credits again. Safe to retry on network errors.