Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: OpenAI Completions API
description: The OpenAI REST API. Please see https://platform.openai.com/docs/api-reference for more details.
version: 2.3.0
termsOfService: https://openai.com/policies/terms-of-use
contact:
name: OpenAI Support
url: https://help.openai.com/
license:
name: MIT
identifier: MIT
servers:
- url: https://api.openai.com/v1
security:
- ApiKeyAuth: []
tags:
- name: Completions
description: Given a prompt, the model will return one or more predicted completions, and can also return the probabilities of alternative tokens at each position.
paths:
/completions:
post:
operationId: createCompletion
tags:
- Completions
summary: Create completion
description: 'Creates a completion for the provided prompt and parameters.
Returns a completion object, or a sequence of completion objects if the request is streamed.'
requestBody:
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCompletionRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/CreateCompletionResponse'
'429':
$ref: '#/components/responses/InferenceRateLimited'
'503':
$ref: '#/components/responses/InferenceServiceUnavailable'
x-oaiMeta:
group: completions
legacy: true
examples:
- title: No streaming
request:
curl: "curl https://api.openai.com/v1/completions \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer $OPENAI_API_KEY\" \\\n -d '{\n \"model\": \"gpt-3.5-turbo-instruct\",\n \"prompt\": \"Say this is a test\",\n \"max_tokens\": 7,\n \"temperature\": 0\n }'\n"
python: "from openai import OpenAI\nclient = OpenAI()\n\nclient.completions.create(\n model=\"gpt-3.5-turbo-instruct\",\n prompt=\"Say this is a test\",\n max_tokens=7,\n temperature=0\n)\n"
javascript: "import OpenAI from \"openai\";\n\nconst openai = new OpenAI();\n\nasync function main() {\n const completion = await openai.completions.create({\n model: \"gpt-3.5-turbo-instruct\",\n prompt: \"Say this is a test.\",\n max_tokens: 7,\n temperature: 0,\n });\n\n console.log(completion);\n}\nmain();"
response: "{\n \"id\": \"cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7\",\n \"object\": \"text_completion\",\n \"created\": 1589478378,\n \"model\": \"gpt-3.5-turbo-instruct\",\n \"system_fingerprint\": \"fp_44709d6fcb\",\n \"choices\": [\n {\n \"text\": \"\\n\\nThis is indeed a test\",\n \"index\": 0,\n \"logprobs\": null,\n \"finish_reason\": \"length\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 5,\n \"completion_tokens\": 7,\n \"total_tokens\": 12\n }\n}\n"
- title: Streaming
request:
curl: "curl https://api.openai.com/v1/completions \\\n -H \"Content-Type: application/json\" \\\n -H \"Authorization: Bearer $OPENAI_API_KEY\" \\\n -d '{\n \"model\": \"gpt-3.5-turbo-instruct\",\n \"prompt\": \"Say this is a test\",\n \"max_tokens\": 7,\n \"temperature\": 0,\n \"stream\": true\n }'\n"
python: "from openai import OpenAI\nclient = OpenAI()\n\nfor chunk in client.completions.create(\n model=\"gpt-3.5-turbo-instruct\",\n prompt=\"Say this is a test\",\n max_tokens=7,\n temperature=0,\n stream=True\n):\n print(chunk.choices[0].text)\n"
javascript: "import OpenAI from \"openai\";\n\nconst openai = new OpenAI();\n\nasync function main() {\n const stream = await openai.completions.create({\n model: \"gpt-3.5-turbo-instruct\",\n prompt: \"Say this is a test.\",\n stream: true,\n });\n\n for await (const chunk of stream) {\n console.log(chunk.choices[0].text)\n }\n}\nmain();"
response: "{\n \"id\": \"cmpl-7iA7iJjj8V2zOkCGvWF2hAkDWBQZe\",\n \"object\": \"text_completion\",\n \"created\": 1690759702,\n \"choices\": [\n {\n \"text\": \"This\",\n \"index\": 0,\n \"logprobs\": null,\n \"finish_reason\": null\n }\n ],\n \"model\": \"gpt-3.5-turbo-instruct\"\n \"system_fingerprint\": \"fp_44709d6fcb\",\n}\n"
components:
schemas:
ChatCompletionStreamOptions:
anyOf:
- description: 'Options for streaming response. Only set this when you set `stream: true`.
'
type: object
properties:
include_usage:
type: boolean
description: 'If set, an additional chunk will be streamed before the `data: [DONE]`
message. The `usage` field on this chunk shows the token usage statistics
for the entire request, and the `choices` field will always be an empty
array.
All other chunks will also include a `usage` field, but with a null
value. **NOTE:** If the stream is interrupted, you may not receive the
final usage chunk which contains the total token usage for the request.
'
include_obfuscation:
type: boolean
description: 'When true, stream obfuscation will be enabled. Stream obfuscation adds
random characters to an `obfuscation` field on streaming delta events to
normalize payload sizes as a mitigation to certain side-channel attacks.
These obfuscation fields are included by default, but add a small amount
of overhead to the data stream. You can set `include_obfuscation` to
false to optimize for bandwidth if you trust the network links between
your application and the OpenAI API.
'
- type: 'null'
_MisalignmentErrorType:
anyOf:
- type: string
- type: string
enum:
- potentially_unintended_data_transfer
- potentially_unintended_data_access
- potentially_unintended_destructive_activity
- other
MisalignmentErrorDetailsResource:
properties:
error_type:
$ref: '#/components/schemas/_MisalignmentErrorType'
description: An optional classification; clients must accept additional values.
detailed_explanation:
type: string
description: The public explanation for this block.
steer:
$ref: '#/components/schemas/_MisalignmentSteer'
description: An optional public continuation instruction.
type: object
required: []
CreateCompletionResponse:
type: object
description: 'Represents a completion response from the API. Note: both the streamed and non-streamed response objects share the same shape (unlike the chat endpoint).
'
properties:
id:
type: string
description: A unique identifier for the completion.
choices:
type: array
description: The list of completion choices the model generated for the input prompt.
items:
type: object
required:
- finish_reason
- index
- logprobs
- text
properties:
finish_reason:
type: string
description: 'The reason the model stopped generating tokens. This will be `stop` if the model hit a natural stop point or a provided stop sequence,
`length` if the maximum number of tokens specified in the request was reached,
or `content_filter` if content was omitted due to a flag from our content filters.
'
enum:
- stop
- length
- content_filter
index:
type: integer
logprobs:
anyOf:
- type: object
properties:
text_offset:
type: array
items:
type: integer
token_logprobs:
type: array
items:
type: number
tokens:
type: array
items:
type: string
top_logprobs:
type: array
items:
type: object
additionalProperties:
type: number
- type: 'null'
text:
type: string
created:
type: integer
format: unixtime
description: The Unix timestamp (in seconds) of when the completion was created.
model:
type: string
description: The model used for completion.
system_fingerprint:
type: string
description: 'This fingerprint represents the backend configuration that the model runs with.
Can be used in conjunction with the `seed` request parameter to understand when backend changes have been made that might impact determinism.
'
object:
type: string
description: The object type, which is always "text_completion"
enum:
- text_completion
x-stainless-const: true
usage:
$ref: '#/components/schemas/CompletionUsage'
required:
- id
- object
- created
- model
- choices
x-oaiMeta:
name: The completion object
legacy: true
example: "{\n \"id\": \"cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7\",\n \"object\": \"text_completion\",\n \"created\": 1589478378,\n \"model\": \"gpt-3.5-turbo-instruct\",\n \"choices\": [\n {\n \"text\": \"\\n\\nThis is indeed a test\",\n \"index\": 0,\n \"logprobs\": null,\n \"finish_reason\": \"length\"\n }\n ],\n \"usage\": {\n \"prompt_tokens\": 5,\n \"completion_tokens\": 7,\n \"total_tokens\": 12\n }\n}\n"
StopConfiguration:
description: 'Not supported with latest reasoning models `o3` and `o4-mini`.
Up to 4 sequences where the API will stop generating further tokens. The
returned text will not contain the stop sequence.
'
default: null
nullable: true
oneOf:
- type: string
default: <|endoftext|>
example: '
'
nullable: true
- type: array
minItems: 1
maxItems: 4
items:
type: string
example: '["\n"]'
_MisalignmentSteer:
properties:
message:
type: string
description: The public continuation instruction.
type: object
required:
- message
CreateCompletionRequest:
type: object
properties:
model:
description: 'ID of the model to use. You can use the [List models](https://developers.openai.com/api/reference/resources/models/methods/list) API to see all of your available models, or see our [Model overview](https://developers.openai.com/api/docs/models) for descriptions of them.
'
anyOf:
- type: string
- type: string
enum:
- gpt-3.5-turbo-instruct
- davinci-002
- babbage-002
x-oaiTypeLabel: string
prompt:
description: 'The prompt(s) to generate completions for, encoded as a string, array of strings, array of tokens, or array of token arrays.
Note that <|endoftext|> is the document separator that the model sees during training, so if a prompt is not specified the model will generate as if from the beginning of a new document.
'
default: <|endoftext|>
nullable: true
oneOf:
- type: string
default: ''
example: This is a test.
- type: array
items:
type: string
default: ''
example: This is a test.
- type: array
minItems: 1
items:
type: integer
example: '[1212, 318, 257, 1332, 13]'
- type: array
minItems: 1
items:
type: array
minItems: 1
items:
type: integer
example: '[[1212, 318, 257, 1332, 13]]'
best_of:
type: integer
default: 1
minimum: 0
maximum: 20
nullable: true
description: 'Generates `best_of` completions server-side and returns the "best" (the one with the highest log probability per token). Results cannot be streamed.
When used with `n`, `best_of` controls the number of candidate completions and `n` specifies how many to return – `best_of` must be greater than `n`.
**Note:** Because this parameter generates many completions, it can quickly consume your token quota. Use carefully and ensure that you have reasonable settings for `max_tokens` and `stop`.
'
echo:
type: boolean
default: false
nullable: true
description: 'Echo back the prompt in addition to the completion
'
frequency_penalty:
type: number
default: 0
minimum: -2
maximum: 2
nullable: true
description: 'Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so far, decreasing the model''s likelihood to repeat the same line verbatim.
[See more information about frequency and presence penalties.](https://developers.openai.com/api/docs/guides/text)
'
logit_bias:
type: object
x-oaiTypeLabel: map
default: null
nullable: true
additionalProperties:
type: integer
description: 'Modify the likelihood of specified tokens appearing in the completion.
Accepts a JSON object that maps tokens (specified by their token ID in the GPT tokenizer) to an associated bias value from -100 to 100. You can use this [tokenizer tool](https://platform.openai.com/tokenizer?view=bpe) to convert text to token IDs. Mathematically, the bias is added to the logits generated by the model prior to sampling. The exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token.
As an example, you can pass `{"50256": -100}` to prevent the <|endoftext|> token from being generated.
'
logprobs:
type: integer
minimum: 0
maximum: 5
default: null
nullable: true
description: 'Include the log probabilities on the `logprobs` most likely output tokens, as well the chosen tokens. For example, if `logprobs` is 5, the API will return a list of the 5 most likely tokens. The API will always return the `logprob` of the sampled token, so there may be up to `logprobs+1` elements in the response.
The maximum value for `logprobs` is 5.
'
max_tokens:
type: integer
minimum: 0
default: 16
example: 16
nullable: true
description: 'The maximum number of [tokens](https://platform.openai.com/tokenizer) that can be generated in the completion.
The token count of your prompt plus `max_tokens` cannot exceed the model''s context length. [Example Python code](https://cookbook.openai.com/examples/how_to_count_tokens_with_tiktoken) for counting tokens.
'
n:
type: integer
minimum: 1
maximum: 128
default: 1
example: 1
nullable: true
description: 'How many completions to generate for each prompt.
**Note:** Because this parameter generates many completions, it can quickly consume your token quota. Use carefully and ensure that you have reasonable settings for `max_tokens` and `stop`.
'
presence_penalty:
type: number
default: 0
minimum: -2
maximum: 2
nullable: true
description: 'Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far, increasing the model''s likelihood to talk about new topics.
[See more information about frequency and presence penalties.](https://developers.openai.com/api/docs/guides/text)
'
seed:
type: integer
format: int64
nullable: true
description: 'If specified, our system will make a best effort to sample deterministically, such that repeated requests with the same `seed` and parameters should return the same result.
Determinism is not guaranteed, and you should refer to the `system_fingerprint` response parameter to monitor changes in the backend.
'
stop:
$ref: '#/components/schemas/StopConfiguration'
stream:
description: 'Whether to stream back partial progress. If set, tokens will be sent as data-only [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Event_stream_format) as they become available, with the stream terminated by a `data: [DONE]` message. [Example Python code](https://cookbook.openai.com/examples/how_to_stream_completions).
'
type: boolean
nullable: true
default: false
stream_options:
$ref: '#/components/schemas/ChatCompletionStreamOptions'
suffix:
description: 'The suffix that comes after a completion of inserted text.
This parameter is only supported for `gpt-3.5-turbo-instruct`.
'
default: null
nullable: true
type: string
example: test.
temperature:
type: number
minimum: 0
maximum: 2
default: 1
example: 1
nullable: true
description: 'What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while lower values like 0.2 will make it more focused and deterministic.
We generally recommend altering this or `top_p` but not both.
'
top_p:
type: number
minimum: 0
maximum: 1
default: 1
example: 1
nullable: true
description: 'An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are considered.
We generally recommend altering this or `temperature` but not both.
'
user:
type: string
example: user-1234
description: 'A unique identifier representing your end-user, which can help OpenAI to monitor and detect abuse. [Learn more](https://developers.openai.com/api/docs/guides/safety-best-practices#implement-safety-identifiers).
'
required:
- model
- prompt
Error:
type: object
properties:
code:
anyOf:
- type: string
- type: 'null'
message:
type: string
param:
anyOf:
- type: string
- type: 'null'
type:
type: string
misalignment:
$ref: '#/components/schemas/MisalignmentErrorDetailsResource'
required:
- type
- message
- param
- code
ErrorResponse:
type: object
properties:
error:
$ref: '#/components/schemas/Error'
required:
- error
CompletionUsage:
type: object
description: Usage statistics for the completion request.
properties:
completion_tokens:
type: integer
default: 0
description: Number of tokens in the generated completion.
prompt_tokens:
type: integer
default: 0
description: Number of tokens in the prompt.
total_tokens:
type: integer
default: 0
description: Total number of tokens used in the request (prompt + completion).
completion_tokens_details:
type: object
description: Breakdown of tokens used in a completion.
properties:
accepted_prediction_tokens:
type: integer
default: 0
description: 'When using Predicted Outputs, the number of tokens in the
prediction that appeared in the completion.
'
audio_tokens:
type: integer
default: 0
description: Audio input tokens generated by the model.
reasoning_tokens:
type: integer
default: 0
description: Tokens generated by the model for reasoning.
text_tokens:
type: integer
description: Text output tokens generated by the model.
rejected_prediction_tokens:
type: integer
default: 0
description: 'When using Predicted Outputs, the number of tokens in the
prediction that did not appear in the completion. However, like
reasoning tokens, these tokens are still counted in the total
completion tokens for purposes of billing, output, and context window
limits.
'
prompt_tokens_details:
type: object
description: Breakdown of tokens used in the prompt.
properties:
audio_tokens:
type: integer
default: 0
description: Audio input tokens present in the prompt.
cached_tokens:
type: integer
default: 0
description: Cached tokens present in the prompt.
text_tokens:
type: integer
description: Text input tokens present in the prompt.
image_tokens:
type: integer
description: Image input tokens present in the prompt.
cache_write_tokens:
type: integer
default: 0
description: The unadjusted number of prompt tokens written to cache.
required:
- prompt_tokens
- completion_tokens
- total_tokens
responses:
InferenceRateLimited:
description: The request was rejected because a rate limit was exceeded. A slow_down error means traffic increased too quickly; reduce your request rate, then increase it gradually.
headers:
Retry-After:
description: The minimum number of seconds to wait before retrying. This header is returned when the server has computed a retry delay and may be omitted.
schema:
type: integer
minimum: 1
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
slowDown:
summary: Traffic increased too quickly
value:
error:
message: Your request rate increased too quickly. Please reduce the request rate and gradually increase it again.
type: rate_limit_error
param: null
code: slow_down
InferenceServiceUnavailable:
description: The service is temporarily unavailable. A server_is_overloaded error means the requested model is temporarily overloaded; retry after a brief delay.
headers:
Retry-After:
description: The minimum number of seconds to wait before retrying. This header is returned when the server has computed a retry delay and may be omitted.
schema:
type: integer
minimum: 1
content:
application/json:
schema:
$ref: '#/components/schemas/ErrorResponse'
examples:
serverOverloaded:
summary: The requested model is temporarily overloaded
value:
error:
message: The model is temporarily overloaded. Please retry your request after a brief delay.
type: service_unavailable_error
param: null
code: server_is_overloaded
securitySchemes:
ApiKeyAuth:
type: http
scheme: bearer
AdminApiKeyAuth:
type: http
scheme: bearer
x-oaiMeta:
navigationGroups:
- id: responses
title: Responses API
- id: webhooks
title: Webhooks
- id: endpoints
title: Platform APIs
- id: vector_stores
title: Vector stores
- id: chatkit
title: ChatKit
beta: true
- id: containers
title: Containers
- id: live
title: Live (alpha)
- id: realtime
title: Realtime
- id: chat
title: Chat Completions
- id: assistants
title: Assistants
deprecated: true
- id: administration
title: Administration
- id: legacy
title: Legacy
groups:
- id: responses-streaming
title: Streaming events
description: 'When you [create a Response](https://developers.openai.com/api/reference/resources/responses/methods/create) with
`stream` set to `true`, the server will emit server-sent events to the
client as the Response is generated. This section contains the events that
are emitted by the server.
When processing a `compaction_trigger`, `response.compaction.compacting`
reports newly sampled summary output at most once every 30 seconds. It
carries no summary content and does not modify the compaction output item.
The existing `response.output_item.added` and `response.output_item.done`
events mark that item''s lifecycle; `response.output_item.done` carries its
final encrypted content. A short compaction may finish without emitting a
progress event.
[Learn more about streaming responses](https://developers.openai.com/api/docs/guides/streaming-responses).
'
navigationGroup: responses
sections:
- type: object
key: ResponseCreatedEvent
path: <auto>
- type: object
key: ResponseInProgressEvent
path: <auto>
- type: object
key: ResponseCompletedEvent
path: <auto>
- type: object
key: ResponseFailedEvent
path: <auto>
- type: object
key: ResponseIncompleteEvent
path: <auto>
- type: object
key: ResponseOutputItemAddedEvent
path: <auto>
- type: object
key: ResponseOutputItemDoneEvent
path: <auto>
- type: object
key: ResponseCompactionCompactingEvent
path: <auto>
- type: object
key: ResponseContentPartAddedEvent
path: <auto>
- type: object
key: ResponseContentPartDoneEvent
path: <auto>
- type: object
key: ResponseTextDeltaEvent
path: response/output_text/delta
- type: object
key: ResponseTextDoneEvent
path: response/output_text/done
- type: object
key: ResponseRefusalDeltaEvent
path: <auto>
- type: object
key: ResponseRefusalDoneEvent
path: <auto>
- type: object
key: ResponseFunctionCallArgumentsDeltaEvent
path: <auto>
- type: object
key: ResponseFunctionCallArgumentsDoneEvent
path: <auto>
- type: object
key: ResponseFileSearchCallInProgressEvent
path: <auto>
- type: object
key: ResponseFileSearchCallSearchingEvent
path: <auto>
- type: object
key: ResponseFileSearchCallCompletedEvent
path: <auto>
- type: object
key: ResponseWebSearchCallInProgressEvent
path: <auto>
- type: object
key: ResponseWebSearchCallSearchingEvent
path: <auto>
- type: object
key: ResponseWebSearchCallCompletedEvent
path: <auto>
- type: object
key: ResponseReasoningSummaryPartAddedEvent
path: <auto>
- type: object
key: ResponseReasoningSummaryPartDoneEvent
path: <auto>
- type: object
key: ResponseReasoningSummaryTextDeltaEvent
path: <auto>
- type: object
key: ResponseReasoningSummaryTextDoneEvent
path: <auto>
- type: object
key: ResponseReasoningTextDeltaEvent
path: <auto>
- type: object
key: ResponseReasoningTextDoneEvent
path: <auto>
- type: object
key: ResponseImageGenCallCompletedEvent
path: <auto>
- type: object
key: ResponseImageGenCallGeneratingEvent
path: <auto>
- type: object
key: ResponseImageGenCallInProgressEvent
path: <auto>
- type: object
key: ResponseImageGenCallPartialImageEvent
path: <auto>
- type: object
key: ResponseMCPCallArgumentsDeltaEvent
path: <auto>
- type: object
key: ResponseMCPCallArgumentsDoneEvent
path: <auto>
- type: object
key: ResponseMCPCallCompletedEvent
path: <auto>
- type: object
key: ResponseMCPCallFailedEvent
path: <auto>
- type: object
key: ResponseMCPCallInProgressEvent
path: <auto>
- type: object
key: ResponseMCPListToolsCompletedEvent
path: <auto>
- type: object
key: ResponseMCPListToolsFailedEvent
path: <auto>
- type: object
key: ResponseMCPListToolsInProgressEvent
path: <auto>
- type: object
key: ResponseCodeInterpreterCallInProgressEvent
path: <auto>
- type: object
key: ResponseCodeInterpreterCallInterpretingEvent
path: <auto>
- type: object
key: ResponseCodeInterpreterCallCompletedEvent
path: <auto>
- type: object
key: ResponseCodeInterpreterCallCodeDeltaEvent
path: <auto>
- type: object
key: ResponseCodeInterpreterCallCodeDoneEvent
path: <auto>
- type: object
key: ResponseOutputTextAnnotationAddedEvent
path: <auto>
- type: object
key: ResponseQueuedEvent
path: <auto>
- type: object
key: ResponseCustomToolCallInputDeltaEvent
path: <auto>
- type: object
key: ResponseCustomToolCallInputDoneEvent
path: <auto>
- type: object
key: ResponseErrorEvent
path: <auto>
- id: responses-websocket-client-events
title: Client events
description: 'Events sent by the client over a Responses API WebSocket connection.
'
navigationGroup: responses
sections:
- type: object
key: ResponsesClientEventResponseCreate
path: <auto>
- type: object
key: ResponseSteerEvent
path: <auto>
- id: responses-websocket-server-events
title: Server events (WebSocket only)
description: 'Events emitted only over a Responses API WebSocket connection.
'
navigationGroup: responses
sections:
- type: object
key: ResponseSteerAcceptedEvent
path: <auto>
- type: object
key: ResponseSteerPendingEvent
path: <auto>
- type: object
key: ResponseSteerFailedEvent
path: <auto>
# --- truncated at 32 KB (55 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/openai/refs/heads/main/openapi/openai-completions-api-openapi.yml