Browse the docs

API reference

Everything the dashboard does is backed by this API: authenticate with an API key, submit a job, check its status, and list the live models and prices.

Authentication

Create an API key at Dashboard → API Keys (the full key is shown once — store it securely) and send it as a Bearer token on every request:

Authorization header
curl https://getmecompute.com/api/v1/jobs \
  -H "Authorization: Bearer gmc_live_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
Keys are hashed at rest and can be revoked instantly from the dashboard. A key only ever sees and creates its owner's jobs. The dashboard itself calls these same endpoints with short-lived session tokens it mints automatically — the API you integrate against is exactly the one we run the product on.

Sandbox keys

Create a sandbox test key (gmc_test_…) from the same dashboard page to test your integration: the API surface is identical and requests are validated and priced for real, but sandbox jobs are simulated — no real video is generated. They auto-complete with a sample video within about a minute of submission, cost is 0 (the would-be price is returned as estimated_cost), and webhooks fire exactly like production.

Identify the key

GET /api/v1/me
GET https://getmecompute.com/api/v1/me
Authorization: Bearer gmc_live_…

// → { "user_id": "…", "email": "you@example.com", "key": { "kind": "personal", "name": "n8n production", "prefix": "gmc_live_a1B2c3" } }

Cheap, side-effect-free credential check — use it as the connection test in n8n, Zapier, or your own tooling.

Upload an input image

Each job animates a source image. If it's already hosted on a public HTTPS URL you can skip this step and pass that URL directly as image_url. Otherwise request an upload slot and PUT the file:

POST /api/v1/uploads
POST https://getmecompute.com/api/v1/uploads
Authorization: Bearer gmc_live_…
Content-Type: application/json

{ "filename": "frame.jpg", "content_type": "image/jpeg" }

// → { "upload_url": "https://…presigned…", "s3_url": "https://…/uploads/…", "expires_in": 300 }

// Then upload the raw bytes (within 5 minutes):
curl -X PUT "<upload_url>" -H "Content-Type: image/jpeg" --data-binary @frame.jpg

content_type must be image/jpeg, image/png, or image/webp. Use the returned s3_url as the job's image_url.

Submit a job

POST /api/v1/jobs
POST https://getmecompute.com/api/v1/jobs
Authorization: Bearer gmc_live_…
Content-Type: application/json

{
  "model": "ltx-2-3",
  "prompt": "A calm ocean at golden hour, gentle waves",
  "image_url": "https://your-bucket.s3.amazonaws.com/frame.jpg",
  "duration": "10s",
  "aspect_ratio": "16:9",
  "resolution": "1080p",
  "quality": "standard",
  "webhook_url": "https://your-app.com/hooks/video-done"
}
FieldDescription
modelRequired. Model id — wan-2-2 or ltx-2-3 or ltx-2-3-t2v. List the live set with GET /api/v1/models.
promptRequired. Describes the motion you want. See Getting great results.
image_urlRequired. Publicly fetchable URL of the source image (the video's first frame), or the s3_url from /api/v1/uploads.
durationRequired. Clip length as a string, e.g. "5s" or "10s". Must be one of the selected model's offered durations.
aspect_ratioRequired. e.g. "16:9", "9:16", "1:1" — from the model's offered ratios.
resolutionRequired. e.g. "720p" or "1080p" — from the model's offered resolutions.
qualityOptional, default standard. One of fast, standard, high, highest (the dashboard labels fast as “Faster”). Affects the per-second rate.
styleOptional. A curated style id from GET /api/v1/styles (e.g. anime-v1, cinematic-v1) — the tile picker on the dashboard. Applies the style template on top of your prompt at generation time; a style's price_multiplier scales the per-second rate (1.0 for the launch styles). Unknown ids are rejected with 400; styles with a non-null model only work on that model.
webhook_urlOptional. If set, we POST to this URL when the job finishes — see Webhooks & automation.

All option values are validated against the model's live configuration, and the price is computed server-side from the official rate card — a client can never set its own price.

Retries & idempotency

Send an Idempotency-Key header (any string ≤ 200 chars) to make retries safe: a repeated request with the same key within 24 hours returns the original job (with idempotent_replay: true in the body and an Idempotent-Replay: true response header) instead of creating — and billing — a second one. If the original request is still in flight you get a 409 with code: "conflict"; retry shortly.

Idempotent submit
curl -X POST https://getmecompute.com/api/v1/jobs   -H "Authorization: Bearer $GMC_API_KEY"   -H "Idempotency-Key: order-8412-video-1"   -H "Content-Type: application/json" -d '{…}'

Advanced parameters

Optional per-job overrides of the inference pipeline (the dashboard's Advanced section). Omitted fields use the model defaults. Out-of-range values are rejected with a 400 naming the field.

FieldDescription
sample_stepsInteger 4–60. Denoising step count; overrides the quality tier's step mapping (pricing still follows the tier). Both models.
seedInteger 0–2147483647 (values outside 0..2³¹−1 are rejected), default 42. Same seed + same settings reproduces the same clip. Both models.
negative_promptString, ≤ 2000 chars. What the model should steer away from. LTX-2.3 only.
video_cfg_scaleNumber 1–15, default 3.0. Prompt-guidance strength for video. LTX-2.3 only.
audio_cfg_scaleNumber 1–15, default 7.0. Prompt-guidance strength for audio. LTX-2.3 only.
stg_scaleNumber 0–5, default 1.0. Spatiotemporal guidance (video). LTX-2.3 only.
rescale_scaleNumber 0–1, default 0.7. CFG rescale; tames over-saturation. LTX-2.3 only.
fpsNumber 16–50, default 24. Output frame rate; duration is unchanged, the frame count scales. LTX-2.3 only.
generate_audioBoolean, default true. false ships a silent MP4. LTX-2.3 only.

Response

200 OK
{
  "message": "Job submitted successfully",
  "jobId": "385df601-fafb-4549-b8a8-…",
  "job_id": "385df601-fafb-4549-b8a8-…",
  "cost": 0.36
}

Errors

Every error is {"error": "human message", "code": "machine_code"} — branch on code, show error to humans.

StatusMeaning
400 invalid_requestA required field is missing, or a value isn't offered by the selected model (the error message names the field).
400 limit_reachedA per-account resource cap was hit — e.g. 10 active webhook endpoints. Remove one and retry.
401 unauthorizedMissing, invalid, revoked, or expired API key.
409 conflictA request with the same Idempotency-Key is still in flight — retry shortly.
429 rate_limitedOver the request-rate limit — honor the Retry-After header.
500 / 502 upstream_errorThe job couldn't be dispatched for processing (502 = upstream rejection, 500 = network-level failure); it is marked failed and you are not billed.

Check a job

GET /api/v1/jobs/{id}
GET https://getmecompute.com/api/v1/jobs/385df601-…
Authorization: Bearer gmc_live_…

Returns the job's status, its settings and cost, and — once completed — output_url: a presigned download link for the MP4, valid for 1 hour (re-fetch the job for a fresh link). Failed jobs include an error_message. A key can only read its owner's jobs (404 otherwise). Prefer webhooks over polling when you can — but if you poll, every 15–30 seconds is plenty (jobs take minutes).

Status valueMeaning
pendingQueued and waiting for capacity.
runningRendering now.
completedDone — output_url holds the MP4 download link.
failed / failed_oomGeneration failed (failed_oom = the resolution/duration was too demanding — try lower settings). Never billed.

List your jobs

GET /api/v1/jobs
GET https://getmecompute.com/api/v1/jobs?limit=20&status=completed
Authorization: Bearer gmc_live_…

Most-recent first. limit is 1–100 (default 20); status optionally filters to one of the status values above; created_after / created_before take ISO timestamps (handy for polling integrations). The response includes next_cursor — pass it back as ?cursor= for the next page (null when you've reached the end).

List models & prices

GET /api/v1/models
GET https://getmecompute.com/api/v1/models

No auth required. Returns the active models with their offered durations, aspect_ratios, resolutions, and the full prices matrix (prices[resolution][quality] = $/second). This is the same data that drives the submit form and the public rate card — use it to build pickers or estimate costs in your own tools.

Webhook endpoints

Beyond the per-job webhook_url, you can subscribe endpoints to every job event on your account — designed for automation platforms like Zapier and n8n. Manage them at Dashboard → Webhooks or via POST/GET /api/v1/webhook-endpoints and DELETE /api/v1/webhook-endpoints/{id}. Payloads, event types, and signature verification are covered in Webhooks & automation.

Rate limits

Per account: 300 reads/min, 30 job creations/min (the full allowance is available as a burst, so a 30-scene story submits in one go), and 60 writes/min (uploads + webhook-endpoint changes). There are no spend caps and no cap on queued jobs — every job is priced server-side at submission and tracked on your dashboard, and deep queues are what the platform is for. Over-limit requests get a 429 with Retry-After and X-RateLimit-* headers; back off and retry. Need more? Contact us.

Use it from Claude or an agent

The whole API is also exposed over the Model Context Protocol — connect Claude Code, Cursor, or any MCP client and let the agent submit and track jobs for you. See MCP — use from Claude & agents.

OpenAPI spec

The full machine-readable contract lives at GET /api/v1/openapi.json — feed it to SDK generators, GPT Actions, or your agent framework of choice.

End-to-end example

bash
# 1. Upload the source image
SLOT=$(curl -s -X POST https://getmecompute.com/api/v1/uploads \
  -H "Authorization: Bearer $GMC_API_KEY" -H "Content-Type: application/json" \
  -d '{"filename":"frame.jpg","content_type":"image/jpeg"}')
curl -s -X PUT "$(echo $SLOT | jq -r .upload_url)" \
  -H "Content-Type: image/jpeg" --data-binary @frame.jpg

# 2. Submit the job
JOB=$(curl -s -X POST https://getmecompute.com/api/v1/jobs \
  -H "Authorization: Bearer $GMC_API_KEY" -H "Content-Type: application/json" \
  -d "{\"model\":\"ltx-2-3\",\"prompt\":\"A calm ocean at golden hour\",
       \"image_url\":\"$(echo $SLOT | jq -r .s3_url)\",
       \"duration\":\"10s\",\"aspect_ratio\":\"16:9\",\"resolution\":\"720p\"}")

# 3. Poll until completed (or use webhook_url instead)
curl -s https://getmecompute.com/api/v1/jobs/$(echo $JOB | jq -r .job_id) \
  -H "Authorization: Bearer $GMC_API_KEY" | jq '{status, output_url}'