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

  • model: flux-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).
  • size: 256x256 | 512x512 | 1024x1024 | 1792x1024 | 1024x1792.
  • seed, negative_prompt: optional.
  • mode: sync (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.