Skip to navigation

Code Integration

View as Markdown

Use the OpenModels chat completions endpoint from server-side code. Keep your API key in an environment variable and send the prompt through the OpenAI-compatible messages array.

Endpoint:

POST https://api.getopenmodels.com/v1/chat/completions

Environment variable:

OM_API_KEY=ale-...

Do not hardcode API keys in source code or client-side browser bundles.

Request shape

{
"model": "kimi-k2.7-code",
"route": { "provider": "<provider-for-this-model>" },
"route_mode": "balanced",
"messages": [
{
"role": "user",
"content": "Hello!"
}
]
}

Node.js

This example uses the built-in fetch API available in Node.js 18 and later.

const apiKey = process.env.OM_API_KEY;
if (!apiKey) {
throw new Error("Missing OM_API_KEY");
}
async function main() {
const response = await fetch("https://api.getopenmodels.com/v1/chat/completions", {
method: "POST",
headers: {
"Authorization": `Bearer ${apiKey}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
model: "kimi-k2.7-code",
route: { provider: "<provider-for-this-model>" },
route_mode: "balanced",
messages: [
{
role: "user",
content: "Hello!",
},
],
}),
});
const data = await response.json();
if (!response.ok) {
throw new Error(data?.error?.message || data?.error || `OpenModels error ${response.status}`);
}
console.log(data.choices?.[0]?.message?.content ?? "");
}
main().catch((error) => {
console.error(error);
process.exit(1);
});

Python

This example uses Python standard library modules only.

import json
import os
import urllib.error
import urllib.request
api_key = os.environ["OM_API_KEY"]
payload = {
"model": "kimi-k2.7-code",
"route": {"provider": "<provider-for-this-model>"},
"route_mode": "balanced",
"messages": [
{
"role": "user",
"content": "Hello!",
}
],
}
request = urllib.request.Request(
"https://api.getopenmodels.com/v1/chat/completions",
data=json.dumps(payload).encode("utf-8"),
headers={
"Authorization": f"Bearer {api_key}",
"Content-Type": "application/json",
},
method="POST",
)
try:
with urllib.request.urlopen(request, timeout=60) as response:
data = json.loads(response.read().decode("utf-8"))
except urllib.error.HTTPError as error:
detail = error.read().decode("utf-8")
raise RuntimeError(f"OpenModels error {error.code}: {detail}") from error
print(data.get("choices", [{}])[0].get("message", {}).get("content", ""))

Go

This example uses Go’s standard net/http package.

package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"net/http"
"os"
)
func main() {
apiKey := os.Getenv("OM_API_KEY")
if apiKey == "" {
panic("Missing OM_API_KEY")
}
payload := map[string]any{
"model": "kimi-k2.7-code",
"route": map[string]string{"provider": "<provider-for-this-model>"},
"route_mode": "balanced",
"messages": []map[string]string{
{
"role": "user",
"content": "Hello!",
},
},
}
body, err := json.Marshal(payload)
if err != nil {
panic(err)
}
req, err := http.NewRequest(
http.MethodPost,
"https://api.getopenmodels.com/v1/chat/completions",
bytes.NewReader(body),
)
if err != nil {
panic(err)
}
req.Header.Set("Authorization", "Bearer "+apiKey)
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
responseBody, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
if resp.StatusCode < 200 || resp.StatusCode >= 300 {
panic(fmt.Sprintf("OpenModels error %d: %s", resp.StatusCode, string(responseBody)))
}
var data struct {
Choices []struct {
Message struct {
Content string `json:"content"`
} `json:"message"`
} `json:"choices"`
}
if err := json.Unmarshal(responseBody, &data); err != nil {
panic(err)
}
if len(data.Choices) > 0 {
fmt.Println(data.Choices[0].Message.Content)
}
}

Notes

  • Keep OM_API_KEY on the server. Do not expose it in frontend code.
  • Use messages for chat prompts. The optional OpenAI user field is for end-user tracking, not the prompt body.
  • The examples include optional route and route_mode fields. Remove them to use the default available route.
  • For production error handling, parse error.code and follow the Errors guide.