Skip to main content
POST
Create Message
Authenticate with your Perplexity API key. Both Authorization: Bearer and the Anthropic SDK’s default x-api-key header are accepted, so the stock SDK api_key parameter works unchanged. No anthropic-version header is required.
Honored: model, max_tokens (required), messages, system, stream, temperature, top_p, top_k, stop_sequences, thinking (only {"type": "disabled"}), tools, tool_choice. Message content and tool_result.content accept text, image, document, and search_result blocks. Document sources can be base64, plain text, or URLs and may include title and context.Accepted but not forwarded to the model: metadata.Rejected with a 400: service_tier, thinking with {"type": "enabled"}, cache_control on content blocks or tools, plus any unrecognized top-level field. A tool’s description is optional.
Errors use the Anthropic envelope:
An overloaded model returns HTTP 429 with type overloaded_error and a Retry-After header. Requests that fail before producing output are not billed.

Authorizations

Authorization
string
header
required

Your Perplexity API key.

Body

application/json

Request body for POST /router/v1/messages.

model
string
required

Public model slug, e.g. perplexity/kimi-k3.

max_tokens
integer
required

Maximum number of tokens to generate. Required by the Messages API.

Required range: 1 <= x <= 2147483647
messages
object[]
required
system

System prompt as plain text or an array of text blocks.

temperature
number<float>
Required range: 0 <= x <= 1
top_p
number<float>
Required range: 0 <= x <= 1
top_k
integer

Only sample from the top K options for each subsequent token.

stop_sequences
string[]
stream
boolean

When true, respond with server-sent events.

tools
object[]
tool_choice
object
metadata
object
thinking
object

Legacy budget-based thinking; budget_tokens maps to the nearest llm-api reasoning-effort tier.

service_tier
enum<string>

Accepted and ignored — llm-api's service_tier is OpenAI-only.

Available options:
auto,
standard_only
cache_control
object

Ephemeral cache breakpoint. ttl "1h" is rejected until 1h writes are billed distinctly (they price 2x the 5m rate).

output_config
object
context_management
object

Accepted and ignored — context edits are not applied. Kept raw so evolving strategies decode.

container
any

Rejected by validation — no code-execution containers.

inference_geo
string

Rejected by validation — geo pinning cannot be honored, silently ignoring it would break residency expectations.

mcp_servers
any

Rejected by validation — no server-side MCP execution.

speed
enum<string>

"standard" is inert; "fast" is rejected (no fast-mode routing).

Available options:
standard,
fast
fallbacks
any

Rejected by validation — fallback models would bill as the requested slug.

fallback_credit_token
string

Rejected by validation together with fallbacks.

Response

Successful response. JSON for non-streaming requests; a text/event-stream of typed events (message_start through message_stop) when stream is true.

Non-streaming response body and the message_start payload.

id
string
required
type
enum<string>
required
Available options:
message
role
enum<string>
required
Available options:
assistant
model
string
required
content
object[]
required
stop_reason
enum<string> | null
required
Available options:
end_turn,
max_tokens,
stop_sequence,
tool_use,
pause_turn,
refusal,
model_context_window_exceeded
stop_sequence
string | null
required
usage
object
required