cURL
Every endpoint and every mode straight from the terminal — no SDK required. Covers both the OpenAI-compatible and Anthropic-compatible surfaces.
Connect
There is nothing to install — Summa speaks two HTTP dialects and you hit them directly. Every request carries your key. On the OpenAI-compatible surface use the Authorization: Bearer header; the Anthropic-compatible endpoint accepts x-api-key as well. Create a key on the API Keys page, then export it so the snippets below run as-is.
terminal
# Export your key once; every snippet below reads it.
export SUMMA_API_KEY="YOUR_API_KEY"
# OpenAI-compatible base — Chat Completions, Responses, GET /models
export OPENAI_BASE="https://alpha.backend.summachat.com/api/v1"
# Anthropic-compatible base — the SDK appends /v1/messages
export ANTHROPIC_BASE="https://alpha.backend.summachat.com/api"The base URLs above are already pointed at this deployment — copy them verbatim.
401 means a missing or invalid key. 402 means you are out of API credit — top up on the Credits page.
Single mode
The model string is the only thing that changes between modes. Start with summa-fast — one fast model with full tool support, the best default for agentic work. Any single catalog model works too: pass summa/<slug>, e.g. summa/openai/gpt-5.
POST /chat/completions
curl -X POST "$OPENAI_BASE/chat/completions" \
-H "Authorization: Bearer $SUMMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "summa-fast",
"messages": [{ "role": "user", "content": "Hello!" }]
}'Debate mode
Swap the model to summa-debate and a panel of models each answers, then a moderator synthesizes one final answer. Debate is slower and pricier — a 3-model debate costs roughly 3x a single model — and tools are accepted but not invoked. Add "stream": true and run curl -N so the terminal renders the live transcript as it arrives instead of buffering.
POST /chat/completions (streaming)
curl -N -X POST "$OPENAI_BASE/chat/completions" \
-H "Authorization: Bearer $SUMMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "summa-debate",
"stream": true,
"messages": [{ "role": "user", "content": "Design a rate limiter. Trade-offs?" }]
}'Watch the panel deliberate, then synthesize: with -N you see the header, each model's labeled turn as it finishes, the ## Synthesized answer divider, and then the final answer stream in. Drop the flag (or "stream": false) and you get the synthesized answer only — no transcript.
You'll feel the debate. On a summa-debate request the panel streams a live transcript — a short header, then each model's turn as it finishes, then a ── Synthesized answer ── divider before the moderator's final answer streams token by token. No more staring at a frozen stream while the panel thinks.
Two curated panels ship ready to use:
summa-debate-coding(Claude Sonnet 4.5 moderating GPT-5 + Gemini 2.5 Pro) andsumma-debate-reasoning(GPT-5 moderating Claude Opus 4.1 + Gemini 2.5 Pro).Streaming is required to watch the debate — non-streaming returns the answer alone.
Switching modes is just editing the
modelstring (or thesummablock) — nothing else in your request changes.
Custom panel
To pick the models yourself, expand the summa block into the JSON body. It overrides the model string and works on /chat/completions, /v1/messages, and /responses alike.
POST /chat/completions (custom panel)
curl -N -X POST "$OPENAI_BASE/chat/completions" \
-H "Authorization: Bearer $SUMMA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "summa-debate",
"stream": true,
"messages": [{ "role": "user", "content": "Hello!" }],
"summa": {
"panel": ["openai/gpt-5", "anthropic/claude-sonnet-4.5"],
"moderator": "anthropic/claude-sonnet-4.5"
}
}'panelis 2 to 8 distinct slugs — the same ids assumma/<slug>without thesumma/prefix.moderatoris optional and must be one of the slugs inpanel; it reads every panelist's turn and writes the single synthesized answer. Omit it andpanel[0]moderates — so ordering matters when you leave it out.A malformed
summablock returns400— usually fewer than 2 panelists, duplicate slugs, or amoderatorthat is not inpanel.
Get models
List and search the catalog with GET /models. It paginates via limit and offset and filters via search. Take any id from data[] and use it as your model — for a summa panel, drop the summa/ prefix.
GET /models
curl "$OPENAI_BASE/models?search=claude&limit=50&offset=0" \
-H "Authorization: Bearer $SUMMA_API_KEY"
# -> { "object": "list", "data": [{ "id": "summa/anthropic/claude-sonnet-4.5", ... }], "has_more": true }
# Use "summa/anthropic/claude-sonnet-4.5" as a single model,
# or "anthropic/claude-sonnet-4.5" inside a summa panel.The Anthropic surface
The same modes are available on the Anthropic-compatible endpoint, which streams debate as native thinking blocks rather than a visible transcript.
POST /v1/messages (Anthropic protocol)
curl -X POST "$ANTHROPIC_BASE/v1/messages" \
-H "x-api-key: $SUMMA_API_KEY" \
-H "anthropic-version: 2023-06-01" \
-H "Content-Type: application/json" \
-d '{
"model": "summa-debate",
"max_tokens": 1024,
"messages": [{ "role": "user", "content": "Hello!" }]
}'On /v1/messages a summa-debate request streams each panelist's turn as a thinking block, then the synthesized answer as text. To go single, change the model to summa-fast or summa/<slug>; to customize the panel, add the same summa block shown above.
You'll feel the debate. On a summa-debate request each panelist's turn streams as a thinking block as it lands — you watch the models deliberate in real time — and then the moderator's synthesized answer streams as normal text. In Claude Code, press Ctrl+O to expand the live thinking.
Next
Browse the full catalog on the Models page and manage your prepaid balance on the Credits page (billing is model token cost plus a 30% platform fee). Building an agent that needs to integrate Summa itself? Point it at the machine-readable llms.txt at https://summachat.com/llms.txt.