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
| Endpoint | Status |
|---|---|
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
modelmust be a catalog id enabled on your org (GET /v1/models). Unknown or non-enabled ids return400 model_not_enabled.functions(the deprecated OpenAI field) is not supported — usetools.- Image inputs — vision support is model-dependent and some
upstreams only accept provider-hosted image URLs. Check the
visioncapability on/v1/models; contact support for specifics.
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.