> ## Documentation Index
> Fetch the complete documentation index at: https://docs.comfy.org/llms.txt
> Use this file to discover all available pages before exploring further.

# Use Seed 2.0 Mini 260215 with Comfy Router

> Call byteplus/seed-2-0-mini-260215 through Comfy Router: endpoint, request shape and the response Router returns.

API Reference for `byteplus/seed-2-0-mini-260215`, served by Comfy Router from BytePlus.

## Quick start

Create a key in [your Comfy workspace](https://platform.comfy.org/profile/api-keys) and export it as `COMFY_API_KEY`. The Python and TypeScript snippets use the Comfy SDKs (`pip install comfy-sdk`, `npm install @comfyorg/sdk`); the cURL snippet is the same call over raw HTTP.

**Model ID:** `byteplus/seed-2-0-mini-260215`

**Endpoint:** `POST https://api.comfy.org/v2/models/byteplus/seed-2-0-mini-260215`

<CodeGroup>
  ```python Python theme={null}
  from comfy_sdk import Comfy

  # Reads COMFY_API_KEY from the environment.
  # The SDK automatically creates an idempotency key and reuses it for automatic retries.
  with Comfy() as client:
      result = client.models.run(
          "byteplus/seed-2-0-mini-260215",
          {
              "input": "Reply with the single word: ok",
          },
      )

  print(result)
  ```

  ```typescript TypeScript theme={null}
  import { comfy } from "@comfyorg/sdk";

  // Reads COMFY_API_KEY from the environment.
  // The SDK automatically creates an idempotency key and reuses it for automatic retries.
  const { data } = await comfy.models.run("byteplus/seed-2-0-mini-260215", {
    input: "Reply with the single word: ok",
  });

  console.log(data);
  ```

  ```bash cURL theme={null}
  curl https://api.comfy.org/v2/models/byteplus/seed-2-0-mini-260215 \
    -H "X-API-Key: $COMFY_API_KEY" \
    -H "Idempotency-Key: $(uuidgen)" \
    -H "Content-Type: application/json" \
    -d "{\"input\": \"Reply with the single word: ok\"}"
  ```
</CodeGroup>

## Schema

### Input

<ParamField body="caching" type="object">
  Context-cache configuration.
</ParamField>

<ParamField body="caching.prefix" type="boolean" default="false">
  When true, only create the public prefix cache; the model does not respond.
</ParamField>

<ParamField body="caching.type" type="string">
  Possible values: `enabled`, `disabled`
</ParamField>

<ParamField body="context_management" type="object">
  Context-management strategies (`clear_thinking`, `clear_tool_uses`) applied to keep the context window manageable.
</ParamField>

<ParamField body="context_management.edits" type="object[]">
  A single context-edit strategy, discriminated by `type`.
</ParamField>

<ParamField body="expire_at" type="integer">
  Unix timestamp (seconds, UTC) at which the stored response and cache expire. Range (creation\_time, creation\_time + 604800]. Default: creation\_time + 259200 (3 days).
</ParamField>

<ParamField body="include" type="string[]">
  Additional output fields to include. Currently supported: `reasoning.encrypted_content` (encrypted+compressed reasoning for manual multi-turn reuse).
</ParamField>

<ParamField body="input" type="string | object[]" required>
  Text content or list of input items provided to the model.
</ParamField>

<ParamField body="instructions" type="string">
  System/developer message prepended as the first instruction. Not compatible with `caching` — if `caching.type` is `enabled`, setting `instructions` returns an error.
</ParamField>

<ParamField body="max_output_tokens" type="integer">
  Maximum output tokens (response + chain-of-thought).
</ParamField>

<ParamField body="max_tool_calls" type="integer">
  Range: `1` to `10`
</ParamField>

<ParamField body="model" type="string">
  Model ID or Endpoint ID. See [https://docs.byteplus.com/en/docs/ModelArk/1330310](https://docs.byteplus.com/en/docs/ModelArk/1330310) for the model list and [https://docs.byteplus.com/en/docs/ModelArk/1099522](https://docs.byteplus.com/en/docs/ModelArk/1099522) for Endpoint IDs. A direct v1 call to POST /proxy/byteplus/api/v3/responses MUST supply it -- the proxy refuses any value outside its own allowlist, and an omitted one, with a 400. It is NOT in the Comfy Router input schemas' `required` lists because Router fills it from the `{model}` path segment of /v2/models/byteplus/\{model}, so a Router caller omits it.
</ParamField>

<ParamField body="previous_response_id" type="string">
  ID of the previous response, used to continue a multi-turn conversation. Insert \~100ms between requests to avoid failures.
</ParamField>

<ParamField body="reasoning" type="object">
  Limits the workload of deep thinking.
</ParamField>

<ParamField body="reasoning.effort" type="string">
  `minimal` disables thinking entirely. With `thinking.type =
    disabled`, only `minimal` is allowed.

  Possible values: `minimal`, `low`, `medium`, `high`
</ParamField>

<ParamField body="store" type="boolean" default="true">
  When true, the response is persisted and retrievable by ID for multi-turn use.
</ParamField>

<ParamField body="temperature" type="number" default="1">
  Range: `0` to `2`

  Format: `float`
</ParamField>

<ParamField body="text" type="object">
  Output-format configuration.
</ParamField>

<ParamField body="text.format" type="object">
  Text-output format discriminated by `type`. `text` returns natural language, `json_object` returns a free-form JSON object, `json_schema` constrains output to a caller-supplied JSON Schema.
</ParamField>

<ParamField body="thinking" type="object">
  Controls deep-thinking mode.
</ParamField>

<ParamField body="thinking.type" type="string">
  `enabled`: always reason before responding.
  `disabled`: respond without additional reasoning.
  `auto`: model decides per-query.

  Possible values: `enabled`, `disabled`, `auto`
</ParamField>

<ParamField body="tool_choice" type="`none`, `auto`, `required` | object">
  Tool-selection mode. Only seed-1-6 models support this field.
</ParamField>

<ParamField body="tools" type="object[]">
  A tool the model may invoke. Currently only `function` is supported.
</ParamField>

<ParamField body="tools[].description" type="string" />

<ParamField body="tools[].name" type="string" required />

<ParamField body="tools[].parameters" type="object" required>
  JSON Schema describing the function's parameters.
</ParamField>

<ParamField body="tools[].type" type="string" required default="&#x22;function&#x22;">
  Possible values: `function`
</ParamField>

<ParamField body="top_p" type="number" default="0.7">
  Range: `0` to `1`

  Format: `float`
</ParamField>

Generated from the schema Router serves at `GET /v2/models/byteplus/seed-2-0-mini-260215/openapi.json`, the same document it validates a call against before the request reaches the provider.

### Output

<ResponseField name="caching" type="object" />

<ResponseField name="caching.prefix" type="boolean" />

<ResponseField name="caching.type" type="string">
  Possible values: `enabled`, `disabled`
</ResponseField>

<ResponseField name="context_management" type="object">
  Context-management strategies that were actually applied during this response. Unlike the request-side `BytePlusResponseContextManagement` (which configures strategies), this echoes the strategies the server invoked, with counts of what was cleared.
</ResponseField>

<ResponseField name="context_management.applied_edits" type="object[]">
  One applied context-edit, discriminated by `type`.
</ResponseField>

<ResponseField name="created_at" type="integer" required>
  Unix timestamp (seconds) when the response was created.
</ResponseField>

<ResponseField name="error" type="object">
  Error details. Null when the response succeeded.
</ResponseField>

<ResponseField name="error.code" type="string" required />

<ResponseField name="error.message" type="string" required />

<ResponseField name="expire_at" type="integer">
  Unix timestamp (seconds) when the stored response expires.
</ResponseField>

<ResponseField name="id" type="string" required>
  Unique ID of the response. Use as `previous_response_id` to continue the conversation.
</ResponseField>

<ResponseField name="incomplete_details" type="object">
  Populated when `status` is `incomplete`.
</ResponseField>

<ResponseField name="incomplete_details.reason" type="string">
  e.g. `max_output_tokens`, `content_filter`.
</ResponseField>

<ResponseField name="instructions" type="string">
  Echo of the request's `instructions` field.
</ResponseField>

<ResponseField name="max_output_tokens" type="integer" />

<ResponseField name="max_tool_calls" type="integer" />

<ResponseField name="metadata" type="object" />

<ResponseField name="model" type="string" required>
  Model ID that generated the response.
</ResponseField>

<ResponseField name="object" type="string" required default="&#x22;response&#x22;">
  Possible values: `response`
</ResponseField>

<ResponseField name="output" type="object[]" required>
  Ordered output items produced by the model.
</ResponseField>

<ResponseField name="previous_response_id" type="string" />

<ResponseField name="reasoning" type="object" />

<ResponseField name="reasoning.effort" type="string">
  Possible values: `minimal`, `low`, `medium`, `high`
</ResponseField>

<ResponseField name="service_tier" type="string">
  TPM-guarantee-package usage. `default` means none.

  Possible values: `default`
</ResponseField>

<ResponseField name="status" type="string" required>
  Possible values: `in_progress`, `completed`, `incomplete`, `failed`, `cancelled`
</ResponseField>

<ResponseField name="store" type="boolean" />

<ResponseField name="stream" type="boolean" />

<ResponseField name="temperature" type="number">
  Format: `float`
</ResponseField>

<ResponseField name="text" type="object">
  Echo of the request's `text` field.
</ResponseField>

<ResponseField name="text.format" type="object">
  Text-output format discriminated by `type`. `text` returns natural language, `json_object` returns a free-form JSON object, `json_schema` constrains output to a caller-supplied JSON Schema.
</ResponseField>

<ResponseField name="thinking" type="object" />

<ResponseField name="thinking.type" type="string">
  Possible values: `enabled`, `disabled`, `auto`
</ResponseField>

<ResponseField name="tool_choice" type="`none`, `auto`, `required` | object" />

<ResponseField name="tools" type="object[]">
  A tool the model may invoke. Currently only `function` is supported.
</ResponseField>

<ResponseField name="tools[].description" type="string" />

<ResponseField name="tools[].name" type="string" required />

<ResponseField name="tools[].parameters" type="object" required>
  JSON Schema describing the function's parameters.
</ResponseField>

<ResponseField name="tools[].type" type="string" required default="&#x22;function&#x22;">
  Possible values: `function`
</ResponseField>

<ResponseField name="top_p" type="number">
  Format: `float`
</ResponseField>

<ResponseField name="usage" type="object">
  Token-usage breakdown for billing and observability.
</ResponseField>

<ResponseField name="usage.input_tokens" type="integer" required>
  Total tokens in the request.
</ResponseField>

<ResponseField name="usage.input_tokens_details" type="object">
  Breakdown of input tokens (cache hits, etc).
</ResponseField>

<ResponseField name="usage.input_tokens_details.cached_tokens" type="integer">
  Tokens served from the context cache.
</ResponseField>

<ResponseField name="usage.output_tokens" type="integer" required>
  Total tokens generated by the model.
</ResponseField>

<ResponseField name="usage.output_tokens_details" type="object">
  Breakdown of output tokens (reasoning, etc).
</ResponseField>

<ResponseField name="usage.output_tokens_details.reasoning_tokens" type="integer">
  Tokens consumed by chain-of-thought.
</ResponseField>

<ResponseField name="usage.tool_usage" type="object">
  Per-tool invocation counts.
</ResponseField>

<ResponseField name="usage.tool_usage.image_process" type="integer">
  Number of image-processing tool calls.
</ResponseField>

<ResponseField name="usage.tool_usage.mcp" type="integer">
  Number of MCP tool calls.
</ResponseField>

<ResponseField name="usage.tool_usage.web_search" type="integer">
  Number of web-search tool invocations.
</ResponseField>

<ResponseField name="usage.tool_usage_details" type="object">
  Per-tool breakdown of sub-tool invocation counts.
</ResponseField>

<ResponseField name="usage.tool_usage_details.image_process" type="object">
  e.g. `{"zoom":1,"point":1,"grounding":1}`.
</ResponseField>

<ResponseField name="usage.tool_usage_details.mcp" type="object">
  e.g. `{"mcp_server_tos":1,"mcp_server_tls":1}`.
</ResponseField>

<ResponseField name="usage.tool_usage_details.web_search" type="object">
  e.g. `{"toutiao":1,"moji":1,"search_engine":1}`.
</ResponseField>

<ResponseField name="usage.total_tokens" type="integer" required>
  input\_tokens + output\_tokens.
</ResponseField>

## Examples

### Input

```json theme={null}
{
  "input": "Reply with the single word: ok"
}
```

### Output

```json theme={null}
{
  "created_at": 1767225600,
  "id": "resp_0a1b2c3d4e5f6a7b8c9d0e1f",
  "model": "seed-2-0-mini-260215",
  "object": "response",
  "output": [
    {
      "content": [
        {
          "annotations": [],
          "text": "ok",
          "type": "output_text"
        }
      ],
      "id": "msg_0a1b2c3d4e5f6a7b8c9d0e1f",
      "role": "assistant",
      "status": "completed",
      "type": "message"
    }
  ],
  "status": "completed",
  "usage": {
    "input_tokens": 14,
    "input_tokens_details": {
      "cached_tokens": 0
    },
    "output_tokens": 2,
    "total_tokens": 16
  }
}
```

## Before you ship

The SDKs create an `Idempotency-Key` and reuse it for automatic retries. For manual retries, reuse the original key. Router can hold the connection for up to 10 minutes.

When a request fails, Router sends an `X-Comfy-Error-Type` response header explaining why. A `422` means Router rejected the input before calling the provider. Download generated assets promptly because [result URLs can expire](/development/comfy-router/reference#result-assets).

<CardGroup cols={3}>
  <Card title="Headers" icon="list" href="/development/comfy-router/headers">
    Authentication, idempotency, request IDs, error buckets, retry pacing, spend limits.
  </Card>

  <Card title="Using the Router API" icon="code" href="/development/comfy-router/api">
    Model discovery, validation errors, retries, and billing.
  </Card>

  <Card title="Limitations" icon="triangle-exclamation" href="/development/comfy-router/limitations">
    What Router does not do today, and what to use instead.
  </Card>
</CardGroup>
