Genie
Documentation

Image generation

Open-weights diffusion via a local ComfyUI sidecar. OpenAI-compat shape — drop-in for POST api.openai.com/v1/images/generations. Sync (default) or async — pick per request.

Endpoint

POST https://api.genie.tech/v1/images/generations
Authorization: Bearer sk-genie-{your-key}
Content-Type: application/json

Try it

Try it nowImage generation (async kickoff)
Sign in to tryPOST /api/v1/images/generations

SDK + curl

curl https://api.genie.tech/v1/images/generations \
  -H "Authorization: Bearer $GENIE_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "sdxl-turbo",
    "prompt": "a tiny cat astronaut",
    "size": "512x512",
    "n": 1
  }'

Request body

  • modelflux-schnell | sdxl-turbo (default flux-schnell). Free-tier orgs always served sdxl-turbo; substitution surfaced in response.
  • prompt — required. 1–4000 chars. Pre-flight content moderation rejects unsafe prompts before fleet dispatch.
  • n — number of images (1–10).
  • size256x256 | 512x512 | 1024x1024 | 1792x1024 | 1024x1792.
  • seed, negative_prompt — optional.
  • modesync (default, returns the URL once gen completes) | async (returns 202 + job id; poll /v1/jobs/:id). See Async jobs.
  • webhook{ url, secret? }; called when an async job finishes. Supply only with mode=async.

Response

{
  "created": 1731020000,
  "data": [{ "url": "https://blob.genie.tech/.../image-0.png" }],
  "model_substituted": null
}

Image URLs are Vercel Blob — public-readable, no expiry. Save them yourself if you need long-term retention.