Getting started
Quickstart
The My Video Gift API turns photos, optional video clips, and a few details into a finished personalized film with an original song — server-side, no preview step, one flat price per delivery. This walkthrough goes from a key to a delivered film in five calls.
Every request is JSON over HTTPS. Authenticated calls carry your key as a Bearer token. The API base is below.
https://myvideogift.com/api/v1The flow, end to end
- 1
Get a key
Keys are issued to partner accounts as
mvg_live_(real money) ormvg_test_(same API, sandbox). See Authentication for how to get one. - 2
Create a gift
POST /v1/giftswith the occasion, recipient, and story. Returns agift_id— the server owns the order from here. - 3
Add photos
POST /v1/gifts/{id}/photosby public URL or inline base64. The server fetches, verifies, and stores them. Optionally add video clips the same way viaPOST /v1/gifts/{id}/clips. - 4
Render
POST /v1/gifts/{id}/renderwithconsent: true. This is the one paid call — it debits the tier price and starts the render. - 5
Poll for the film
GET /v1/gifts/{id}untilstatusisdelivered-paid, then readfilm_urlandgift_url.
1. Confirm your key and balance
A cheap authenticated read — good for verifying your key works before you spend.
curl https://myvideogift.com/api/v1/account \
-H "Authorization: Bearer mvg_live_..."{
"key_id": "ak_1a2b3c4d",
"label": "acme-gifts",
"mode": "live",
"status": "active",
"balance_cents": 5000,
"total_spent_cents": 2500,
"total_deliveries": 1,
"created_at": "2026-07-08T12:00:00.000Z"
}2. Create a gift
occasion must be a real slug — browse them with GET /v1/occasions. tier defaults to signature and style defaults to gift. An optional Idempotency-Key makes a retried create return the original gift instead of a duplicate.
curl -X POST https://myvideogift.com/api/v1/gifts \
-H "Authorization: Bearer mvg_live_..." \
-H "Content-Type: application/json" \
-H "Idempotency-Key: order-8f21c9" \
-d '{
"occasion": "anniversary-video",
"recipient_name": "Maria",
"relationship": "wife",
"memory": "Twenty-five years since the courthouse wedding in the rain.",
"story_note": "She still hums the song from our first dance.",
"feeling_words": ["tender", "grateful", "playful"],
"tier": "signature",
"style": "gift"
}'{
"gift_id": "b3f1c2a4-9e7d-4c6b-8a1f-2d5e6f7a8b9c",
"status": "reserved",
"tier": "signature",
"style": "gift",
"occasion": "anniversary-video",
"share_slug": "maria-7x2k9q1p4m3n",
"photo_limit": 30
}3. Add photos
Up to 10 photos per request, up to 30 per gift. Each is fetched (public URL) or decoded (base64), verified to be a real JPEG/PNG/WebP, and stored. subject_photo_index marks the main person.
curl -X POST https://myvideogift.com/api/v1/gifts/b3f1c2a4-9e7d-4c6b-8a1f-2d5e6f7a8b9c/photos \
-H "Authorization: Bearer mvg_live_..." \
-H "Content-Type: application/json" \
-d '{
"photos": [
{ "url": "https://example.com/photos/wedding.jpg" },
{ "url": "https://example.com/photos/anniversary-trip.jpg" }
],
"subject_photo_index": 0
}'{
"photo_count": 2,
"photo_ids": ["p01", "p02"],
"subject_photo_id": "p01"
}4. Render — the paid call
consent: true is a required attestation that you hold the rights to these photos and the recipient's depiction. This debits the tier price and starts the render; it returns immediately with 202.
curl -X POST https://myvideogift.com/api/v1/gifts/b3f1c2a4-9e7d-4c6b-8a1f-2d5e6f7a8b9c/render \
-H "Authorization: Bearer mvg_live_..." \
-H "Content-Type: application/json" \
-d '{ "consent": true }'{
"status": "rendering",
"tier": "signature",
"charged_cents": 2500,
"balance_cents": 2500,
"poll_after_sec": 60
}5. Poll until the film is ready
Wait poll_after_sec between polls (a render takes minutes). When status is delivered-paid, the delivery URLs appear. A held or failed run auto-refunds the charge.
curl https://myvideogift.com/api/v1/gifts/b3f1c2a4-9e7d-4c6b-8a1f-2d5e6f7a8b9c \
-H "Authorization: Bearer mvg_live_..."{
"gift_id": "b3f1c2a4-9e7d-4c6b-8a1f-2d5e6f7a8b9c",
"status": "delivered-paid",
"tier": "signature",
"occasion": "anniversary-video",
"recipient_name": "Maria",
"share_slug": "maria-7x2k9q1p4m3n",
"photo_count": 2,
"clip_count": 1,
"created_at": "2026-07-08T12:00:00.000Z",
"fulfillment": { "state": "succeeded", "stage": "deliver" },
"charged_cents": 2500,
"film_url": {
"16x9": "https://myvideogift.com/api/gift/maria-7x2k9q1p4m3n/film?aspect=16x9",
"9x16": "https://myvideogift.com/api/gift/maria-7x2k9q1p4m3n/film?aspect=9x16"
},
"gift_url": "https://myvideogift.com/gift/maria-7x2k9q1p4m3n"
}Two ways to deliver
film_url is the raw full-HD MP4 (both aspect ratios) you can hand to your user or embed. gift_url is a hosted gift page that plays the film — send whichever fits.
Next steps
Read the API reference for every endpoint, field, and constraint. See Authentication for keys and rate limits, Pricing for the per-delivery tiers, and Errors for the coarse error codes.
An MCP server that wraps these endpoints for agents is coming soon.
Last updated 2026-07-11.