Skip to main content

OpenAI logoOpenAI

Access 48 OpenAI models through Mastra's model router. Authentication is handled automatically using the OPENAI_API_KEY environment variable.

Learn more in the OpenAI documentation.

.env
OPENAI_API_KEY=your-api-key
src/mastra/agents/my-agent.ts
import { Agent } from "@mastra/core/agent";

const agent = new Agent({
id: "my-agent",
name: "My Agent",
instructions: "You are a helpful assistant",
model: "openai/chatgpt-image-latest"
});

// Generate a response
const response = await agent.generate("Hello!");

// Stream a response
const stream = await agent.stream("Tell me a story");
for await (const chunk of stream) {
console.log(chunk);
}

Models
Direct link to Models

ModelContextToolsReasoningImageAudioVideoInput $/1MOutput $/1M
openai/chatgpt-image-latest
openai/gpt-4.11.0M$2$8
openai/gpt-4.1-mini1.0M$0.40$2
openai/gpt-4o128K$3$10
openai/gpt-4o-2024-08-06128K$3$10
openai/gpt-4o-2024-11-20128K$3$10
openai/gpt-4o-mini128K$0.15$0.60
openai/gpt-5400K$1$10
openai/gpt-5-mini400K$0.25$2
openai/gpt-5-nano400K$0.05$0.40
openai/gpt-5-pro400K$15$120
openai/gpt-5.1400K$1$10
openai/gpt-5.2400K$2$14
openai/gpt-5.2-pro400K$21$168
openai/gpt-5.3-codex400K$2$14
openai/gpt-5.3-codex-spark128K$2$14
openai/gpt-5.41.1M$3$15
openai/gpt-5.4-mini400K$0.75$5
openai/gpt-5.4-nano400K$0.20$1
openai/gpt-5.4-pro1.1M$30$180
openai/gpt-5.51.1M$5$30
openai/gpt-5.5-pro1.1M$30$180
openai/gpt-5.61.1M$4$20
openai/gpt-5.6-luna1.1M$0.20$1
openai/gpt-5.6-sol1.1M$4$20
openai/gpt-5.6-terra1.1M$2$12
openai/gpt-6-astra1.1M$10$50
openai/gpt-image-1-mini
openai/gpt-image-1.5
openai/gpt-image-2$5$30
openai/gpt-realtime-2.1128K$4$24
openai/o3200K$2$8
openai/o3-pro200K$20$80
openai/text-embedding-3-large8K$0.13
openai/text-embedding-3-small8K$0.02
openai/text-embedding-ada-0028K$0.10
36 available models

Model availability, capabilities, context windows, and pricing are sourced from models.dev and may change.

Advanced configuration
Direct link to Advanced configuration

Custom headers
Direct link to Custom headers

src/mastra/agents/my-agent.ts
const agent = new Agent({
id: "custom-agent",
name: "custom-agent",
model: {
id: "openai/chatgpt-image-latest",
apiKey: process.env.OPENAI_API_KEY,
headers: {
"X-Custom-Header": "value"
}
}
});

Dynamic model selection
Direct link to Dynamic model selection

src/mastra/agents/my-agent.ts
const agent = new Agent({
id: "dynamic-agent",
name: "Dynamic Agent",
model: ({ requestContext }) => {
const useAdvanced = requestContext.task === "complex";
return useAdvanced
? "openai/text-embedding-ada-002"
: "openai/chatgpt-image-latest";
}
});

Provider Options
Direct link to Provider Options

OpenAI supports the following provider-specific options via the providerOptions parameter:

const response = await agent.generate("Hello!", {
providerOptions: {
openai: {
// See available options in the table below
}
}
});

Available Options
Direct link to Available Options

conversation?:

string | null | undefined

include?:

("web_search_call.results" | "file_search_call.results" | "message.output_text.logprobs" | "reasoning.encrypted_content")[] | null | undefined

instructions?:

string | null | undefined

logprobs?:

number | boolean | undefined

maxToolCalls?:

number | null | undefined

metadata?:

any

parallelToolCalls?:

boolean | null | undefined

previousResponseId?:

string | null | undefined

promptCacheKey?:

string | null | undefined

promptCacheOptions?:

{ mode?: "explicit" | "implicit" | undefined; ttl?: "30m" | undefined; } | undefined

promptCacheRetention?:

"in_memory" | "24h" | null | undefined

reasoningEffort?:

string | null | undefined

reasoningMode?:

"standard" | "pro" | undefined

reasoningContext?:

"auto" | "current_turn" | "all_turns" | undefined

reasoningSummary?:

string | null | undefined

safetyIdentifier?:

string | null | undefined

serviceTier?:

"auto" | "default" | "flex" | "priority" | null | undefined

store?:

boolean | null | undefined
Controls whether OpenAI stores your API requests for model training. Required to be "false" if your organization has zero data retention enabled. See: https://platform.openai.com/docs/guides/your-data#zero-data-retention

passThroughUnsupportedFiles?:

boolean | undefined

strictJsonSchema?:

boolean | null | undefined

textVerbosity?:

"low" | "medium" | "high" | null | undefined

truncation?:

"auto" | "disabled" | null | undefined

user?:

string | null | undefined

systemMessageMode?:

"remove" | "system" | "developer" | undefined

forceReasoning?:

boolean | undefined

allowedTools?:

{ toolNames: string[]; mode?: "auto" | "required" | undefined; } | undefined