# GPT-6.1 Sol

GPT-6.1 Sol is OpenAI's upgrade to GPT-6 Sol for complex coding, computer use and professional work, with performance close to GPT-6 Astra at a lower cost. Send the official OpenAI Responses or Chat Completions request to TokLab: change the base URL and the API key, keep the body.

## Model ID

| Model ID      | Context window            | Max output  | Reasoning effort                        | Default effort |
| ------------- | ------------------------- | ----------- | --------------------------------------- | -------------- |
| `gpt-6.1-sol` | 1.05M tokens (922K input) | 128K tokens | `low`, `medium`, `high`, `xhigh`, `max` | `medium`       |

Input: text and images. Output: text. Knowledge cutoff: April 30, 2026. See the [pricing page](https://toklab.ai/pricing) for current prices.

## Quick example

```bash
curl https://api.toklab.ai/v1/responses \
  -H "Authorization: Bearer $TOKLAB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-6.1-sol",
    "input": "Summarize the trade-offs of event sourcing in three bullet points."
  }'
```

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["TOKLAB_API_KEY"],
    base_url="https://api.toklab.ai/v1",
)

response = client.responses.create(
    model="gpt-6.1-sol",
    input="Summarize the trade-offs of event sourcing in three bullet points.",
)
print(response.output_text)
```

```javascript
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: process.env.TOKLAB_API_KEY,
  baseURL: "https://api.toklab.ai/v1",
});

const response = await client.responses.create({
  model: "gpt-6.1-sol",
  input: "Summarize the trade-offs of event sourcing in three bullet points.",
});
console.log(response.output_text);
```

```go
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
	"os"
)

func main() {
	body := []byte(`{"model": "gpt-6.1-sol",
		"input": "Summarize the trade-offs of event sourcing in three bullet points."}`)
	req, _ := http.NewRequest("POST", "https://api.toklab.ai/v1/responses", bytes.NewReader(body))
	req.Header.Set("Authorization", "Bearer "+os.Getenv("TOKLAB_API_KEY"))
	req.Header.Set("Content-Type", "application/json")
	resp, err := http.DefaultClient.Do(req)
	if err != nil {
		panic(err)
	}
	defer resp.Body.Close()
	out, _ := io.ReadAll(resp.Body)
	fmt.Println(string(out))
}
```

## Endpoints

| Format                  | Method and path                                  | Authentication                                                                |
| ----------------------- | ------------------------------------------------ | ----------------------------------------------------------------------------- |
| OpenAI Responses        | `POST https://api.toklab.ai/v1/responses`        | `Authorization: Bearer <key>`                                                 |
| OpenAI Chat Completions | `POST https://api.toklab.ai/v1/chat/completions` | `Authorization: Bearer <key>`                                                 |
| Anthropic Messages      | `POST https://api.toklab.ai/v1/messages`         | `x-api-key: <key>` or `Authorization: Bearer <key>`, plus `anthropic-version` |

The OpenAI endpoints forward your request body as sent and return the official response. Keep the API key in server-side code.

## Parameters

Responses API fields:

| Name                                                                                                                                                                                                                                                                              | Type                | Required | Default       | Notes                                                                                          |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------- | -------- | ------------- | ---------------------------------------------------------------------------------------------- |
| `model`                                                                                                                                                                                                                                                                           | string              | Yes      | —             | `gpt-6.1-sol`.                                                                                 |
| `input`                                                                                                                                                                                                                                                                           | string or object\[] | Yes      | —             | A prompt, or input items: messages whose `content` holds `input_text` and `input_image` parts. |
| `instructions`                                                                                                                                                                                                                                                                    | string              | No       | —             | System (developer) instructions.                                                               |
| `max_output_tokens`                                                                                                                                                                                                                                                               | integer             | No       | Model maximum | 16–128000. Includes reasoning tokens.                                                          |
| `reasoning.effort`                                                                                                                                                                                                                                                                | enum                | No       | `medium`      | `low`, `medium`, `high`, `xhigh`, `max`. `none` and `minimal` are not supported.               |
| `reasoning.summary`                                                                                                                                                                                                                                                               | enum                | No       | —             | `auto`, `concise` or `detailed`: return a summary of the reasoning.                            |
| `reasoning.mode`                                                                                                                                                                                                                                                                  | enum                | No       | `standard`    | `standard` or `pro`.                                                                           |
| `reasoning.context`                                                                                                                                                                                                                                                               | enum                | No       | `auto`        | `auto`, `current_turn` or `all_turns`: which earlier reasoning is shown to the model.          |
| `text.verbosity`                                                                                                                                                                                                                                                                  | enum                | No       | `medium`      | `low`, `medium` or `high`.                                                                     |
| `text.format`                                                                                                                                                                                                                                                                     | object              | No       | —             | Structured output, for example `{"type": "json_schema", "name": "...", "schema": {...}}`.      |
| `temperature`, `top_p`, `top_logprobs`                                                                                                                                                                                                                                            | —                   | No       | —             | Not used by GPT-6.1 Sol, which always reasons. Ignored if sent.                                |
| `stream`                                                                                                                                                                                                                                                                          | boolean             | No       | `false`       | Stream the response as server-sent events.                                                     |
| `tools`, `tool_choice`, `parallel_tool_calls`, `max_tool_calls`, `include`, `metadata`, `store`, `truncation`, `prompt_cache_key`, `prompt_cache_options`, `prompt_cache_retention`, `context_management`, `moderation`, `prompt`, `previous_response_id`, `conversation`, `user` | —                   | No       | —             | Forwarded as sent.                                                                             |

Not available: `background`, `service_tier` (including Batch, Flex and fast mode) and `safety_identifier`.

## Reasoning and effort

GPT-6.1 Sol defaults to `medium` and always reasons: `none` and `minimal` are not supported, and `temperature`, `top_p` and `top_logprobs` are not used. Higher effort usually means more output tokens, a longer wait and a higher cost. Reasoning tokens are billed as output tokens and count toward `max_output_tokens`.

## Image input

Images go in a user message's `content` as `input_image` parts with an `image_url`:

```json
{"role": "user", "content": [
  {"type": "input_image", "image_url": "https://example.com/chart.png"},
  {"type": "input_text", "text": "What does this chart show?"}
]}
```

Replace the example URL with a publicly reachable image of your own.

## Billing dimensions

See the [current rates on the pricing page](https://toklab.ai/pricing). A request is billed by the tokens it uses:

* input tokens,
* output tokens, including reasoning,
* cached input tokens (`usage.input_tokens_details.cached_tokens`), and
* cache-write tokens (`usage.input_tokens_details.cache_write_tokens`).

When a prompt has more than 272K input tokens, the whole request is billed at the long-context rates. The charge is taken from the `usage` reported with the finished response. A request that fails is not charged. Your account's usage records show the exact charge for every request.

## Output

A non-streaming request returns the official response object:

```json
{
  "id": "resp_...",
  "object": "response",
  "status": "completed",
  "model": "gpt-6.1-sol",
  "output": [{"type": "message", "role": "assistant", "content": [{"type": "output_text", "text": "..."}]}],
  "usage": {"input_tokens": 27, "input_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0}, "output_tokens": 102, "output_tokens_details": {"reasoning_tokens": 0}, "total_tokens": 129}
}
```

With `"stream": true` the response is a stream of the official events, including `response.created`, `response.output_text.delta` and `response.completed`; the final `response.completed` event carries the usage.

## Chat Completions

Existing Chat Completions code only needs a new base URL and model ID:

```python
from openai import OpenAI

client = OpenAI(api_key="YOUR_TOKLAB_KEY", base_url="https://api.toklab.ai/v1")

chat = client.chat.completions.create(
    model="gpt-6.1-sol",
    messages=[{"role": "user", "content": "Hello"}],
    max_completion_tokens=1024,
)
print(chat.choices[0].message.content)
```

Set the output limit with `max_completion_tokens` and the effort with `reasoning_effort`. Use the Responses API for tool calling.

## Anthropic Messages format

Code written for the Anthropic Messages API can call GPT-6.1 Sol too: send the Messages body to `/v1/messages` with `"model": "gpt-6.1-sol"`. The request is converted to Chat Completions, so a field with no Chat Completions counterpart has no effect. The response carries the official Messages fields and may include a few extra usage fields; read `usage.input_tokens`, `usage.output_tokens` and the official fields.

## Errors

Errors use `{"error": {"code": ..., "message": "..."}}`. The `code` is a code from the [common error catalog](https://toklab.ai/docs/api/errors). Failed requests are not charged.

## Tips

* Start with the default `medium` effort, use `low` for fast, simple steps and raise the effort only for hard tasks.
* Set `max_output_tokens` high enough for the reasoning as well as the answer: it is one budget for both.
* Keep long, reused context at the start of the prompt so later requests read it from the cache at the lower rate.

## Pricing

Every rate this model is billed at, read live from the price list billing uses. A tier applies when its condition matches, checked top to bottom.

### gpt-6.1-sol

| When | Input (per 1M tokens) | Output (per 1M tokens) | Cache read (per 1M tokens) | Cache write (5 min) (per 1M tokens) | Cache write (1 h) (per 1M tokens) |
| --- | --- | --- | --- | --- | --- |
| Context ≤ 272K | $0.20 | $1.00 | $0.01 | $0.25 | $0.25 |
| Otherwise | $0.40 | $1.50 | $0.02 | $0.50 | $0.50 |

Price tier gpt official (`gpt-6.1-sol:gpt-0.7`):

| When | Input (per 1M tokens) | Output (per 1M tokens) | Cache read (per 1M tokens) | Cache write (5 min) (per 1M tokens) | Cache write (1 h) (per 1M tokens) |
| --- | --- | --- | --- | --- | --- |
| Context ≤ 272K | $1.40 | $7.00 | $0.07 | $1.75 | $1.75 |
| Otherwise | $2.80 | $10.50 | $0.14 | $3.50 | $3.50 |

## Related

* [GPT-6.1 Sol pricing](https://toklab.ai/pricing)
* [Download OpenAPI](https://toklab.ai/docs/gpt-6-1-sol.openapi.json)
* [Copyable Markdown](https://toklab.ai/docs/gpt-6-1-sol.md)

## Optional LLM group

The groups you can use depend on your account permissions and the model. The [pricing page](https://toklab.ai/pricing) lists each group's prices.

API calls keep your API key and model ID. To select a group, send its exact name in the optional `X-SeedRouter-Group` request header, or append it to the model ID as `model:<group>` (see [Model tiers](https://toklab.ai/docs/api/model-tiers)). Replace `GROUP_NAME` below with one of your groups. Omit the header or use `auto` to keep the key's default behavior.

```http
X-SeedRouter-Group: GROUP_NAME
```

A restricted API key may have fewer group options than your account. Requests use the selected group's pricing and do not switch to another group if it is unavailable. This option supports HTTP LLM calls, including SSE; it does not apply to WebSocket, image or video calls.

To see the groups your key can use, call `GET /v1/models`: it lists `model:<group>` next to the model ID for every model your key can call in more than one group.
