POST /v1/chat/completions and POST /v1/embeddings are byte-compatible with the OpenAI wire shapes. Request and response bodies match field-for-field, so existing tooling, retries, and parsers keep working.
Streaming uses standard text/event-stream chunks terminated by data: [DONE]. Set stream: true and read the SSE stream exactly as you would from OpenAI; the serving provider is echoed back in the x-routeplane-provider response header.
# Set "stream": true and read the SSE chunks until data: [DONE]
curl -N https://<gateway-host>/v1/chat/completions \
-H "content-type: application/json" \
-H "x-routeplane-api-key: rp_..." \
-d '{"model":"gpt-4o","stream":true,"messages":[{"role":"user","content":"Stream this"}]}'
Embeddings cover OpenAI, Azure OpenAI, and Gemini. Inputs are residency-classified and PII-masked by default (mask-then-embed); encoding_format: "base64" is passed through verbatim. Anthropic has no first-party embeddings and returns 422 embeddings_not_supported.