Reasoning
Use reasoning_effort, or the reasoning object ({ effort, max_tokens, exclude }). Reasoning text comes back as message.reasoning (delta.reasoning when streaming); reasoning tokens are billed as output.
response = client.chat.completions.create(
model="grok-4.7",
messages=[{"role": "user", "content": "How many r's are in strawberry?"}],
reasoning_effort="high", # or extra_body={"reasoning": {"max_tokens": 4000, "exclude": False}}
)
print(response.choices[0].message.reasoning) # the model's reasoning, when returned
print(response.usage.completion_tokens_details.reasoning_tokens)