Capabilities by Account Type¶
AIRelays serves GPT models (your ChatGPT subscription) and Claude models (your
Claude subscription) through one OpenAI-compatible endpoint,
http://127.0.0.1:8317/v1, with the same API key. The model name picks the
account type: gpt-… models use the ChatGPT runtime, claude:… and
claude-… models use the Claude runtime. /v1/models lists both, with each
model's capabilities under airelays.capabilities.
This page is the reference for what works on each account type. Details for each route are in API Notes.
Legend: ✅ supported · ⚠️ accepted but not applied, and listed in the
x-airelays-ignored-parameters response header · ❌ refused with a clear
error (422, or 501 for whole endpoints).
Routes and responses¶
| Capability | GPT models | Claude models |
|---|---|---|
POST /v1/chat/completions |
✅ | ✅ |
POST /v1/completions |
✅ | ✅ |
POST /v1/responses |
✅ | ✅ |
Streaming (stream: true) on all three routes |
✅ | ✅ |
Standard usage (prompt_tokens, completion_tokens, cached and reasoning details) |
✅ | ✅ |
stream_options.include_usage |
✅ | ✅ |
GET /v1/models, GET /v1/models/{model} |
✅ | ✅ |
Generation controls¶
| Capability | GPT models | Claude models |
|---|---|---|
Output-token limit (max_completion_tokens, max_tokens, max_output_tokens) |
✅ enforced upstream; at least 16 | ✅ the run stops at the limit |
reasoning_effort |
✅ none, low, medium, high, xhigh (per model catalog) |
✅ low, medium, high, xhigh, max (per model) |
temperature, top_p, presence_penalty, frequency_penalty |
⚠️ | ⚠️ |
seed, user, safety_identifier |
⚠️ | ⚠️ |
stop, logprobs, top_logprobs, logit_bias |
❌ | ❌ |
n greater than 1 |
❌ | ❌ |
A response cut by the output-token limit reports finish_reason: "length"
(or status: "incomplete" on /v1/responses), as on OpenAI.
Structured output¶
| Capability | GPT models | Claude models |
|---|---|---|
JSON mode (response_format: {"type": "json_object"}) |
✅ native; the messages must mention JSON | ✅ the answer is checked to be one JSON object |
json_schema |
✅ strict-mode rewrite when strict: true |
✅ enforced natively by the CLI |
Tool calls¶
| Capability | GPT models | Claude models |
|---|---|---|
Function tools; calls returned as tool_calls for your application to run |
✅ | ✅ AIRelays never runs a tool (how) |
tool_choice auto and none |
✅ | ✅ |
Forced call (required or a named tool) |
✅ | ❌ |
allowed_tools |
✅ | ✅ in auto mode |
parallel_tool_calls: false |
✅ | ❌ |
strict: true function tools |
✅ | ⚠️ run non-strict |
custom (grammar) tools |
✅ | ❌ |
Deprecated functions / function_call |
✅ | ❌ |
Server-side web search (web_search tool on /v1/responses) |
✅ | ❌ |
web_search_options on chat completions |
❌ | ❌ |
Inputs, files and conversations¶
| Capability | GPT models | Claude models |
|---|---|---|
Images: PNG, JPEG, GIF, WebP as data URL, http(s) URL or local file_id |
✅ | ✅ |
PDFs and UTF-8 text files (file parts: file_data or file_id) |
✅ | ✅ |
/v1/files (upload, list with pagination, retrieve, delete) |
✅ | ✅ |
/v1/conversations; conversation on /v1/chat/completions and /v1/responses |
✅ | ✅ |
conversation on /v1/completions |
✅ | ❌ |
| One conversation continued across GPT and Claude | ✅ | ✅ (GPT custom tool calls in the history are not supported on Claude) |
previous_response_id |
❌ use conversation |
❌ use conversation |
Audio input, prediction, moderation |
❌ | ❌ |
An image or document a model cannot read returns 422 on both account types,
before any upstream call.
Endpoints outside text generation¶
| Capability | GPT models | Claude models |
|---|---|---|
Image generation and edits (/v1/images/generations, /v1/images/edits) |
✅ gpt-image-2 (details) |
❌ 422 |
Embeddings (/v1/embeddings) |
❌ 501 |
❌ 501 |
| Image variations, audio, realtime | ❌ 501 |
❌ 501 |
Neither subscription offers embeddings: the ChatGPT subscription refuses embedding models, and Anthropic has no embedding model. Neither offers text-to-speech or transcription.
Image generation¶
The ChatGPT subscription serves the GPT image model on two OpenAI Images
routes; /v1/models lists it as gpt-image-2 with these controls under
airelays.capabilities.image_generation. Images come back as PNG
b64_json, as OpenAI's GPT image models return them. The image quota is a
separate 24-hour window (see
Subscription Status).
| Capability | GPT models | Claude models |
|---|---|---|
POST /v1/images/generations: prompt, model (gpt-image-*), background, moderation |
✅ checked locally, forwarded | ❌ 422 |
quality (auto, low, medium, high) and size (auto or WIDTHxHEIGHT) |
⚠️ checked and forwarded, but the service picks its own; a difference is listed in x-airelays-ignored-parameters and the response reports what was rendered |
❌ |
n up to 10 |
✅ one upstream image per count | ❌ |
stream: true |
✅ one image_generation.completed (edits: image_edit.completed) event per image, no partial images |
❌ |
POST /v1/images/edits: image files (multipart, up to 16 PNG/JPEG/WebP), or data URLs and local file_ids (JSON) |
✅ | ❌ 422 |
output_format, output_compression, partial_images, response_format: "url", style, user, safety_identifier, input_fidelity |
⚠️ the answer is always PNG b64_json |
❌ |
mask |
❌ 422 |
❌ |
| Image model ids on the text routes | ❌ 404 |
❌ |
The upstream reports the resolution and quality it rendered in size and
quality. Observed live: four flat-shape requests asking for portrait,
square and landscape sizes at low, medium and high quality all came back
1254x1254 at low, while photographic prompts came back 1536x1024 at
medium. Details for both routes are in
API Notes.
Accounts¶
| Capability | GPT models | Claude models |
|---|---|---|
| Several accounts, balancing and failover | ✅ | ✅ |
Usage and quota reporting (/v1/subscription/status) |
✅ | ✅ for browser sign-ins; not for the setup-token account |
Streaming notes¶
Both account types stream answers as they are generated. Three parts arrive whole instead:
- each tool call's arguments arrive in one chunk;
- on Claude models, a JSON-mode answer arrives in one chunk, because it is checked before it is sent;
- on Claude models, the first token takes a few seconds while the local CLI starts.