Introduction
OpenAI-compatible chat for Grok 4.3: one message array carrying text and image parts, five reasoning-effort levels including none, and replies up to 900,000 tokens.
Grok 4.3 is xAI's fast, reliable Grok, published as a single OpenAI-compatible endpoint at /v1/chat/completions. A request holds at most 256 ordered turns and up to 1,000,000 tokens with image content counted inside that budget, and it returns either one chat.completion object or an SSE stream of chunks. Since 15 May 2026 xAI redirects grok-4-fast, grok-4-1-fast, grok-4-0709, grok-code-fast-1 and grok-3 here, so this is the model those integrations now run on.
Key features & highlights
none is an off switch, not a lower setting
The reasoning_effort parameter takes none, low, medium, high and xhigh, and the default on this model is low rather than high. At none the model answers with no deliberation pass at all: a yes-or-no classification comes back as a single token instead of a paragraph of reasoning followed by the word you wanted. Effort is billed as output tokens, so the level you choose moves both the latency and the bill. Among the Grok models published here, only this one offers none.
The window is 1,000,000 tokens, the long-context line is still 200,000
Those are two different numbers, and the gap between them is where the surprises live. A request prices on the long-context rate from 200,000 combined input and cached input tokens upward, which is one fifth of what this model still accepts, so there is a wide band in which the prompt fits comfortably and already bills at the long rate. The estimate shown before you send names the tier the request falls into.
Request parameters
| Parameter | Required | Description |
|---|---|---|
messages | Yes | At most 256 turns. Content can mix text and |
reasoning_effort | No | none, low, medium, high or xhigh. Low is the default and none skips the deliberation pass entirely; effort is spent in output tokens. |
max_tokens | No | Caps the visible reply at 900,000; the default of 4,096 truncates a long answer silently. |
temperature | No | 0 to 2, default 0.7. Use 0 when comparing two mockups or two runs. |
top_p | No | 0.01 to 1. Move this or temperature, not both together. |
tools | No | Up to 128 function definitions per request. at most 128 items |
parallel_tool_calls | No | true or false, default true: the model may request several tool calls in one turn. Default: |
tool_choice | No | auto, none, required, or an object naming the function to call. |
response_format | No | Request a JSON object when the answer is read by code rather than a person. |
Pricing
Input $1.25 / Output $2.50 per 1 million tokens; Prompts of 200K tokens or more: Input $2.50 / Output $5
Total input includes cached tokens. At 200,000 input tokens or more, long-context rates apply to all input, cached input and output for the request; smaller inputs use standard rates. Output includes reasoning tokens, so effort none - which runs no deliberation pass - has none of them to pay for. Check the request budget before submitting. The initial hold assumes no cache savings, and settlement refunds the difference against measured usage.
Use cases
Classify, extract and route at effort none
Ticket labels, fields pulled out of an invoice, or the decision about which downstream model gets a request: none skips the deliberation pass, so the answer arrives as fast as the model can write it and no reasoning tokens land on the bill. Pair it with response_format so the reply comes back as a JSON object your code reads directly rather than a sentence someone has to parse.
Port an integration off a retired model id
xAI retired grok-4-fast-reasoning, grok-4-fast-non-reasoning, grok-4-1-fast-reasoning, grok-4-1-fast-non-reasoning, grok-4-0709, grok-code-fast-1 and grok-3 on 15 May 2026 and redirects all of them to this model. Point the client at xai/grok-4.3, set reasoning_effort to low where the old id was a reasoning variant and to none where it was not, and the context budget grows on the way across.
A million tokens of source in a single turn
A whole repository, a year of support transcripts or a stack of contracts fits in one request, so the answer is not assembled from chunks that never saw each other. Ask for the wording to be quoted clause by clause, and raise max_tokens when the reply itself has to be long: the default of 4,096 truncates without raising an error.
Screenshots and stack traces in the same message
Attach a broken dashboard as an image_url part at detail high and paste the trace as text in the same user turn, then ask for ranked causes. The picture and the log arrive together, so the model is not working from your transcription of either one, and both are metered inside the same window as the prompt.
Prompt guide & pro tips
Set the effort level on purpose
Decide per task instead of leaning on the default: none for classification, extraction, routing and format conversion; low for ordinary instruction following and tool loops; medium, high or xhigh when the answer genuinely has to be worked out. Effort is spent in output tokens, so it counts against max_tokens as well as against the invoice, and a long xhigh answer can hit the cap before it finishes.
A request you can paste
Content on a user message may be a plain string or an array of parts, and this model declares two part types:
{"type": "text", "text": "..."}{"type": "image_url", "image_url": {"url": "...", "detail": "auto|low|high"}}
curl https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "xai/grok-4.3",
"messages": [{"role": "user", "content": [
{"type": "text", "text": "Which panel shows the regression, and what changed?"},
{"type": "image_url", "image_url": {"url": "https://cdn.spicyapi.ai/models/examples/inputs/c681580c3c6a0b63.jpeg", "detail": "high"}},
{"type": "image_url", "image_url": {"url": "https://cdn.spicyapi.ai/models/examples/inputs/59f0bc6291069978.jpeg", "detail": "high"}}
]}],
"max_tokens": 4000
}'
Read the reply, and the meter
Streaming is the practical way to consume a long generation: stream: true returns chat.completion.chunk events until data: [DONE], and a non-streamed call at xhigh on a full window can run long enough to trip a client timeout. Before you add another document, check whether the request has crossed 200,000 input tokens, because that is where the long-context rate begins. File and PDF parts are not accepted on this endpoint, so an attachment has to become text or an image before it is sent.
API quick start
curl --fail-with-body -sN https://api.spicyapi.ai/v1/chat/completions \
-H "Authorization: Bearer $SPICY_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"model": "xai/grok-4.3/chat",
"messages": [
{
"role": "user",
"content": "Summarise the following release notes into three bullet points."
}
],
"stream": true
}' \
| jq --unbuffered -Rrj 'select(startswith("data: ")) | .[6:] | select(. != "[DONE]") | fromjson | if .error then "\n[error] \(.error.message)\n" else (.choices[0].delta.content? // empty) end'
See the API reference for authentication, the complete schema, polling, and error handling.










