API reference
Everything is OpenAI-compatible. If a parameter works against OpenAI, it works here — unsupported ones are passed through to the upstream rather than rejected.
Endpoints
| POST /chat/completions | The main endpoint. Supports streaming, tool calling, JSON mode and reasoning models. |
| POST /embeddings | Billed on input tokens only — there is no output side. |
| GET /models | Returns only the models this key is allowed to use, in OpenAI list format. Most clients call this on startup. |
Chat completions
curl https://api.voyai.net/v1/chat/completions \
-H "Authorization: Bearer $VOYAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "deepseek-ai/DeepSeek-V3.2",
"messages": [{"role": "user", "content": "Hello"}],
"stream": true
}'Parameters we handle specially
| Parameter | Note |
|---|---|
| model | Use the model ID exactly as shown on the Models page. We map it to whichever upstream account serves it. |
| stream | We inject stream_options.include_usage automatically so the final chunk carries exact token counts. Your bill matches what was generated. |
| max_tokens | Used to size the pre-authorization hold on your balance. Setting it very high on a low balance can get the request rejected even though the reply would have been short. |
| tools | Passed through. Tool definitions count as input tokens. |
Embeddings
Billed on input tokens only — there is no output side.
curl https://api.voyai.net/v1/embeddings \
-H "Authorization: Bearer $VOYAI_API_KEY" \
-H "Content-Type: application/json" \
-d '{"model": "BAAI/bge-m3", "input": "hello world"}'List models
Returns only the models this key is allowed to use, in OpenAI list format. Most clients call this on startup.
curl https://api.voyai.net/v1/models \
-H "Authorization: Bearer $VOYAI_API_KEY"