If you build with large language models, you have probably standardised on OpenRouter: one key, one balance, hundreds of chat models behind a single OpenAI-compatible endpoint. It is an excellent piece of infrastructure — and it stops at text. The moment your product needs a generated video, a cover image or a music track, you are back to opening provider accounts one by one.

AI Generate applies the same idea OpenRouter nailed for LLMs to every other modality. One OpenAI-compatible API, one credit pool, one bill — across 300+ models spanning chat, image, video and music.

Where OpenRouter ends

OpenRouter routes chat/completions across 70+ providers. What it does not cover: text-to-video (Veo 3.1, Wan 2.7, Seedance 2), image generation and editing (Flux, Nano Banana, GPT-Image), or music (Suno). For those you would normally sign up to fal, Replicate, kie.ai, Suno and a couple of others — separate keys, separate dashboards, separate invoices, separate SDKs.

The same pattern, every modality

With AI Generate the request shape you already know does not change. Point your OpenAI client at our host, swap the key, and call chat exactly as before:

curl https://aimarcusimage.eu/api/v1/chat/completions \
  -H "Authorization: Bearer sk-aig-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"google/gemini-3-1-pro","messages":[{"role":"user","content":"Summarise this release in 3 bullets"}]}'

Need an image from the same key and the same balance? Same surface:

curl https://aimarcusimage.eu/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-aig-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"google/nano-banana","input":{"prompt":"a red fox in autumn light, cinematic","image_size":"16:9"}}'

And video from the same account, no new contract:

curl https://aimarcusimage.eu/api/v1/jobs/createTask \
  -H "Authorization: Bearer sk-aig-..." \
  -H "Content-Type: application/json" \
  -d '{"model":"google/veo-3-1","input":{"prompt":"slow dolly over a misty pine forest at dawn"}}'

Long-running jobs return a taskId you poll, or you register a webhook. Retries are idempotent on the task id, and you can set daily and monthly spend caps that return HTTP 402 when hit — so a runaway loop never produces a surprise invoice.

Honest about what this is

AI Generate is an aggregator. We route your call to the upstream provider and add a margin for the consolidation. If you only ever call one model and want the absolute floor price, going direct will be cheaper. The trade we make easy is the opposite case: you build across several modalities, you do not want five accounts and five invoices, and you want models like Veo and Suno reachable from the same OpenAI-compatible surface as your LLM calls. You pay per call, there is no subscription, and credits do not expire.

OpenRouter vs AI Generate vs going direct

 OpenRouterAI GenerateDirect providers
Chat / LLMYes (its core)YesYes
Image generationNoYes (Flux, Nano Banana, GPT-Image)Per provider
Video generationNoYes (Veo 3.1, Wan, Seedance)Per provider
MusicNoYes (Suno)Per provider
BillingOne balanceOne credit poolOne invoice per provider
Request shapeOpenAI-compatibleOpenAI-compatibleDifferent per provider

Which should you pick?

If your product is text-only, OpenRouter is hard to beat — keep using it. If you are adding generated media and do not want to babysit a fleet of provider accounts, run media (and, if you like, your LLM calls too) through AI Generate so the whole stack shares one key, one balance and one set of spend caps.

FAQ

Is AI Generate OpenAI-compatible like OpenRouter? Yes — chat uses the standard /v1/chat/completions shape with streaming. Media uses a simple create-task / poll (or webhook) pattern.

Can I use it only for media and keep OpenRouter for chat? Absolutely. Many teams do exactly that — AI Generate for video/image/music, their existing router for LLMs.

Is there a subscription? No. Pay per call from a prepaid credit balance, top up from $10, credits never expire.

Do I get the same model output as going direct? Yes — we route to the upstream provider; you get the provider's output with one bill and one integration.

Read the docs or get an API key and test any model in the playground first.