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 URL
base_urlhttps://api.avey.ai/llmReplaces the OpenAI endpointAPI key
api_key$AVEY_API_KEYFrom the API platformModel
modeloliveThe only id you sendThe 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 code | Change |
|---|---|
Sends images as image_url or files as inline data | Upload with POST /files and send the file_id. Inline data returns 400 |
Uses response_format for JSON | Untested. Ask for JSON in the prompt and validate it. See Structured outputs |
Sends tools on chat completions | Untested. Move function calling to the Responses API. See Tools |
Sends stop as a string | Wrap it in an array. A bare string returns 400 |
Reads only message.content | Also read message.reasoning_content if you want the reasoning. See Reasoning |
Calls the Responses API without max_output_tokens | Set it. Without it, each model call stops at 4,096 tokens |
Retries every 429 | Stop on insufficient_quota. See Rate limits |
| Calls embeddings, audio, images, batches or realtime | Not available. See the last table |
Records system_fingerprint | It 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 endpoint | What changes in your code |
|---|---|
POST /chat/completions | Streams with stream: true. The reference is here. |
POST /completions | Streams. Returns no reasoning field. |
POST /responses | Streams. Tools, stored responses, and file search live here. See Tools. |
POST /responses/compact | Shrinks a stored conversation. See Conversation state. |
POST /responses/input_tokens | Counts input tokens before you send. |
GET and DELETE /responses/{id}, GET /responses/{id}/input_items | Reads or deletes a stored response. |
GET /models | Lists the model ids your key can use. |
/files | Uploads documents for use by file_id. See Files. |
/vector_stores | Indexes files for search. See Vector stores. |
model | Required. Send olive. An unknown id returns 404. See Models. |
messages | Required. Send the whole history on every call. Chat completions keep no state. |
max_tokens | Up to 16,384, which is also the default. A larger value is lowered to 16,384. Reasoning counts against it. |
temperature | 0 to 2. |
top_p | 0 to 1. Set this or temperature, not both. |
stream | Server-sent events, ending with data: [DONE]. |
stop | An array of up to 4 strings. The matched sequence is not returned. |
response_format | Untested. See Structured outputs for what is verified. |
reasoning_effort | none, minimal, low, medium, high, or xhigh. Each sets a thinking budget. Any other value returns 400. See Reasoning. |
n | Each answer is generated and billed. The rate limit reserves max_tokens for each one. |
Responses input | A string, or a list of items. Refer to uploaded files by file_id in input_file parts. |
Responses instructions | Sets Olive's role and constraints. |
Responses max_output_tokens | Up to 16,384. Without it, each model call stops at 4,096. A response that stops here has status: "incomplete". |
Responses temperature | 0 to 2. |
Responses previous_response_id | Continues a stored response. Send only the new input. An id that is not yours, or does not exist, returns 404. |
Responses store | true keeps the response until you delete it. |
Responses reasoning.effort | The same values as reasoning_effort. |
Responses tools: function | You run the function and return its output as a function_call_output item. See Tools. |
Responses tools: file_search | Searches vector stores you own. See Vector stores. |
Responses tool_choice | auto or required. |
Responses include | file_search_call.results adds the matched chunks to each file_search_call item. |
Chat response choices[].message.content | Always present. Can be null or empty when finish_reason is length. |
Chat response choices[].message.reasoning_content | Present when Olive reasoned. Show or log it. Do not parse it. |
Chat response usage | On a stream, only on the final chunk. prompt_tokens_details.cached_tokens counts prompt tokens served from your account's cache. |
Responses status | incomplete when generation stopped at max_output_tokens. Check it before you use the answer. |
Responses output | A plain answer is one message item. Tool calls appear as function_call or file_search_call items. |
Message content as an array of file parts | Allowed in user messages. Reference an uploaded file by file_id. |
Accepted and ignored
| Field | What changes in your code |
|---|---|
stream_options.include_usage | Accepted. Usage is always on the final chunk, set or not. |
user | Accepted. Avey does not read it. Keep your own tracking. |
metadata | Accepted. Chat completions have no retrieval endpoint, so you cannot read it back. |
store on chat completions | Accepted. To keep a response, use store on /responses. |
service_tier | Accepted. 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 endpoint | What changes in your code |
|---|---|
stop as a bare string | Returns 400. Wrap it: stop=["\n\n"]. |
Responses reasoning.summary | Returns 400. |
Responses background | Returns 400. |
Responses context_management | Returns 400. Compact with POST /responses/compact. |
Responses tools of any other type, including mcp | Returns 400. |
web_search tool and web_search_options | Coming soon. See Web search. |
Message content with image_url parts or inline file data | Returns 400. Upload the file with POST /files and send its file_id. |
Response field refusal | Always null. |
Response fields logprobs and service_tier | Untested. Do not rely on them. |
system_fingerprint | Empty or absent. Do not read it. |
Reasoning on /responses and /completions | Not returned as a separate field. Only /chat/completions returns it. |
POST /embeddings | Returns 404. |
| Audio, image generation, batches, and the Conversations API | Returns 404. Chain turns with previous_response_id instead of Conversations. |
| Realtime (WebSocket mode) | Returns 400. |
/vector_stores/{id}/file_batches | Returns 403. Attach files one at a time. See Vector stores. |
| Any other path | Returns 404. |
Next steps
Last updated