Skip to content

StepFun

Four StepFun chat models are available on LLMTR. All of them are called through /v1/chat/completions, produce text, and reason before they answer.

Model Context Input / Cache read / Output ($/1M) Input
stepfun/step-5-preview 1,024,000 1 / 0.1 / 2.7 Text, image, video
stepfun/step-3.7-flash 256,000 0.2 / 0.04 / 1.15 Text, image, video
stepfun/step-3.5-flash 256,000 0.1 / 0.02 / 0.3 Text
stepfun/step-3.5-flash-2603 256,000 0.1 / 0.02 / 0.3 Text

No platform margin is added to model prices; the margin applies only when you top up credit.

stepfun/step-5-preview is the preview release of StepFun's flagship model for agentic work. It is suited to software development, long-document analysis across several sources, multi-step tool-using flows, and interpreting images or video. StepFun publishes it as "Preview"; the catalog shows it with the Beta label.

Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "stepfun/step-5-preview",
"messages": [
{ "role": "system", "content": "Answer briefly." },
{ "role": "user", "content": "Find the root cause in this error log and suggest a fix." }
],
"reasoning_effort": "medium",
"max_tokens": 4096
}'
from openai import OpenAI
client = OpenAI(base_url="https://llmtr.com/v1", api_key="llmtr-your_key")
response = client.chat.completions.create(
model="stepfun/step-5-preview",
messages=[{"role": "user", "content": "List the findings these three reports share."}],
reasoning_effort="low",
max_tokens=4096,
)
print(response.choices[0].message.content)
print(response.usage)

StepFun states a 64K-token output for this model. LLMTR applies no lower ceiling and does not refuse a larger max_tokens. For requests where you expect long output, check finish_reason to confirm the answer completed: length means the output was cut at the budget.

Reasoning depth is selected with reasoning_effort. The accepted levels differ by model:

Model Accepted levels
stepfun/step-5-preview low, medium, high
stepfun/step-3.7-flash low, medium, high
stepfun/step-3.5-flash-2603 low, high
stepfun/step-3.5-flash No level can be selected

A level that is not listed (xhigh, max, or any level sent to Step 3.5 Flash) is refused with 400. The level can also be given as a suffix on the model id:

stepfun/step-5-preview -> default
stepfun/step-5-preview:low -> low effort, faster answer
stepfun/step-5-preview:high -> high effort

The model also reasons when you send no reasoning_effort; the parameter only sets the depth. The reasoning trace arrives in the response's message.reasoning_content field (delta.reasoning_content when streaming), and the answer itself is in content.

Reasoning tokens are counted in usage.completion_tokens and billed at the output price; completion_tokens_details.reasoning_tokens does not report a separate number on these models. Because reasoning is drawn from the max_tokens budget, a small budget can stop the model before it writes the answer, with finish_reason: "length". Treat such a response as incomplete: in a non-streaming call content is not empty but carries the cut-off reasoning text. Keep the budget generous even when you expect a short answer; a few thousand tokens is a safe starting point.

See reasoning effort for the general behaviour.

stepfun/step-5-preview and stepfun/step-3.7-flash accept images and video.

  • Image: an image_url part, as data:image/...;base64,. StepFun accepts JPG, PNG, WebP, and static GIF.
  • Video: a video_url part, as data:video/mp4;base64, (or video/quicktime). Base64 video is limited to about 9 MB.
  • stepfile:// references from StepFun's Files API are not accepted through LLMTR.
  • A message can carry at most 16 content parts.
Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "stepfun/step-5-preview",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "Which colours appear in this video?" },
{ "type": "video_url", "video_url": { "url": "data:video/mp4;base64,AAAAIGZ0eXBpc29t..." } }
]
}],
"reasoning_effort": "low",
"max_tokens": 1024
}'

For an image, use the part { "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KGgo..." } } in the same request.

All four models support tool/function calling. When the model calls a tool, content is empty and finish_reason is tool_calls.

Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "stepfun/step-5-preview",
"messages": [{ "role": "user", "content": "Weather in Istanbul?" }],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Returns the current weather for a city",
"parameters": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}
}],
"max_tokens": 1024
}'

Return the tool result in a second turn with a role: "tool" message. See tool calling for the general flow.

All four models produce JSON output with response_format: { "type": "json_object" }. stepfun/step-5-preview also produces output that conforms to a schema you supply with json_schema:

{
"model": "stepfun/step-5-preview",
"messages": [{ "role": "user", "content": "Give the capital of Turkey and its plate code." }],
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "city",
"strict": true,
"schema": {
"type": "object",
"properties": {
"capital": { "type": "string" },
"plate_code": { "type": "integer" }
},
"required": ["capital", "plate_code"],
"additionalProperties": false
}
}
},
"max_tokens": 1024
}

StepFun caches repeated prompt prefixes of 256 tokens or more automatically; nothing needs to be marked in the request. The number of tokens served from cache is returned in usage.prompt_tokens_details.cached_tokens, and those tokens are billed at the cache-read price. There is no separate charge for writing to the cache. The cache is a discount, not a guarantee: a hit depends on the prefix staying the same and on traffic. Putting the long, fixed part (system message, document, tool definitions) at the start of the prompt improves the chance of a hit.

All four models stream for real with stream: true, and the final chunk carries exact usage. See streaming for details.

StepFun requests are processed on StepFun's own infrastructure; these models are not hosted on LLMTR's own servers.