API
Everything the website does, from a script. Base URL https://aimodels.cheap/v1, JSON in and out, Authorization: Bearer <api_key>. Prices in USD, paid from a prepaid USDT/USDC balance and locked when you submit.
1. Account and key
POST/v1/signup — no auth. Returns the API key once, plus your personal deposit address.
curl -X POST https://aimodels.cheap/v1/signup \
-H 'content-type: application/json' -d '{"email":"you@company.com"}'
{ "api_key": "amc_…", "session": "ses_…",
"deposit": { "address": "0x…", "network": "BNB Smart Chain (BEP-20)", "token": "USDT/USDC", "min_usd": 10 } }
Accounts created on the website (email or Google) work here too: sign in, open your account, click API key. POST/v1/account/rotate-key issues a new key and invalidates the previous one.
2. Funds
GET/v1/account — balance, deposit address, last 50 ledger lines.
curl https://aimodels.cheap/v1/account -H 'Authorization: Bearer amc_…'
{ "email": "…", "balance_usd": 24.98, "deposit": { "address": "0x…", … }, "ledger": [ … ] }
3. Quote
GET/v1/quote?product=h3_768p&tier=24h&seconds=10 — no auth. Same formula the job will use; only the job locks it.
| product | what |
|---|---|
h3_768p | MiniMax H3, 1344×768, 24 fps, stereo audio, official 20-step workflow |
h3_turbo | MiniMax H3 with the turbo LoRA, 8 steps, draft quality |
h3_swap | Actor swap (v2v, edit: face): the character's face on your real footage, no diffusion |
h3_edit | Edit mode (v2v, experimental): regenerate the person or the background, 30 steps |
h3_ref · h3_ref_turbo | Reference mode (r2v): source video + character photos, 20 steps or 4-step draft |
| tier | delivery |
24h · 4h · 1h | Deadline from submission. Missed deadlines are rerun on on-demand GPUs at our cost. |
4. Upload an image (image-to-video)
POST/v1/uploads — raw body, content-type: image/jpeg, image/png or image/webp, max 20 MB. Any public image URL works as well.
curl -X POST https://aimodels.cheap/v1/uploads -H 'Authorization: Bearer amc_…' \
-H 'content-type: image/jpeg' --data-binary @frame.jpg
{ "url": "https://aimodels.cheap/in/12-….jpg", "bytes": 183422 }
4b. Remake: your character in a video (reference mode)
Mode r2v with reference_url (a video of 4 to 15 s) and ref_images (3 to 5 photos of the character, faces visible). The clip is entirely regenerated: the model keeps the scene, camera, framing, gestures and timing of the video and puts your character in it; with "voice": "original" (default) the source soundtrack is reused. Since 2026-09-17 your request is rewritten server-side into the structured prompt MiniMax H3 was trained on (six sections: subject definitions, task summary, retention analysis, shot-by-shot description, soundscape, music) and stored as input.prompt_h3, visible in the studio. Set seconds to the video's length (max 15; 10 s or less keeps timing tighter). Reference pack that works best: a front portrait, a three-quarter view and a full-body shot, sharp, plain background, consistent hair and clothing (contradictory photos blend into a third person). Test feature: expect a close resemblance of the face, not an exact copy; hands, feet and fast moves are the usual weak spots; price product h3_ref.
{
"mode": "r2v",
"product": "h3_ref",
"seconds": 10,
"reference_url": "https://aimodels.cheap/in/12-….mp4",
"ref_images": ["https://aimodels.cheap/in/12-a.jpg", "https://aimodels.cheap/in/12-b.jpg", "https://aimodels.cheap/in/12-c.jpg"],
"ref_image_size": "max",
"prompt": "she walks towards the camera and smiles, golden hour"
}
The source video is fed to the model as a lightweight proxy (576p short edge at 24 fps, 15 s max) and up to 5 photos are used alongside a video; this keeps the render inside GPU memory while preserving motion and framing.
By default we prefix your prompt with the reference tags (<Video 1> is the shot to recreate, <Picture 1..N> the character). Send "auto_tags": false to write the tags yourself. ref_image_size: match is faster, max keeps the photos in high resolution for stronger identity.
4c. Actor swap: your character's face on real footage
Mode v2v with "edit": "face" and product h3_swap: the largest face on every frame of your video is replaced by the character's face, built from its photos (or from ref_images, 1 to 8 clear photos), then enhanced. No diffusion: the footage, the body, the clothes, the camera and the soundtrack are exactly the original. This is the deepfake technique, and the reliable way to "change the actor". Price is per second and cheap (a few minutes of GPU). Add "voice": "character" to re-voice the speech too.
{ "mode": "v2v", "edit": "face", "product": "h3_swap", "seconds": 10, "reference_url": "https://aimodels.cheap/in/12-….mp4", "character": "chr_…", "prompt": "actor swap" }
Face lock. On text, photo and reference jobs with a character, "face_lock": true (the default) runs the same swap on the generated clip: the identity stays pixel-stable from clip to clip, on top of the trained adapter. Send false to keep the raw generation.
4d. Edit mode (experimental): regenerate the person or the background
Not recommended. In our tests the regenerated region comes out dark and incoherent, so the studio no longer offers it. To replace the whole actor use reference mode (4b) with the video plus character photos: the shot is regenerated with your character, body, shadows and interactions included. To keep the footage untouched and change only the face, use the actor swap (4c). The API still accepts the fields below.
Mode v2v keeps your video pixel for pixel and regenerates only one region: the main person ("edit": "person") or everything except the people ("edit": "background"). The person is segmented automatically on every frame; the H3 control network paints the new content inside that mask with the original footage as context, then the result is composited back onto your original frames. Camera, timing, lighting and the untouched areas are exactly yours. Add up to 5 photos of the new person (or of the new place) so the model copies an identity instead of inventing one; the prompt describes what goes inside the mask.
{
"mode": "v2v",
"product": "h3_edit",
"seconds": 8,
"reference_url": "https://aimodels.cheap/in/12-….mp4",
"edit": "person",
"ref_images": ["https://aimodels.cheap/in/12-a.jpg", "https://aimodels.cheap/in/12-b.jpg"],
"keep_audio": true,
"prompt": "same outfit as in the video"
}
Options: target = main (default, the largest person) or all (every person); keep_audio keeps your original soundtrack (default) or uses the generated one; control_strength 0.2 to 2 (default 1) trades faithfulness to the source for freedom. The output length follows the video (15 s max); seconds caps it. Aspect is taken from the video.
4e. Characters: train your own person once, reuse it everywhere
A character is a small adapter (LoRA) trained on 20 to 100 photos of one person, on a spot GPU, in about an hour. Once ready, pass "character": "chr_…" on any job: the adapter is stacked on the model and its trigger word is prepended to your prompt, so the same face, hair and body come back in text-to-video, image-to-video, reference and edit modes without sending photos again. Photos: varied angles, lighting, distances, expressions; sharp faces; no other people in frame. Upload them with /v1/uploads first. Each photo may carry a caption saying what it shows: outfit, pose, place, or the body part in a close-up. Captions keep the outfit and the setting out of the identity, so vary them freely; photos without a caption are described automatically on the GPU. Close-ups of hands, face, eyes, mouth, marks or any body part improve their consistency, keep them to about a third of the set and caption them as close-ups.
POST /v1/characters
{ "name": "Léo", "description": "young man, dark curly hair, slim",
"images": ["https://aimodels.cheap/in/12-a.jpg", { "url": "https://aimodels.cheap/in/12-b.jpg", "caption": "close-up of his left hand holding a cup, outdoors" }, "…"] }
→ { "character": { "id": "chr_…", "status": "training", … }, "job": { … } }
GET /v1/characters list (status: training | ready | failed)
DELETE /v1/characters/:id remove the adapter
POST /v1/jobs { "prompt": "walks along a beach at dusk, handheld", "character": "chr_…", "character_strength": 1.0, … }
To improve a character with more photos, send the full photo set (old and new) with "continue_from": "chr_…": training starts from that adapter with 200 steps and a gentler learning rate, keeps the trigger word, and produces a new character. Price: a flat fee per training, product h3_train in /v1/prices (about 1.5 GPU-hours at spot cost). Refunded if the training fails. The adapter is private to your account and never served publicly.
4f. Voice: the source video's speech, in your character's voice
Give a character a voice sample, 5 to 25 seconds of clean speech: PUT /v1/characters/:id/voice with the audio (or video) bytes and its content-type. Then, on reference (r2v) and edit (v2v) jobs that have a source video, "voice" chooses the result's speech: character converts the source speech into the character's voice, keeping the words, timing and intonation (zero-shot voice conversion, English works best); original keeps the source track; generated lets the model produce its own soundtrack. The chosen speech is also fed to the model as an audio reference so the mouth follows it. Default: character when the selected character has a voice sample, else original for edits and generated for reference jobs.
5. Jobs
POST/v1/jobs — debits the price immediately, refunded if the job fails or you cancel while it is still queued.
curl -X POST https://aimodels.cheap/v1/jobs \
-H 'Authorization: Bearer amc_…' -H 'content-type: application/json' \
-d '{
"product": "h3_768p",
"tier": "24h",
"seconds": 10,
"mode": "i2v",
"prompt": "handheld phone footage, a woman laughs on a ferry deck, wind in her hair, natural light",
"image_url": "https://aimodels.cheap/in/12-….jpg",
"aspect": "9:16",
"webhook": "https://example.com/hooks/aimodels"
}'
{ "id": "job_…", "status": "queued", "price_usd": 0.07, "deadline": 1788630000, … }
| field | notes |
|---|---|
mode | t2v (default, text only), i2v with image_url / last_image_url, r2v with reference_url and/or ref_images (see 4b) |
seconds | 1 to 15 |
aspect | 16:9 (default), 9:16, 1:1, 4:3, 3:4 |
character | id of a trained character (see 4d); character_strength 0.2 to 1.5, default 1 |
voice | character | original | generated, jobs with a source video (see 4e) |
realism | true by default: a realism adapter (skin texture, eye coherence, handheld feel) is applied on top of the model in every mode. false for the plain model. realism_strength 0.2 to 1.5, default 1. |
audio_url, seed | optional |
webhook | https URL, receives the job object as JSON when it finishes or fails |
GET/v1/jobs/:id · GET/v1/jobs · DELETE/v1/jobs/:id (queued jobs only, full refund)
Statuses: queued → running → done with output_url (kept 7 days) or failed (refunded). render_seconds and gpu are filled in when done.
6. Webhook
When a job finishes or fails, we POST the same job object to your webhook URL, once, with a 10-second timeout. Poll GET /v1/jobs/:id if you need certainty.
7. Errors
| code | meaning |
|---|---|
401 | Missing or invalid API key |
402 | Insufficient balance; the response includes price_usd, balance_usd and your deposit_address |
409 | Job cannot be cancelled in its current state |
429 | Too many signups from one address |
Questions: hello@aimodels.cheap