GenPresso API
Call text, image, video, and audio models with one key. No per-model accounts — everything bills to your GenPresso credits.
Overview
The GenPresso API gives you one key and one credit balance across many kinds of generative models. Text follows the OpenAI shape exactly; image, video, and audio are asynchronous — you submit and then poll.
- Text — current models from the major labs (Anthropic, OpenAI, Google, and more). SDKs only need a new baseURL.
- Image, video, and audio — close to a hundred generative models behind the same key.
- No separate accounts or payment methods per model. One balance covers everything.
Authentication
Send your key as a bearer token on every request. Keys start with gp_ and are shown only once, right after you create them.
Authorization: Bearer gp_xxxxxxxx...Quickstart
curl https://genpresso.ai/api/v1/chat/completions \
-H "Authorization: Bearer $GENPRESSO_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "anthropic/claude-sonnet-5",
"messages": [{ "role": "user", "content": "Hello!" }]
}'import OpenAI from "openai";
const client = new OpenAI({
baseURL: "https://genpresso.ai/api/v1",
apiKey: process.env.GENPRESSO_API_KEY,
});
const res = await client.chat.completions.create({
model: "anthropic/claude-sonnet-5",
messages: [{ role: "user", content: "Hello!" }],
});# 1) Submit — returns a request_id and the URLs to poll
curl -X POST https://genpresso.ai/api/v1/media/gp/flux/schnell \
-H "Authorization: Bearer $GENPRESSO_API_KEY" \
-H "Content-Type: application/json" \
-d '{ "prompt": "a red bicycle on a beach" }'
# 2) Check status
curl https://genpresso.ai/api/v1/media/requests/$REQUEST_ID/status \
-H "Authorization: Bearer $GENPRESSO_API_KEY"
# 3) Fetch the result (once status is COMPLETED)
curl https://genpresso.ai/api/v1/media/requests/$REQUEST_ID \
-H "Authorization: Bearer $GENPRESSO_API_KEY"Endpoints
| Method · Path | Description |
|---|---|
| POST /chat/completions | Text generation (streaming supported), OpenAI-compatible |
| POST /completions | Legacy completions |
| GET /models | Available text models with credit rates |
| GET /generations/{id} | Billing detail for one text call |
| POST /media/{model} | Submit an image, video, or audio generation |
| GET /media/requests/{id}/status | Generation status |
| GET /media/requests/{id} | Generation result |
| PUT /media/requests/{id}/cancel | Cancel a generation |
Featured models
Drop the model ID straight into the /media/{model} path. These are just the highlights — models not listed here work the same way.
| Image model ID | Name | Credits / image |
|---|---|---|
| gp/flux/schnell | FLUX Schnell | ~0.1 |
| gp/nano-banana-pro | Nano Banana Pro | ~1.8 |
| gp/bytedance/seedream/v5/lite/text-to-image | Seedream 5.0 Lite | ~1.1 |
| bytedance/seedream/v5/pro/text-to-image | Seedream 5.0 Pro | ~4.1 |
| bytedance/seedream/v5/pro/edit | Seedream 5.0 Pro (edit) | ~4.1 |
| openai/gpt-image-2 | GPT Image 2 | ~3.0 |
| Video model ID | Name | Credits |
|---|---|---|
| minimax/h3/text-to-video | MiniMax H3 | ~12 / sec |
| gp/veo3.1 | Veo 3.1 | ~12 / sec |
| gp/minimax/hailuo-2.3/pro/image-to-video | Hailuo 2.3 Pro | ~9 / call |
| bytedance/seedance-2.5/text-to-video | Seedance 2.5 | ~26 / sec |
| bytedance/seedance-2.5/image-to-video | Seedance 2.5 (i2v) | ~26 / sec |
| Audio model ID | Name | Credits |
|---|---|---|
| bytedance/seed-audio-1.0 | Seed Audio 1.0 (speech / music) | ~4.5 |
| gp/mmaudio-v2/text-to-audio | MMAudio v2 (sound effects) | ~1.2 |
For the full list of text models and their per-million-token credit rates, call GET /models.
Pricing
When a request finishes, real usage is converted to credits and deducted — the same basis the studio uses for generations.
- Text is settled on input and output tokens; media on image count, resolution, and duration.
- Failed requests are not billed.
- Media is charged at completion from real usage, not at submit time.
Usage is broken down by day, model, and key on the developer page, and every charge also lands in your credit history.
Limits and notes
- A minimum balance is checked before each request; below it you get a 402.
- Per-minute request limits and a media concurrency limit apply; exceeding them returns 429 with Retry-After.
- There is a daily credit cap, and you can set an additional per-key cap.
- Request bodies are capped at 4MB.
- Output URLs expire after a retention window — download anything you need to keep.