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.
Training and fine-tuning are not available — a single run can cost tens of dollars. Inference models are unrestricted.

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.

HTTP header
Authorization: Bearer gp_xxxxxxxx...
Keep keys in server-side environment variables. A key in browser code lets anyone spend your credits.

Quickstart

curl (text)
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!" }]
  }'
OpenAI SDK (Node.js)
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!" }],
});
Image / video / audio
# 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"
Use the status_url and response_url from the submit response as-is. Status resolves to COMPLETED (success), FAILED, or EXPIRED (canceled/expired). On FAILED, fetching the result tells you which parameter was invalid and why.

Endpoints

Method · PathDescription
POST /chat/completionsText generation (streaming supported), OpenAI-compatible
POST /completionsLegacy completions
GET /modelsAvailable 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}/statusGeneration status
GET /media/requests/{id}Generation result
PUT /media/requests/{id}/cancelCancel 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 IDNameCredits / image
gp/flux/schnellFLUX Schnell~0.1
gp/nano-banana-proNano Banana Pro~1.8
gp/bytedance/seedream/v5/lite/text-to-imageSeedream 5.0 Lite~1.1
bytedance/seedream/v5/pro/text-to-imageSeedream 5.0 Pro~4.1
bytedance/seedream/v5/pro/editSeedream 5.0 Pro (edit)~4.1
openai/gpt-image-2GPT Image 2~3.0
Video model IDNameCredits
minimax/h3/text-to-videoMiniMax H3~12 / sec
gp/veo3.1Veo 3.1~12 / sec
gp/minimax/hailuo-2.3/pro/image-to-videoHailuo 2.3 Pro~9 / call
bytedance/seedance-2.5/text-to-videoSeedance 2.5~26 / sec
bytedance/seedance-2.5/image-to-videoSeedance 2.5 (i2v)~26 / sec
Audio model IDNameCredits
bytedance/seed-audio-1.0Seed Audio 1.0 (speech / music)~4.5
gp/mmaudio-v2/text-to-audioMMAudio v2 (sound effects)~1.2
Credit figures are approximate, at default resolution and length. What you actually pay depends on the resolution, duration, and image count you request, and is settled from real usage after the run finishes.

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.
Errors use the OpenAI shape ({ error: { message, code, type } }). When a request parameter is invalid, the response body says which one and why.