Skip to content
Create

API

Make images and videos from your own code. Calls spend your account's credits at the same price as in the app. Using Claude or ChatGPT instead? See MCP.

Loading your keys...

Quick start

Send your key in the Authorization header as a Bearer token. Requests and answers are JSON. Call the API from a server or a script, not from a web page: a key in a web page can be read by anyone who opens it.

  • Up to 5 active keys per account.
  • Every key has a daily credit cap (500 to start, up to 5,000). It resets at 00:00 UTC.
  • Credits come out of your account balance, at the same price as in the app.
  • 30 requests per minute per key.
  • The key is shown once. We keep only a hash, so a lost key cannot be recovered: revoke it and make a new one.

Examples

Make an image

Answers when the picture is ready (usually under a minute). output_url is a signed link that works for about an hour.

curl
curl https://create.vin/api/v1/images \
  -H "Authorization: Bearer crk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "A lighthouse at dusk, soft film look", "aspect": "16:9"}'

Make a video, then wait for it

A video takes a minute or more, so the call answers at once with an id (status 202). Ask for that id until status is complete or failed.

curl
# 1. Start the video
curl https://create.vin/api/v1/videos \
  -H "Authorization: Bearer crk_live_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "Waves rolling onto a beach", "duration": 5, "aspect": "16:9"}'

# 2. Check on it (use the id from step 1)
curl https://create.vin/api/v1/generations/GENERATION_ID \
  -H "Authorization: Bearer crk_live_YOUR_KEY"

Check credits

Shows the account's credits and how much of this key's daily cap is left. It costs nothing.

curl
curl https://create.vin/api/v1/credits \
  -H "Authorization: Bearer crk_live_YOUR_KEY"

Endpoints

POST/api/v1/images

Makes an image and waits for it.

promptrequired
string. What the picture should show. Up to 4,000 characters.
aspect
string. One of auto, 1:1, 3:4, 4:3, 4:5, 5:4, 9:16, 16:9, 21:9, 2:3, 3:2.
model
string. A model id from GET /api/v1/models. Leave out for the default.
Answer
{ "id": "…", "status": "complete", "output_url": "https://…", "credits_charged": 12 }
POST/api/v1/videos

Starts a video. Answers 202 at once; poll the generation.

promptrequired
string. What should happen. Up to 20,000 characters.
image_url
string. https link to a PNG, JPEG or WebP (up to 10 MB) to start from.
duration
number. Seconds. One of 3, 5, 8, 10, 15.
aspect
string. Same values as for images.
model
string. A model id from GET /api/v1/models.
Answer
{ "id": "…", "status": "pending", "credits_charged": 70 }
GET/api/v1/generations/:id

One generation: pending, complete or failed.

Answer
{ "id": "…", "tool": "video", "status": "complete", "credits": 70, "created_at": "…", "output_url": "https://…" }
GET/api/v1/credits

Credits left on the account and on this key today.

Answer
{ "plan": "pro", "used": 800, "limit": 4000, "remaining": 3200, "key": { "daily_cap": 500, "used_today": 24, "remaining_today": 476 } }
GET/api/v1/models

The model ids you can pass as model, with the starting price in credits.

Answer
{ "image": [{ "id": "create-image", "label": "Create Image", "from_credits": 12, "default": true }], "video": [ … ] }

Errors

Every error has the same shape: { "error": { "code": "...", "message": "..." } }.

StatusCodeMeaning
400invalid_requestA field is missing or not allowed. The message names it.
401unauthorizedThe key is missing, wrong or revoked.
402plan_requiredThe account is not on a paid plan.
402insufficient_creditsNot enough credits for this call. Top up or wait for credits to renew.
404not_foundNo generation with that id on this account.
429daily_cap_reachedThis call would pass the key's daily credit cap. It resets at 00:00 UTC.
429rate_limitedMore than 30 requests in a minute. Wait for the Retry-After seconds.
5xxserver_error / unavailableSomething failed on our side or a model is down. Credits for a failed generation are given back.