OpenAI compatibility

Which OpenAI endpoints, request fields, and response fields Avey Olive supports, and which it does not.

Avey Olive implements a subset of the OpenAI API. To point an OpenAI SDK at Olive, change three values:

Base URLbase_url
https://api.avey.ai/llmReplaces the OpenAI endpoint
API keyapi_key
$AVEY_API_KEYFrom the API platform
Modelmodel
oliveThe only id you send

The Quickstart shows that pattern in each SDK, and Frameworks shows it in the libraries that wrap them.

Check your integration

Most integrations that send text and read content work unchanged. If your code does any of the following, change it first.

If your codeChange
Sends images as image_url or files as inline dataUpload with POST /files and send the file_id. Inline data returns 400
Uses response_format for JSONUntested. Ask for JSON in the prompt and validate it. See Structured outputs
Sends tools on chat completionsUntested. Move function calling to the Responses API. See Tools
Sends stop as a stringWrap it in an array. A bare string returns 400
Reads only message.contentAlso read message.reasoning_content if you want the reasoning. See Reasoning
Calls the Responses API without max_output_tokensSet it. Without it, each model call stops at 4,096 tokens
Retries every 429Stop on insufficient_quota. See Rate limits
Calls embeddings, audio, images, batches or realtimeNot available. See the last table
Records system_fingerprintIt is empty or absent. Track model changes in the Changelog

Fields not in the tables below are untested. Write code as though they do nothing. The limits are on Models and limits.

Supported

Field or endpointWhat changes in your code
POST /chat/completionsStreams with stream: true. The reference is here.
POST /completionsStreams. Returns no reasoning field.
POST /responsesStreams. Tools, stored responses, and file search live here. See Tools.
POST /responses/compactShrinks a stored conversation. See Conversation state.
POST /responses/input_tokensCounts input tokens before you send.
GET and DELETE /responses/{id}, GET /responses/{id}/input_itemsReads or deletes a stored response.
GET /modelsLists the model ids your key can use.
/filesUploads documents for use by file_id. See Files.
/vector_storesIndexes files for search. See Vector stores.
modelRequired. Send olive. An unknown id returns 404. See Models.
messagesRequired. Send the whole history on every call. Chat completions keep no state.
max_tokensUp to 16,384, which is also the default. A larger value is lowered to 16,384. Reasoning counts against it.
temperature0 to 2.
top_p0 to 1. Set this or temperature, not both.
streamServer-sent events, ending with data: [DONE].
stopAn array of up to 4 strings. The matched sequence is not returned.
response_formatUntested. See Structured outputs for what is verified.
reasoning_effortnone, minimal, low, medium, high, or xhigh. Each sets a thinking budget. Any other value returns 400. See Reasoning.
nEach answer is generated and billed. The rate limit reserves max_tokens for each one.
Responses inputA string, or a list of items. Refer to uploaded files by file_id in input_file parts.
Responses instructionsSets Olive's role and constraints.
Responses max_output_tokensUp to 16,384. Without it, each model call stops at 4,096. A response that stops here has status: "incomplete".
Responses temperature0 to 2.
Responses previous_response_idContinues a stored response. Send only the new input. An id that is not yours, or does not exist, returns 404.
Responses storetrue keeps the response until you delete it.
Responses reasoning.effortThe same values as reasoning_effort.
Responses tools: functionYou run the function and return its output as a function_call_output item. See Tools.
Responses tools: file_searchSearches vector stores you own. See Vector stores.
Responses tool_choiceauto or required.
Responses includefile_search_call.results adds the matched chunks to each file_search_call item.
Chat response choices[].message.contentAlways present. Can be null or empty when finish_reason is length.
Chat response choices[].message.reasoning_contentPresent when Olive reasoned. Show or log it. Do not parse it.
Chat response usageOn a stream, only on the final chunk. prompt_tokens_details.cached_tokens counts prompt tokens served from your account's cache.
Responses statusincomplete when generation stopped at max_output_tokens. Check it before you use the answer.
Responses outputA plain answer is one message item. Tool calls appear as function_call or file_search_call items.
Message content as an array of file partsAllowed in user messages. Reference an uploaded file by file_id.

Accepted and ignored

FieldWhat changes in your code
stream_options.include_usageAccepted. Usage is always on the final chunk, set or not.
userAccepted. Avey does not read it. Keep your own tracking.
metadataAccepted. Chat completions have no retrieval endpoint, so you cannot read it back.
store on chat completionsAccepted. To keep a response, use store on /responses.
service_tierAccepted. Olive has one tier.
Responses truncation: "disabled"Accepted. An over-long conversation can lose its oldest turns and then fail with 500. Count tokens first with /responses/input_tokens.

Rejected or not available

Field or endpointWhat changes in your code
stop as a bare stringReturns 400. Wrap it: stop=["\n\n"].
Responses reasoning.summaryReturns 400.
Responses backgroundReturns 400.
Responses context_managementReturns 400. Compact with POST /responses/compact.
Responses tools of any other type, including mcpReturns 400.
web_search tool and web_search_optionsComing soon. See Web search.
Message content with image_url parts or inline file dataReturns 400. Upload the file with POST /files and send its file_id.
Response field refusalAlways null.
Response fields logprobs and service_tierUntested. Do not rely on them.
system_fingerprintEmpty or absent. Do not read it.
Reasoning on /responses and /completionsNot returned as a separate field. Only /chat/completions returns it.
POST /embeddingsReturns 404.
Audio, image generation, batches, and the Conversations APIReturns 404. Chain turns with previous_response_id instead of Conversations.
Realtime (WebSocket mode)Returns 400.
/vector_stores/{id}/file_batchesReturns 403. Attach files one at a time. See Vector stores.
Any other pathReturns 404.

Next steps

Last updated