This walkthrough shows how to turn one text prompt into a short video with sound through an API, using MiniMax's H3 video model on AppleToken.

Until 23:59 on November 6, 2026 (Taipei time) / 15:59 UTC / 0:59 on November 7 (Japan time), the "H3 HappyDay" campaign makes generation with gputw/minimax-h3 free, with no limit on total uses (limits apply to concurrent jobs and submissions per minute).

What we will do

  1. Sign up on AppleToken and create an API key
  2. Request a video with POST /v2/videos/generations
  3. Poll GET /v2/videos/{id} until it is done
  4. Download the mp4 from GET /v2/videos/{id}/content

1. Sign up and get a key

Sign up at appletoken.app and create an API key (it starts with at_live_) in the dashboard. During the campaign you can generate without a top-up; we confirmed a new account with a $0 balance can generate.

2. Try it with curl

export APPLETOKEN_API_KEY=at_live_xxxxxxxx # your key # 1) Request a video curl -s https://appletoken.app/v2/videos/generations \ -H "Authorization: Bearer $APPLETOKEN_API_KEY" \ -H "Content-Type: application/json" \ -H "User-Agent: h3-demo/1.0" \ -d '{"model":"gputw/minimax-h3","prompt":"A Shiba Inu flying a small plane over Mount Fuji","seconds":5,"resolution":"720p","aspect_ratio":"9:16"}' # => {"id":"job_xxx","status":"processing", ...} # 2) Poll every 10 s until status is completed curl -s https://appletoken.app/v2/videos/job_xxx \ -H "Authorization: Bearer $APPLETOKEN_API_KEY" -H "User-Agent: h3-demo/1.0" # 3) Download the mp4 curl -s -o h3.mp4 https://appletoken.app/v2/videos/job_xxx/content \ -H "Authorization: Bearer $APPLETOKEN_API_KEY" -H "User-Agent: h3-demo/1.0" 

3. Python (standard library only)

On 429 (busy) or 503 (paused), wait the retry_after seconds in the response, then retry. We set a User-Agent explicitly because urllib with its default User-Agent sometimes got a 403.

import json, os, time, urllib.request, urllib.error API = "https://appletoken.app/v2" KEY = os.environ["APPLETOKEN_API_KEY"] # at_live_... HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json", "User-Agent": "h3-demo/1.0", # the default Python UA can get a 403 } def call(method, path, body=None): while True: req = urllib.request.Request(API + path, method=method, headers=HEADERS, data=json.dumps(body).encode() if body else None) try: with urllib.request.urlopen(req) as r: return r.read() if path.endswith("/content") else json.load(r) except urllib.error.HTTPError as e: if e.code in (429, 503): wait = int(json.loads(e.read() or b"{}").get("retry_after") or e.headers.get("Retry-After") or 30) print(f"{e.code}: retrying in {wait}s") time.sleep(wait) continue raise job = call("POST", "/videos/generations", { "model": "gputw/minimax-h3", "prompt": "A Shiba Inu flying a small plane over Mount Fuji", "seconds": 5, "resolution": "720p", "aspect_ratio": "9:16", }) print("job:", job["id"], job["status"]) while job["status"] not in ("completed", "failed"): time.sleep(10) job = call("GET", f"/videos/{job['id']}") print("status:", job["status"], "price:", job.get("price_charged")) if job["status"] == "completed": open("h3.mp4", "wb").write(call("GET", f"/videos/{job['id']}/content")) print("saved h3.mp4") 

It saves h3.mp4. In our own runs, a video took 104 to 441 seconds from submit to finish. At campaign peak a job can stay queued for 10 minutes or more (measured around 23:00 JST on Nov 5); the response shows the wait in queue.waited_seconds.

4. Example output

The campaign video, "Dream". Every scene in it was generated by H3 (AI-generated).

Specs and limits

Item Value
Model gputw/minimax-h3 (other models keep regular prices)
Length 1–5 seconds
Resolution 480p / 720p
Aspect ratio 16:9, 9:16, 1:1, 4:3, 3:4
Audio included automatically
Reference images not supported
Concurrency up to 32 jobs per account (per GPUtw.ai); 120 submissions per minute
Regular price 0.017 points/s at 720p, 0.007 points/s at 480p
Free until 23:59 Nov 6, 2026 Taipei time (15:59 UTC). Jobs finishing after that are charged at the regular price

Links

(AppleToken is operated by Washin Co., Ltd.; compute is provided by GPUtw.ai. The author is affiliated with AppleToken.)

The sample sticks to the Python standard library, so there is nothing to install.

IDAEO-HDDV1