Build on one workspace for every model

Everything you need to go from signed-up to shipping: a five-minute quickstart, the handful of concepts that make UltraGPT different, and reference for the API, CLI and SDKs.

Jump to QuickstartFull API reference
Quickstart

Five minutes to your first response

Create a key, install nothing (or the SDK of your choice), and send a message to any model.

  1. Sign in and open Settings → API keys. Create a key and copy it somewhere safe.
  2. Pick any model id from the model list — say gpt-5, claude-sonnet-5 or gemini-2.5-pro.
  3. Send a request with your key. The shape is the same for every model.
curl
curl https://api.ultragpt.pro/v1/messages \
-H "Authorization: Bearer $ULTRAGPT_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "claude-sonnet-5",
"messages": [{"role": "user", "content": "Hello"}]
}'
 
# → { "content": "Hi! How can I help?", "model": "claude-sonnet-5" }
Core concepts

Six ideas the rest of the docs assume

Read these once and everything else — pricing, routing, the API surface — falls into place.

Windows, not credits

Access is time-based. Each plan includes a generous message allowance that refreshes on a rolling 4-hour window — no per-token accounting, no balance to top up.

One model namespace

Every provider's models live under one list. Switch model mid-conversation and the thread, system prompt and tools carry over untouched.

Device-first encryption

Messages are sealed on your device before they reach us. We relay the sealed payload to the official provider API; no chat content is stored in our database.

Parallel conversations

Each conversation runs independently on the server and keeps generating when you navigate away. Reattach any time; stop any of them on demand.

Workspaces & keys

Teams share folders and conversations, and issue per-project API keys with their own usage reporting — all under one bill.

Weekly model refresh

New models are added the week they ship and slotted into the same namespace. Retired models are announced before they go.

API

One endpoint, every model

The request shape never changes — swap the model id and keep the rest. Full parameter reference lives on the developer section of the home page.

POST /v1/messagesSend a conversation, get a completion. Streaming via server-sent events.
POST /v1/imagesText-to-image and image edits across every image model.
POST /v1/audioSpeech-to-text and text-to-speech.
GET /v1/modelsList every model available to your key, with capabilities.
Full API reference →
Live catalog & limits

What the API serves right now

Read live from the developer API's public catalog and status feed and refreshed every five minutes. These are the same numbers GET /v1/models and the status page report.

Default limits per key

Requests per minute:
600
Concurrent requests:
50
Tokens per minute:
2M
ugpt_test_ keys:
10 RPM, 1 concurrent

Fees

Web search (:online or the web plugin):
$0.008 per search
Bring your own key:
5% fee on the token cost
Response-cache hits and moderation:
free
Browse every model with its API price →
CLI

The workspace from your terminal

Same account, same models, piped in and out of your shell.

ultragpt
$ ultragpt auth login
✓ signed in as you@example.com
 
$ ultragpt chat -m gpt-5 "summarise this" < notes.md
…
 
$ ultragpt models | grep vision
gpt-5 text, vision, tools
gemini-2.5-pro text, vision, audio, tools
Guides

Task-shaped walkthroughs

Longer reads for the things people ask about most.

Stream a response with server-sent events
Add "stream": true to a /v1/messages request and read the SSE body. Each event is a partial delta; the final event carries the full model id and stop reason. The SDKs expose this as an async iterator.
Switch models inside one conversation
Send the same messages array with a different model. History, system prompt and tool definitions are provider-agnostic, so the new model picks up exactly where the last one left off.
Give a whole team access with per-project keys
In a workspace, open Keys and create one key per project or environment. Each key has its own rate limits and usage report; revoking one never touches the others or anyone's login.
Call tools / functions
Pass a tools array with JSON-Schema parameters. When a model asks to call one, you get a structured tool-call back, run it your side, and return the result as a tool message. The format is identical across providers that support it.

Can't find what you need?

The Help Center covers accounts and billing; for anything else, a real person answers on the contact page.