ORYNX

Endpoints

Every route ORYNX serves, with streaming behaviour and what is not supported.

All routes are under https://api.orynx.dev.

Generation

Method and pathFormatNotes
POST /v1/chat/completionsOpenAI ChatClaude, GPT, Grok, DeepSeek, Kimi and GLM models. Not Gemini.
POST /v1/responsesOpenAI ResponsesGPT and Grok models. Codex CLI uses this route.
POST /v1/responses/compactOpenAI ResponsesContext compaction used by older Codex CLI versions.
POST /v1/messagesAnthropic MessagesClaude models. ?beta=true is accepted.
POST /v1beta/models/{model}:generateContentGeminiGemini models.
POST /v1beta/models/{model}:streamGenerateContentGeminiServer-sent events with ?alt=sse, a streamed JSON array without it.

Calling a model on a route it doesn't support returns 400 with The model ... is not available on this endpoint.

Models and account

Method and pathReturns
GET /v1/modelsThe models your key may use, in OpenAI shape. With an anthropic-version header: Anthropic shape, Claude models only.
GET /v1/models/{model}One model, in the same shapes.
GET /v1beta/modelsThe Gemini models your key may use, in Gemini shape.
GET /v1beta/models/{model}One Gemini model.
GET /v1/dashboard/billing/subscriptionCredit and expiry of your key. See Balance.
GET /v1/dashboard/billing/usageTotal spend, in cents.
HEAD /api/hello204. Claude Code sends this at startup to open the connection early.

Streaming

  • OpenAI Chat: data: {...} lines, ending with data: [DONE]. Send "stream_options": {"include_usage": true} to get a final chunk with token usage.
  • Anthropic: event: and data: pairs, including message_start, content_block_delta and message_delta with usage.
  • Responses: response.* events, ending with response.completed.
  • Gemini: data: lines with alt=sse, or a JSON array without it.

When a stream has been silent for 15 seconds, ORYNX sends a heartbeat: a : keep-alive comment, or a ping event on Anthropic streams. This keeps proxies and load balancers from closing the connection while the model thinks. A request ends if the model sends nothing for 300 seconds, and no request can run longer than 60 minutes.

Not supported

  • Token counting (/v1/messages/count_tokens and :countTokens) returns 404. Claude Code then estimates context usage from character counts, which is expected.
  • Background responses ("background": true) return 400, and GET /v1/responses/{id} is not served.
  • Embeddings, image generation and audio endpoints are not offered.
  • Request bodies are limited to 50 MB.

On this page