Responses API
Supported features
Not yet supported
Chat Completions API
OpenAI SDK compatibleAPI reference
Supported features
Not yet supported
Response notes
- Responses always contain exactly one choice (
n=1). finish_reasonreflects the provider result when available, including"stop","tool_calls","length", and"content_filter".system_fingerprintandservice_tierare not included in responses.logprobsis alwaysnull.
Messages API
The Messages API is Anthropic-compatible for agentic use: system prompts, tool
calling, and streaming (SSE) are supported. Prompt caching (
cache_control)
is accepted but not yet applied.Supported features
Not yet supported
Response notes
stop_reasonreflects the outcome. Sail returns"end_turn"normally,"tool_use"for tool calls,"max_tokens"for token limits, and"refusal"when the provider reports a refusal. Sail returns"model_context_window_exceeded"when the provider reports that the model’s context window was exceeded.- Responses contain
textcontent blocks, plustool_useblocks when the model calls a tool. - Cache-related usage fields (
cache_creation_input_tokens,cache_read_input_tokens) are not included (prompt caching isn’t applied yet). - Thinking output does not include an Anthropic cryptographic signature.
thinking.budget_tokensis approximated as medium reasoning effort unlessoutput_config.effortprovides an explicit effort. - When reasoning is present, Messages content begins with a
thinkingblock before the text block. Select content by block type rather than assumingcontent[0]is text. The Chat Completions response exposes the same reasoning throughreasoning_content. - Token counting applies the same replay-block policy as message creation: redacted thinking is omitted and tool-result images count as the replacement text marker.
- Non-streaming requests wait for up to nine minutes. If generation is still
running, Sail returns a
408 timeout_errorand includes the response ID inX-Sail-Message-Id. Sail also returnsX-Should-Retry: falseso Anthropic SDKs do not create a second task. The original task continues. Retrieve it withGET /v1/messages/{id}, or usestream: truefor long-running requests. Streaming requests use heartbeats and remain connected for up to 20 minutes. If that wait expires, the stream emits a timeout error with the response ID. The task continues and remains retrievable withGET /v1/messages/{id}.
Compatibility notes
- Sail accepts both the Anthropic
x-api-keyheader andAuthorization: Bearer <key>. If both are present,Authorizationtakes precedence.
- The Anthropic Python and TypeScript SDKs type
metadatawith onlyuser_id. Sail also acceptscompletion_window. Keep the additional cast or type assertion scoped to themetadatavalue:
- The
anthropic-versionheader is not required or checked. - Errors use the Anthropic envelope
{"type":"error","error":{"type":"...","message":"..."},"request_id":"..."}and Anthropic error types such asinvalid_request_error,rate_limit_error, andoverloaded_error.
Batch API
The Batch API runs large numbers of Responses API requests asynchronously. Every item targets/v1/responses — batching /v1/chat/completions or /v1/messages is not currently supported. You can submit up to 100,000 requests in a single POST /v1/batches call, then poll GET /v1/batches/{id} for status and fetch each result by custom_id.
See Sending Requests at Scale for the end-to-end workflow and the Batch API reference for the request and response schemas.
Cross-API behavior
These behaviors apply across the inference API surfaces:- Streaming: The Chat Completions API supports
stream: true, returning Server-Sent Events (chat.completion.chunk); setstream_options.include_usagefor a final usage chunk. The Messages API supportsstream: true, returning Anthropic SSE events after generation completes rather than incremental token delivery. The Responses API supports foregroundstream: true, returning OpenAI Responses SSE events.background: truerequests return202immediately and cannot be streamed; use polling or webhooks for long-running background work. - Completion windows — set
metadata.completion_windowto"asap","priority","standard", or"flex"to control scheduling and pricing. See Completion Windows and Pricing. - Webhooks — set
metadata.completion_webhookto receive a POST when processing finishes. See Webhooks. - Response storage —
store: falseis accepted for OpenAI compatibility, but does not change Sail’s normal temporary request/response storage for processing, retries, polling, and idempotency. Customer Data remains governed by Sail’s DPA retention and deletion terms.