SUMMA

Developer Platform

cURL

Every endpoint and every mode straight from the terminal — no SDK required. Covers both the OpenAI-compatible and Anthropic-compatible surfaces.

1

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.

2

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!" }]
  }'
3

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) and summa-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 model string (or the summa block) — nothing else in your request changes.

4

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"
}
  }'
  • panel is 2 to 8 distinct slugs — the same ids as summa/<slug> without the summa/ prefix.

  • moderator is optional and must be one of the slugs in panel; it reads every panelist's turn and writes the single synthesized answer. Omit it and panel[0] moderates — so ordering matters when you leave it out.

  • A malformed summa block returns 400 — usually fewer than 2 panelists, duplicate slugs, or a moderator that is not in panel.

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 the provider's exact reported cost per call plus a 15% platform fee; prompt caching is automatic and its discount flows straight into what you pay). Every response's usage block includes summa_cost_cents — the exact amount that call debited — plus cache-hit counts, and you can pass "reasoning_effort": "low" in the body to cut reasoning spend on simple calls. Building an agent that needs to integrate Summa itself? Point it at the machine-readable llms.txt at https://summachat.com/llms.txt.