API compatibility

What each sference surface accepts, which request fields are honored, and which are ignored.

API compatibility

sference speaks three request shapes: the OpenAI Chat Completions API, the OpenAI Responses API, and the Anthropic Messages API. This page is the honest map: what each surface accepts, what we honor, and what we ignore.

Surfaces

SurfaceEndpointShape
OpenAI Chat APIPOST /v1/chat/completionsOpenAI
OpenAI Responses APIPOST /v1/responsesOpenAI
Anthropic Messages APIPOST /v1/messagesAnthropic
EmbeddingsPOST /v1/embeddingsOpenAI
BatchesPOST /v1/batchesOpenAI
FilesPOST /v1/filesOpenAI
StreamsPOST /v1/streamssference extension
ModelsGET /v1/modelsOpenAI

Field support

OpenAI Chat API

FieldStatus
model, messages, stream✅
temperature, top_p, top_k, min_p✅
max_tokens, max_completion_tokens✅
stop, seed✅
presence_penalty, frequency_penalty, repetition_penalty✅
tools, tool_choice✅
response_format (json_schema, json_object)✅ — see Structured outputs
stream_options.include_usage✅
reasoning_effort, enable_thinking✅ on reasoning models
prompt_cache_key✅ sference extension — see Prompt caching
service_tier✅ "flex" selects flex; other accepted values serve as default
max_queue_wait_s✅ sference extension — see Max queue wait
n (multiple completions)❌ not supported
logprobs, top_logprobs❌ not supported
logit_bias❌ not supported

OpenAI Responses API

FieldStatus
model, input, instructions✅
max_output_tokens, temperature, top_p✅
tools, tool_choice✅
text.format✅ — structured output
reasoning, include_reasoning, enable_thinking✅
background✅ — 24h batch window
stream✅
metadata.completion_window✅ "24h" (requires background: true)
metadata.stream_id✅ sference extension — see Streams
metadata.completion_webhook, metadata.webhook_token✅ — see Webhooks
prompt_cache_key, service_tier, max_queue_wait_s✅
store⚠️ accepted; there is no server-side storage
previous_response_id, conversation❌ ignored — send the conversation each turn
include (web search, file search, computer use)❌ ignored — see below

No server-side conversation state

Every request is answered from the content you send. previous_response_id and conversation are removed rather than rejected, so your request still runs — it just does not see the turn they name. Send the full conversation in input on every turn; every OpenAI-compatible SDK does this by default.

Anthropic Messages API

The full field-by-field map, including content blocks, streaming events, and the exact differences from api.anthropic.com, is on the Anthropic Messages API page.

FieldStatus
model, max_tokens, messages, system✅
temperature, top_p, top_k✅
stop_sequences, stream✅
tools, tool_choice✅
thinking, enable_thinking✅ — signature is always empty
max_queue_wait_s✅ sference extension
cache_control❌ ignored — prefix caching is automatic
service_tier, background❌ realtime only on this surface
Server-side tools (web search, code execution, computer use)❌ unavailable

Not supported anywhere

FeatureWhy
Server-side tools — web search, file search, code execution, computer useThese are hosted by the provider, not the model. Run them in your own agent loop.
n > 1One completion per request. Fan out with concurrent requests instead.
Log probabilitiesNot exposed by the serving engines we run.
Fine-tuning endpointsCustom weights are hosted under an enterprise agreement, not self-serve.
Server-side conversation storageEvery request is stateless by design; see below.

Statelessness is deliberate

sference stores no conversation state. A response is computed from the request body alone, which is what makes the platform auditable: what you sent is what ran, and there is no hidden thread to reason about. It also means the request body is the source of truth for context — pass the whole conversation every turn.

Checking support programmatically

Every model entry on GET /v1/models carries its capabilities:

{
  "id": "zai-org/GLM-5.3-Flash",
  "context_tokens": 1048576,
  "capabilities": { "image_input": { "supported": true } },
  "pricing": { "input_per_million_usd": 0.2, "cached_input_per_million_usd": 0.07, "output_per_million_usd": 0.6 }
}

Read capabilities before routing a request that depends on one — vision in particular. The platform rejects rather than silently drops an unsupported input.