OpenAI compatibility

What works, what doesn't, and how to call your endpoint.

Your Dynoyard endpoint speaks the OpenAI HTTP API. Drop in any OpenAI SDK and override base_url:

base_url = https://<your-org>.dynoyard.app/v1
api_key  = sk-dyno-XXXX        (shown once at key creation)
model    = <catalog id, e.g. kimi-k2-thinking>

One key sees your org’s whole catalog. Pick a model per request via the model field — call GET /v1/models for the canonical ids. See supported models.

Supported endpoints

EndpointStatus
POST /v1/chat/completions
GET /v1/models
POST /v1/completions⚠️ legacy text completions, model-dependent
POST /v1/embeddings⚠️ only on models flagged embeddings in /v1/models
POST /v1/files, Assistants API❌ not on roadmap

Streaming

Set "stream": true. The endpoint returns text/event-stream with OpenAI-shaped chunks. We automatically include stream_options: { include_usage: true } so the final data: chunk carries a usage object (with usage.cost) for billing + your dashboard. Reasoning models are best consumed streaming — long thinking passes can exceed non-streaming client timeouts.

Tool calls

Models flagged with the tools capability emit OpenAI-format tool_calls[]. Pass tools: [...] and optionally tool_choice: "auto" | "required" | "none". Send OpenAI-shaped tools, get OpenAI-shaped tool calls — the upstream parser is handled for you per model family.

Reasoning content

Reasoning-capable models (e.g. kimi-k2-thinking, deepseek-r1, mimo-v2-5-pro) return their chain of thought in a separate reasoning_content field on each assistant message, alongside content. Use it for telemetry/debugging, ignore it for plain chat. On multi-turn conversations you may echo reasoning_content back or omit it — the gateway pads missing values internally so you never hit the upstream “must be passed back” error.

Quirks vs OpenAI

Errors & retries

Standard OpenAI error envelope; HTTP status carries the category. Transient 429 / 5xx are retried server-side with jittered backoff before surfacing. Full table in the API contract and rate limits.