o1
o1 is the production reasoning model that combines extended chain-of-thought computation with full tool support, structured outputs, vision, and a reasoning_effort parameter, delivering deeper problem-solving at 60% fewer reasoning tokens than o1-preview.
- Input and output price
- Prices from: Input $15, Output $60, Per 1M tokens
- 24h uptime
- Loading AI Gateway uptime
import { streamText } from 'ai'
const result = streamText({ model: 'openai/o1', prompt: 'Why is the sky blue?'})Copy link to headingPlayground
Try out o1 by OpenAI. Usage is billed to your team at API rates. Free users (those who haven't made a payment) get $5 of credits every 30 days.
o1
Copy link to headingProviders
Route requests across multiple providers. Copy a provider slug to set your preference. Visit the docs for more info. Using a provider means you agree to their terms, listed under Legal.
| Provider |
|---|
Copy link to headingUptime24 hours
Direct request success rate on AI Gateway and per-provider. Visit the docs for more info.
Copy link to headingThroughput24 hours
P50 throughput on live AI Gateway traffic, in tokens per second (TPS). Visit the docs for more info.
Copy link to headingLatency24 hours
P50 time to first token (TTFT) on live AI Gateway traffic, in milliseconds. View the docs for more info.
Getting started
Call o1 through AI Gateway with the AI SDK generateText and streamText functions, or through the OpenAI Chat Completions, OpenAI Responses, and Anthropic Messages APIs by changing the base URL. AI Gateway authenticates the request and routes it to an available provider.
Install the AI SDK (pnpm add ai dotenv), create an API key from the API Keys page, and set it as AI_GATEWAY_API_KEY in your environment. Full setup is covered in the text generation quickstart.
import { generateText } from 'ai';import 'dotenv/config';
async function main() { const result = await generateText({ model: 'openai/o1', prompt: 'Why is the sky blue?', });
console.log(result.text);}
main().catch(console.error);Top-level parameters
The same o1 request in each API format AI Gateway supports.
import { generateText } from 'ai';import 'dotenv/config';
async function main() { const result = await generateText({ model: 'openai/o1', system: 'You are a concise technical assistant.', prompt: 'Summarize the tradeoffs between static generation and SSR.', maxOutputTokens: 1024, });
console.log(result.text);}
main().catch(console.error);Standard parameters like prompt, messages, temperature, and tools work as documented in the AI SDK docs. These are the parameters with model-specific behavior.
| Parameter | Type | Required | Description |
|---|---|---|---|
model | string | Yes | Model ID in the form creator/model, e.g. openai/o1. AI Gateway routes the request to an available provider. |
maxOutputTokens | number | No | Hard cap on generated tokens. o1 supports up to 100,000 output tokens. Reasoning tokens count toward this limit. |
reasoning | 'provider-default' | 'none' | 'minimal' | 'low' | 'medium' | 'high' | 'xhigh' | No | Provider-agnostic reasoning effort, available in AI SDK 7 or later. Maps to the provider’s native reasoning configuration; reasoning settings under providerOptions take precedence when both are set. See the Reasoning section below. |
providerOptions | Record<string, JSONValue> | No | AI Gateway routing options under gateway, plus any provider-native options under the provider’s own namespace — see the table below. |
Input limits
| Input | Formats | Sources | Max count | Max size | Limits |
|---|---|---|---|---|---|
| Text | — | — | — | — | Prompt and response share the 200K-token context window |
| Image | — | URL, base64, Uint8Array | — | — | Sent as image parts in messages; counts as input tokens |
| — | URL, base64, Uint8Array | — | — | Sent as file parts in messages; counts as input tokens |
Provider options
Set AI Gateway routing options under providerOptions.gateway. For provider-specific options, pass them under the provider’s namespace as documented by the AI SDK.
Learn more in the AI SDK openai provider docs.
import { generateText } from 'ai';import 'dotenv/config';
async function main() { const result = await generateText({ model: 'openai/o1', prompt: 'Why is the sky blue?', providerOptions: { gateway: { only: ['azure', 'openai'], }, }, });
console.log(result.text);}
main().catch(console.error);These AI Gateway routing options apply to every model. Provider-specific options pass through under the provider’s own namespace (for example providerOptions.anthropic) exactly as documented by the AI SDK.
| Parameter | Type | Required | Description |
|---|---|---|---|
providerOptions.gateway.only | string[] | No | Restrict routing to these provider slugs. Requests fail over only within the listed providers. |
providerOptions.gateway.order | string[] | No | Preferred provider order. Listed providers are tried first; unlisted providers remain available as fallbacks. |
providerOptions.gateway.sort | 'cost' | 'ttft' | 'tps' | No | Rank candidate providers by price, time to first token, or tokens per second instead of the default routing order. |
providerOptions.gateway.zeroDataRetention | boolean | No | Route only to providers with a zero-data-retention policy for this model. |
Routing across providers
AI Gateway serves the same model through multiple providers and fails over automatically. order expresses a preference while keeping every provider eligible; only is a hard allowlist — if none of the listed providers are available the request fails instead of falling back.
Options under a provider's own namespace (for example providerOptions.anthropic) are forwarded to that provider with the request. Providers ignore option namespaces that don't apply to them, so it is safe to set provider options alongside gateway routing options.
Reasoning
AI Gateway bridges reasoning across every API format. The AI SDK exposes a provider-agnostic top-level reasoning level (none, minimal, low, medium, high, or xhigh); the Chat Completions and Responses formats take the same effort under reasoning.effort; and the Anthropic Messages format uses a native thinking token budget. Whichever you send, the gateway maps it to the target model’s native configuration, converting between effort levels and token budgets as needed. Reasoning-related settings under providerOptions take full precedence over the top-level reasoning value and are never merged. Reasoning tokens typically count toward your output-token usage, though how they’re reported and billed varies by provider.
Learn more in the AI Gateway reasoning guide.
import { generateText } from 'ai';import 'dotenv/config';
async function main() { const result = await generateText({ model: 'openai/o1', prompt: 'Explain the Monty Hall problem step by step.', reasoning: 'high', });
console.log(result.text);}
main().catch(console.error);Image input
Send images alongside text as message parts. Images count as input tokens.
import { generateText } from 'ai';import 'dotenv/config';
async function main() { const result = await generateText({ model: 'openai/o1', messages: [ { role: 'user', content: [ { type: 'text', text: 'Describe this image.' }, { type: 'image', image: 'https://example.com/photo.jpg' }, ], }, ], });
console.log(result.text);}
main().catch(console.error);PDF input
Attach PDFs as file parts. Their contents count as input tokens.
import { generateText } from 'ai';import 'dotenv/config';
async function main() { const result = await generateText({ model: 'openai/o1', messages: [ { role: 'user', content: [ { type: 'text', text: 'Summarize this document.' }, { type: 'file', mediaType: 'application/pdf', data: 'https://example.com/document.pdf', }, ], }, ], });
console.log(result.text);}
main().catch(console.error);Tool calling
Expose tools the model can call. Define each tool’s inputs with a Zod schema.
import { generateText, tool } from 'ai';import { z } from 'zod';import 'dotenv/config';
async function main() { const result = await generateText({ model: 'openai/o1', prompt: 'What is the weather in San Francisco?', tools: { getWeather: tool({ description: 'Get the current weather for a location', inputSchema: z.object({ location: z.string() }), execute: async ({ location }) => ({ location, temperatureC: 18 }), }), }, });
console.log(result.text);}
main().catch(console.error);Copy link to headingAbout o1
OpenAI released o1 on December 5, 2024 as o1-2024-12-17. This is the point where OpenAI's reasoning architecture became production-ready. The September 2024 preview proved the concept: chain-of-thought reasoning scoring 83% on International Mathematical Olympiad (IMO) qualifying problems. But it shipped without the API features production systems depend on. The production o1 fills those gaps.
Function calling means o1 can participate in agentic workflows: querying databases, hitting APIs, and invoking tools mid-reasoning. Structured Outputs via constrained JSON schema decoding let downstream systems consume responses without fragile parsing. Developer system messages restore the ability to set behavioral constraints and context. Vision input enables reasoning over images, circuit diagrams, mathematical notation in photographs, and charts that require interpretation.
The efficiency gains are equally significant. o1 uses 60% fewer reasoning tokens on average compared to o1-preview for equivalent quality. Fewer reasoning tokens means lower cost per request and shorter time-to-first-token. The context window of 200K tokens (expanded from the preview's 128K) accommodates the longer inputs that complex reasoning tasks demand.
The reasoning_effort parameter, unique to the production o1, controls how deeply the model thinks. Set it low for questions where a quick chain of thought suffices. Set it high for problems that genuinely require extended deliberation. In a pipeline mixing easy and hard queries, this single parameter can cut aggregate reasoning token spend substantially.
Copy link to headingWhat To Consider When Choosing a Provider
- Configuration: The
reasoning_effortparameter lets you dial reasoning depth up or down per request. A single deployment can handle both lightweight queries and hard problems without switching models or endpoints. - Zero Data Retention: Zero Data Retention is available for this model. It is offered on a per-provider and model basis. See the documentation for details.
- Authentication: AI Gateway authenticates requests using an API key or OIDC token. You do not need to manage provider credentials directly.
Copy link to headingWhen to Use o1
Best for
- Agentic pipelines: Function calling and structured outputs make o1 a complete agent backbone that combines deep reasoning with tool calls
- Mathematical problem solving: Multi-step proofs and quantitative analysis requiring verified chain-of-thought
- Complex debugging: Architecture review where the model benefits from working through multiple approaches before committing
- Mixed-difficulty workloads:
reasoning_effortlets you optimize cost per request without switching models - Visual reasoning: Interpreting charts, diagrams, or handwritten notation as part of a larger analytical problem
Consider alternatives when
- Conversational or generative tasks: GPT-4o or GPT-4.1 respond faster and more cheaply when extended chain-of-thought isn't needed
- Cost-sensitive STEM reasoning: O1-mini offers nearly equivalent math and coding scores at lower cost
- Low-latency streaming: Reasoning token generation introduces inherent latency that real-time responses can't tolerate
Copy link to headingConclusion
The production o1 is a reasoning model that fits into real systems. Function calling, structured outputs, vision, system messages, a larger context window, and per-request reasoning control make it suitable for deployment. If your application needs a model that reasons carefully and then acts on its conclusions, route it through AI Gateway.
Copy link to headingFrequently Asked Questions
How does
reasoning_effortaffect cost and latency in practice?Lower effort values reduce the number of reasoning tokens the model generates before answering, which directly lowers both cost (reasoning tokens are billed as output) and time-to-first-token. A pipeline that sets low effort for simple queries and high effort for complex ones can cut aggregate reasoning spend significantly.
What production capabilities does o1 have that the preview lacked?
Function calling for tool use, developer system messages for behavioral control, Structured Outputs via JSON schema constrained decoding, and vision input for image reasoning. The preview supported none of these.
How much did the context window expand from the preview?
The preview offered 128K tokens. The production o1 supports 200K tokens, enabling substantially longer documents, conversation histories, and multi-source inputs in reasoning tasks.
Can o1 be used as the reasoning layer in an agent that calls external APIs?
Yes. Function calling support means o1 can invoke tools mid-reasoning, receive results, and incorporate them into its chain of thought. Combined with Structured Outputs, it can produce machine-readable action plans that downstream orchestrators consume directly.
Why does o1 use 60% fewer reasoning tokens than the preview?
OpenAI optimized the production model's reasoning efficiency. It reaches equivalent quality conclusions with fewer intermediate steps, which translates to lower per-request cost and faster responses.
Is o1 appropriate for every query in a general-purpose chatbot?
No. Reasoning token generation adds latency and cost that is wasted on simple questions. For general chat, GPT-4o or GPT-4.1 are faster and cheaper. Reserve o1 for the subset of queries that genuinely benefit from extended deliberation, or use
reasoning_effortat a low setting to triage.