API Playground
InteractiveTry every model and endpoint in the browser with your own key — streaming output, request inspector, and generated code you can paste straight into your app.
The playground is a chat console for the API at /docs/playground. You talk to a model, and the playground sends the same requests your code would send: to one of three endpoints, with the model, system prompt, parameters and tools you set. Every request can be read back as code and as raw stream events.
Start
- Give it a key — Signed in, the playground uses the API key of your account and shows your balance. Not signed in, choose Add key and paste a key: it is kept in this tab only and is never saved.
- Pick an endpoint and a model — The top bar holds the endpoint switch and the model picker. A new conversation starts on Chat Completions with
shannon-3. - Send a message — Type below and press Enter. Every reply joins the conversation, so the next message continues it. The empty screen offers three starter prompts and a ready tool-call example.
You find and rotate your key on the Keys & usage page. Keys & usage
Endpoints and models
The endpoint switch decides which request format the playground builds. You can change it in the middle of a conversation; the messages stay.
| Endpoint | Request it sends | Reference |
|---|---|---|
| Chat Completions | POST /v1/chat/completions | Chat Completions |
| Responses | POST /v1/responses | Responses API |
| Messages | POST /v1/messages | Anthropic Format |
The model picker lists what GET /v1/models returns. It can be searched, keeps your recent models on top, and shows for each model the price per 1M tokens, the context window and marks for tools, image input, reasoning and structured output.
The conversation
- Replies stream into the thread as they are written. The model's reasoning is shown in a block of its own that you can fold.
- Under each reply: time to the first token, tokens per second, elapsed time, input and output tokens with the cached and reasoning parts, an estimate of the cost of the turn, the finish reason and the response id.
- A message of yours can be edited and sent again from that point. A reply can be regenerated. A message can be deleted, and the deletion can be undone for a few seconds.
- Stop or the Esc key ends a reply that is being written.
- Images are attached with the image button, by pasting or by dropping a file, for models that take images. An image is scaled to 1,568 pixels on its long edge before it is sent. A file over 30 MB is skipped.
- The composer and the system prompt show a token count. For the hosted open-weight models it is the exact count from
POST /v1/tokenize. For the other models it is an estimate, marked with≈. - A failed request shows what to do next: set a key when the key was rejected, top up when the balance is used, the seconds to wait after too many requests, or a retry after a server error.
Request settings
The Settings button opens a panel with six tabs. Settings belong to the conversation: each conversation keeps its own.
| Tab | What it holds |
|---|---|
| System | The system prompt of the conversation, sent with every request. Five templates fill it in, and its token count is shown. |
| Parameters | Max output tokens, temperature, top_p, reasoning effort, stop sequences, seed, and the switches for streaming and web search. A control the selected endpoint has no field for is switched off and marked. |
| Tools | Tool definitions sent with the request: four presets (get_weather, read_file, run_shell, web_search) or your own definition as JSON, and tool_choice (auto, none, required or one tool by name). When the model calls a tool, the thread shows the call with a box for the result. With Offer sample results on, one click fills in a sample result. You can also type your own, then send it to continue the turn. |
| Structured | response_format: text, json_object or json_schema with a schema name and a JSON schema. With a schema set, the last answer is checked against it and marked in the thread as matching or not. The tab is switched off on the Messages endpoint, and an option the selected model does not take is not offered. |
| Code | The request of the current conversation as cURL, Python, Node or Go code, built from the conversation and its settings. The key is printed as YOUR_API_KEY. The code can be copied or opened in a large view. |
| Events | The last turn as it went over the wire: every stream event with its time offset and a filter, the assembled reply, the reply headers (x-request-id, content-type, retry-after, date) and the request body. These are kept until the page reloads. |
Input checks
Values you type are checked before a request is sent. A value out of range is marked at its field, and sending is held back until it is fixed.
| Setting | Check |
|---|---|
| Max output tokens | A whole number from 1 to the max_output_tokens of the model. |
| Temperature | A number from 0 to 2. Empty leaves the field out of the request. |
top_p | A number from 0 to 1. Empty leaves the field out of the request. |
seed | A whole number. |
| Stop sequences | At most 4, separated by commas. |
response_format | Must be one the selected model takes. A conversation moved to a model without json_schema or without response_format is held back with the reason. |
| Images | Removed from the message when you switch to a model that takes text only, with a note. |
Compare two models
Compare two models in the More menu adds a second model picker. Each message then goes to both models at the same time, with the same settings, and the two answers stand side by side, marked A and B. You can regenerate one side alone. When one side calls a tool, the result you send continues that side only.
Share, export and import
- Copy share link packs the conversation into the link itself, in the part after
#. Nothing is uploaded. Images, your key and the details of the last run are left out. Whoever opens the link gets the conversation as a new one in their own playground. - A conversation too long for a link is refused with a note. Download it as JSON instead.
- Download conversation JSON saves the conversation with its settings as a file. Import JSON in the conversations panel opens such a file.
- Copy as cURL copies the current request as one cURL command.
What is kept where
| What | Where it is kept |
|---|---|
| Conversations, saved tools, recent models, panel layout | In this browser. They are not sent to Shannon and do not follow you to another device. |
| API key | In the memory of the open tab. A pasted key is gone when the page reloads or the tab closes. Signed in, the key is read from your account each time. |
| Stream events, headers and request of the last turn | In the open page, until it reloads. |
| Requests | Sent from your browser to the API with your key. They are counted against your balance like any other API request. |
Keyboard
| Keys | What it does |
|---|---|
Enter | Send the message. |
Shift + Enter | Start a new line. |
Ctrl + K | Open the command palette: switch endpoint or model, set a system template, start a new conversation, toggle streaming, tools or compare. On a Mac: ⌘ K. |
Esc | Stop the reply that is being written, or close an open panel on a narrow screen. |